From 29436dfe378c11d342800640488482d906857c71 Mon Sep 17 00:00:00 2001 From: "William R. Otte" Date: Thu, 13 Mar 2014 15:49:42 -0700 Subject: [PATCH] Added 'method' field to the HTTP request build step. Summary: This revision adds a 'method' field to the HTTP request harbormaster build step. This allows the user to specify GET, POST, DELETE, and PUT (limited by the underlying wrapper phabricator uses for HTTP requests). I'm not sure how much sense PUT makes, but oh well. Existing plans shouldn't break, as if this field is an empty string, we default to POST, which is the old behavior. Fixes T4604 Test Plan: 1) Verified that the empty string does, in fact, issue a POST request. Changed the method to be GET and observed that the problem described in T4604 is resolved. Reviewers: #blessed_reviewers, epriestley Reviewed By: #blessed_reviewers, epriestley Subscribers: aran, epriestley Maniphest Tasks: T4604 Differential Revision: https://secure.phabricator.com/D8520 --- ...sterHTTPRequestBuildStepImplementation.php | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/applications/harbormaster/step/HarbormasterHTTPRequestBuildStepImplementation.php b/src/applications/harbormaster/step/HarbormasterHTTPRequestBuildStepImplementation.php index ba6f3e6c7e..c9f0b9dc9e 100644 --- a/src/applications/harbormaster/step/HarbormasterHTTPRequestBuildStepImplementation.php +++ b/src/applications/harbormaster/step/HarbormasterHTTPRequestBuildStepImplementation.php @@ -16,7 +16,7 @@ final class HarbormasterHTTPRequestBuildStepImplementation $uri = new PhutilURI($settings['uri']); $domain = $uri->getDomain(); - return pht('Make an HTTP request to %s', $domain); + return pht('Make an HTTP %s request to %s', $settings['method'], $domain); } public function execute( @@ -34,8 +34,13 @@ final class HarbormasterHTTPRequestBuildStepImplementation $log_body = $build->createLog($build_target, $uri, 'http-body'); $start = $log_body->start(); + $method = 'POST'; + if ($settings['method'] !== '') { + $method = $settings['method']; + } + list($status, $body, $headers) = id(new HTTPSFuture($uri)) - ->setMethod('POST') + ->setMethod($method) ->setTimeout(60) ->resolve(); @@ -54,6 +59,12 @@ final class HarbormasterHTTPRequestBuildStepImplementation return false; } + if ($settings['method'] === null || $settings['method'] != '' && + !in_array ($settings['method'], + array('GET', 'PUT', 'DELETE', 'POST'))) { + return false; + } + return true; } @@ -64,6 +75,12 @@ final class HarbormasterHTTPRequestBuildStepImplementation 'description' => pht('The URI to request.'), 'type' => BuildStepImplementation::SETTING_TYPE_STRING, ), + 'method' => array( + 'name' => 'Method', + 'description' => + pht('Request type. Should be GET, POST, PUT, or DELETE.'), + 'type' => BuildStepImplementation::SETTING_TYPE_STRING, + ), ); }