Example #1
0
 /**
  * Test get password with use PasswordGetter system
  */
 public function testGetPasswordWithUsePasswordGetter()
 {
     $configuration = new Configuration('name', 'localhost', 80);
     $configuration->setUser('user');
     $passwordGetter = $this->getMockForAbstractClass('Deployer\\Server\\Password\\PasswordGetterInterface');
     $passwordGetter->expects($this->once())->method('getPassword')->with('localhost', 'user')->will($this->returnValue('some-password'));
     $configuration->setPassword($passwordGetter);
     $password = $configuration->getPassword();
     $this->assertEquals('some-password', $password, 'Password mismatch');
 }
 /**
  * Make the HTTP call (Sync)
  *
  * @param string $resourcePath path to method endpoint
  * @param string $method       method to call
  * @param array  $queryParams  parameters to be place in query URL
  * @param array  $postData     parameters to be placed in POST body
  * @param array  $headerParams parameters to be place in request header
  * @param string $responseType expected response type of the endpoint
  *
  * @throws ApiException on a non 2xx response
  * @return mixed
  */
 public function callApi($resourcePath, $method, $queryParams, $postData, $headerParams, $responseType = null)
 {
     $headers = array();
     // construct the http header
     $headerParams = array_merge((array) $this->config->getDefaultHeaders(), (array) $headerParams);
     foreach ($headerParams as $key => $val) {
         $headers[] = "{$key}: {$val}";
     }
     // form data
     if ($postData and in_array('Content-Type: application/x-www-form-urlencoded', $headers)) {
         $postData = http_build_query($postData);
     } elseif ((is_object($postData) or is_array($postData)) and !in_array('Content-Type: multipart/form-data', $headers)) {
         // json model
         $postData = json_encode(ObjectSerializer::sanitizeForSerialization($postData));
     }
     $url = $this->config->getHost() . $resourcePath;
     $curl = curl_init();
     // set timeout, if needed
     if ($this->config->getCurlTimeout() != 0) {
         curl_setopt($curl, CURLOPT_TIMEOUT, $this->config->getCurlTimeout());
     }
     // return the result on success, rather than just true
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
     curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
     // disable SSL verification, if needed
     if ($this->config->getSSLVerification() == false) {
         curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
         curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
     }
     if (!empty($queryParams)) {
         $url = $url . '?' . http_build_query($queryParams);
     }
     switch ($this->config->getAuthentication()) {
         case Configuration::$BASIC_AUTH:
             curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
             curl_setopt($curl, CURLOPT_USERPWD, $this->config->getUsername() . ':' . $this->config->getPassword());
             break;
         default:
             break;
     }
     if ($method == self::$POST) {
         curl_setopt($curl, CURLOPT_POST, true);
         curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
     } elseif ($method == self::$HEAD) {
         curl_setopt($curl, CURLOPT_NOBODY, true);
     } elseif ($method == self::$OPTIONS) {
         curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "OPTIONS");
         curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
     } elseif ($method == self::$PATCH) {
         curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PATCH");
         curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
     } elseif ($method == self::$PUT) {
         curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
         curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
     } elseif ($method == self::$DELETE) {
         curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE");
         curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
     } elseif ($method != self::$GET) {
         throw new ApiException('Method ' . $method . ' is not recognized.');
     }
     curl_setopt($curl, CURLOPT_URL, $url);
     // Set user agent
     curl_setopt($curl, CURLOPT_USERAGENT, $this->config->getUserAgent());
     // debugging for curl
     if ($this->config->getDebug()) {
         error_log("[DEBUG] HTTP Request body  ~BEGIN~" . PHP_EOL . print_r($postData, true) . PHP_EOL . "~END~" . PHP_EOL, 3, $this->config->getDebugFile());
         curl_setopt($curl, CURLOPT_VERBOSE, 1);
         curl_setopt($curl, CURLOPT_STDERR, fopen($this->config->getDebugFile(), 'a'));
     } else {
         curl_setopt($curl, CURLOPT_VERBOSE, 0);
     }
     // obtain the HTTP response headers
     curl_setopt($curl, CURLOPT_HEADER, 1);
     // Make the request
     $response = curl_exec($curl);
     $http_header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
     $http_header = $this->httpParseHeaders(substr($response, 0, $http_header_size));
     $http_body = substr($response, $http_header_size);
     $response_info = curl_getinfo($curl);
     // debug HTTP response body
     if ($this->config->getDebug()) {
         error_log("[DEBUG] HTTP Response body ~BEGIN~" . PHP_EOL . print_r($http_body, true) . PHP_EOL . "~END~" . PHP_EOL, 3, $this->config->getDebugFile());
     }
     // Handle the response
     if ($response_info['http_code'] == 0) {
         throw new ApiException("API call to {$url} timed out: " . serialize($response_info), 0, null, null);
     } elseif ($response_info['http_code'] >= 200 && $response_info['http_code'] <= 299) {
         // return raw body if response is a file
         if ($responseType == '\\SplFileObject' || $responseType == 'string') {
             return array($http_body, $response_info['http_code'], $http_header);
         }
         $data = json_decode($http_body);
         if (json_last_error() > 0) {
             // if response is a string
             $data = $http_body;
         }
     } else {
         $data = json_decode($http_body);
         if (json_last_error() > 0) {
             // if response is a string
             $data = $http_body;
         }
         throw new ApiException("[" . $response_info['http_code'] . "] Error connecting to the API ({$url})", $response_info['http_code'], $http_header, $data);
     }
     return array($data, $response_info['http_code'], $http_header);
 }