Beste PRGers,
Ik heb een interne website (restfull) in Laravel 5.1 gebouwd waar onze medewerkers de artifacts van onze buildservers (Jenkins) kunnen uploaden.
Momenteel gaat dit nog handmatig. Het zou veel fijner zijn wanneer we dat zouden kunnen automatiseren.
Helaas is er geen (bruikbare) plugin voor Jenkins waarmee ik een artifact kan uploaden middels HTTP Post. Dus heb ik een eenvoudig PHP script gemaakt dat dat zou moeten realiseren.
Zoals verwacht krijg ik een TokenMismatchException.
Het is een inhouse website, de gebruikers hoeven zichzelf niet eens te registeren / inloggen om artifacten op te slaan.
Hoe kan ik er voor zorgen dat Jenkins de artifacten kan uploaden in acht nemende de anti-CSRF maatregelen, of is het (aangezien het inhouse-only is) ook goed genoeg om de hele CSRF uit te schakelen?
Alvast bedankt voor jullie reactie!
Matis
Ik heb een interne website (restfull) in Laravel 5.1 gebouwd waar onze medewerkers de artifacts van onze buildservers (Jenkins) kunnen uploaden.
Momenteel gaat dit nog handmatig. Het zou veel fijner zijn wanneer we dat zouden kunnen automatiseren.
Helaas is er geen (bruikbare) plugin voor Jenkins waarmee ik een artifact kan uploaden middels HTTP Post. Dus heb ik een eenvoudig PHP script gemaakt dat dat zou moeten realiseren.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| <?php $host = 'http://localhost:8081'; $shortopts = ""; $shortopts .= "p:"; // Project ID $shortopts .= "v:"; // Version ID $shortopts .= "b:"; // File to upload $shortopts .= "d:"; // Description $options = getopt($shortopts); var_dump($options); if (sizeof($options) !== 4) { die("Please provide 4 arguments"); } $pid = (int)$options['p']; $vid = (int)$options['v']; $blob = realpath($options['b']); if ($blob === false) { die("File not found: " . $options['b']); } $description = $options['d']; $url = sprintf('%s/project/%d/version/%d/blob/create', $host, $pid, $vid); $fields = array( 'blob_name' => '@'.$blob, 'blob_preferred' => false, 'blob_desc' => $description, '_token' => 'hier moet iets komen', ); var_dump($fields); $ch = curl_init(); //set the url, number of POST vars, POST data curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //execute post $result = curl_exec($ch); //close connection curl_close($ch); // Dump result for debugging purpose echo $result; |
Zoals verwacht krijg ik een TokenMismatchException.
Het is een inhouse website, de gebruikers hoeven zichzelf niet eens te registeren / inloggen om artifacten op te slaan.
Hoe kan ik er voor zorgen dat Jenkins de artifacten kan uploaden in acht nemende de anti-CSRF maatregelen, of is het (aangezien het inhouse-only is) ook goed genoeg om de hele CSRF uit te schakelen?
Alvast bedankt voor jullie reactie!
Matis
If money talks then I'm a mime
If time is money then I'm out of time