Example #1
0
 /**
  * Make a request to the Pantheon API
  *
  * @param [string] $realm   Permissions realm for data request (e.g. user,
  *   site organization, etc. Can also be "public" to simply pull read-only
  *   data that is not privileged.
  * @param [string] $uuid    The UUID of the item in the realm to access
  * @param [string] $path    API path (URL)
  * @param [string] $method  HTTP method to use
  * @param [mixed]  $options A native PHP data structure (e.g. int, string,
  *   array, or stdClass) to be sent along with the request
  * @return [array] $data
  */
 public static function request($realm, $uuid, $path = false, $method = 'GET', $options = null)
 {
     if (!in_array($realm, array('login', 'user', 'public'))) {
         Auth::loggedIn();
     }
     try {
         $cache = Terminus::get_cache();
         if (!in_array($realm, array('login', 'user'))) {
             $options['cookies'] = array('X-Pantheon-Session' => Session::getValue('session'));
             $options['verify'] = false;
         }
         $url = Endpoint::get(array('realm' => $realm, 'uuid' => $uuid, 'path' => $path));
         if (Terminus::get_config('debug')) {
             Logger::debug('Request URL: ' . $url);
         }
         $resp = Request::send($url, $method, $options);
         $json = $resp->getBody(true);
         $data = array('info' => $resp->getInfo(), 'headers' => $resp->getRawHeaders(), 'json' => $json, 'data' => json_decode($json), 'status_code' => $resp->getStatusCode());
         return $data;
     } catch (Guzzle\Http\Exception\BadResponseException $e) {
         $response = $e->getResponse();
         \Terminus::error("%s", $response->getBody(true));
     } catch (Guzzle\Http\Exception\HttpException $e) {
         $request = $e->getRequest();
         $sanitized_request = TerminusCommand::stripSensitiveData((string) $request, TerminusCommand::$blacklist);
         \Terminus::error('Request %s had failed: %s', array($sanitized_request, $e->getMessage()));
     } catch (Exception $e) {
         \Terminus::error('Unrecognised request failure: %s', $e->getMessage());
     }
 }
Example #2
0
 function testEndpoints()
 {
     // expected => test
     $tests = array('/api/users/UUID/sites' => array('realm' => 'users', 'path' => 'sites', 'uuid' => 'UUID'), '/api/products' => array('realm' => 'products', 'path' => false, 'uuid' => 'public'));
     foreach ($tests as $expected => $args) {
         $this->assertEquals($expected, Endpoint::get($args));
     }
 }
Example #3
0
 function testEndpoints()
 {
     $host = getenv("TERMINUS_HOST") ?: 'dashboard.pantheon.io';
     // expected => test
     $tests = array('https://' . $host . '/api/users/UUID/sites' => array('realm' => 'users', 'path' => 'sites', 'uuid' => 'UUID'), 'https://' . $host . '/api/products' => array('realm' => 'products', 'path' => false, 'uuid' => 'public'));
     foreach ($tests as $expected => $args) {
         $this->assertEquals($expected, Endpoint::get($args));
     }
 }
Example #4
0
 function testEndpoints()
 {
     $host = getenv("TERMINUS_HOST") ?: 'dashboard.pantheon.io';
     $protocol = getenv("TERMINUS_PROTOCOL") ?: 'https';
     $port = getenv("TERMINUS_PORT") ?: '443';
     // expected => test
     $tests = array("{$protocol}://{$host}:{$port}/api/users/UUID/sites" => array('realm' => 'users', 'path' => 'sites', 'uuid' => 'UUID'), "{$protocol}://{$host}:{$port}/api/products" => array('realm' => 'products', 'path' => false, 'uuid' => 'public'));
     foreach ($tests as $expected => $args) {
         $this->assertEquals($expected, Endpoint::get($args));
     }
 }
 /**
  * Make a request to the Dashbord's internal API.
  *
  * @param $realm
  *    Permissions realm for data request: currently "user" or "site" but in the
  *    future this could also be "organization" or another high-level business
  *    object (e.g. "product" for managing your app). Can also be "public" to
  *    simply pull read-only data that is not privileged.
  *
  * @param $uuid
  *    The UUID of the item in the realm you want to access.
  *
  * @param $method
  *    HTTP method (verb) to use.
  *
  * @param $data
  *    A native PHP data structure (int, string, arary or simple object) to be
  *    sent along with the request. Will be encoded as JSON for you.
  */
 public static function request($realm, $uuid, $path = FALSE, $method = 'GET', $options = NULL)
 {
     if (!in_array($realm, array('login', 'user', 'public')) and !Terminus::is_test()) {
         Auth::loggedIn();
     }
     try {
         $cache = Terminus::get_cache();
         // combine session realm uuid and path to get a unique key
         // @todo need cache "groups"
         $cachekey = md5(Session::getValue('user_uuid') . $uuid . $realm . $path);
         $data = $cache->get_data($cachekey);
         // check the request cache
         if ("GET" == $method and !Terminus::get_config('nocache') and !getenv('CLI_TEST_MODE') and !empty($data)) {
             if (Terminus::get_config('debug')) {
                 Logger::debug('CacheKey: ' . $cachekey);
             }
             return (array) $data;
         }
         // for some methods we'll assume the cache should be invalidated
         if (in_array($method, array("POST", "PUT", "DELETE"))) {
             $cache->flush(null, 'session');
         }
         if (!in_array($realm, array('login', 'user'))) {
             $options['cookies'] = array('X-Pantheon-Session' => Session::getValue('session'));
             $options['verify'] = false;
         }
         $url = Endpoint::get(array('realm' => $realm, 'uuid' => $uuid, 'path' => $path));
         if (Terminus::get_config('debug')) {
             Logger::debug('Request URL: ' . $url);
         }
         $resp = Request::send($url, $method, $options);
         $json = $resp->getBody(TRUE);
         $data = array('info' => $resp->getInfo(), 'headers' => $resp->getRawHeaders(), 'json' => $json, 'data' => json_decode($json), 'status_code' => $resp->getStatusCode());
         $cache->put_data($cachekey, $data);
         return $data;
     } catch (Guzzle\Http\Exception\BadResponseException $e) {
         $response = $e->getResponse();
         \Terminus::error("%s", $response->getBody(TRUE));
     } catch (Guzzle\Http\Exception\HttpException $e) {
         $request = $e->getRequest();
         //die(Terminus_Command::stripSensitiveData());
         $sanitized_request = Terminus_Command::stripSensitiveData((string) $request, Terminus_Command::$_blacklist);
         \Terminus::error("Request %s had failed: %s", array($sanitized_request, $e->getMessage()));
     } catch (Exception $e) {
         \Terminus::error("Unrecognised request failure: %s", $e->getMessage());
     }
 }
Example #6
0
 /**
  * Make a request to the Pantheon API
  *
  * @param [string] $realm   Permissions realm for data request (e.g. user,
  *   site organization, etc. Can also be "public" to simply pull read-only
  *   data that is not privileged.
  * @param [string] $uuid    The UUID of the item in the realm to access
  * @param [string] $path    API path (URL)
  * @param [string] $method  HTTP method to use
  * @param [mixed]  $options A native PHP data structure (e.g. int, string,
  *   array, or stdClass) to be sent along with the request
  * @return [array] $data
  */
 public function request($realm, $uuid, $path = false, $method = 'GET', $options = array())
 {
     $logger = Terminus::getLogger();
     try {
         $url = Endpoint::get(array('realm' => $realm, 'uuid' => $uuid, 'path' => $path));
         $logger->debug('Request URL: ' . $url);
         $response = $this->send($url, $method, $options);
         $data = array('data' => json_decode($response->getBody()->getContents()), 'headers' => $response->getHeaders(), 'status_code' => $response->getStatusCode());
         return $data;
     } catch (GuzzleHttp\Exception\BadResponseException $e) {
         $response = $e->getResponse();
         throw new TerminusException($response->getBody(true));
     } catch (GuzzleHttp\Exception\HttpException $e) {
         $request = $e->getRequest();
         $sanitized_request = Utils\stripSensitiveData((string) $request, $this->blacklist);
         throw new TerminusException('API Request Error. {msg} - Request: {req}', array('req' => $sanitized_request, 'msg' => $e->getMessage()));
     } catch (Exception $e) {
         throw new TerminusException('API Request Error: {msg}', array('msg' => $e->getMessage()));
     }
 }
Example #7
0
 /**
  * @param $args (array)
  *    required args are
  *      - realm ( i.e. user,site,organization )
  *      - path ( specific method to call )
  */
 static function get($args)
 {
     $endpoint = new Endpoint($args);
     return $endpoint->lookup($args);
 }
 /**
  * Make a request to the Pantheon API
  *
  * @param [string] $realm   Permissions realm for data request (e.g. user,
  *   site organization, etc. Can also be "public" to simply pull read-only
  *   data that is not privileged.
  * @param [string] $uuid    The UUID of the item in the realm to access
  * @param [string] $path    API path (URL)
  * @param [string] $method  HTTP method to use
  * @param [mixed]  $options A native PHP data structure (e.g. int, string,
  *   array, or stdClass) to be sent along with the request
  * @return [array] $data
  */
 public static function request($realm, $uuid, $path = false, $method = 'GET', $options = array())
 {
     $logger = Terminus::getLogger();
     try {
         if (!in_array($realm, array('auth/refresh', 'login', 'user'))) {
             if (!isset($options['headers'])) {
                 $options['headers'] = array();
             }
             $options['headers']['Cookie'] = array('X-Pantheon-Session' => Session::getValue('id_token'));
         }
         if (!in_array($realm, array('login', 'user'))) {
             $options['cookies'] = array('X-Pantheon-Session' => Session::getValue('session'));
             $options['verify'] = false;
         }
         $url = Endpoint::get(array('realm' => $realm, 'uuid' => $uuid, 'path' => $path));
         $logger->debug('Request URL: ' . $url);
         Terminus::getLogger()->debug('URL: {url}', compact('url'));
         $resp = Request::send($url, $method, $options);
         $json = $resp->getBody(true);
         $data = array('info' => $resp->getInfo(), 'headers' => $resp->getRawHeaders(), 'json' => $json, 'data' => json_decode($json), 'status_code' => $resp->getStatusCode());
         return $data;
     } catch (Guzzle\Http\Exception\BadResponseException $e) {
         $response = $e->getResponse();
         throw new TerminusException($response->getBody(true));
     } catch (Guzzle\Http\Exception\HttpException $e) {
         $request = $e->getRequest();
         $sanitized_request = TerminusCommand::stripSensitiveData((string) $request, TerminusCommand::$blacklist);
         throw new TerminusException('API Request Error. {msg} - Request: {req}', array('req' => $sanitized_request, 'msg' => $e->getMessage()));
     } catch (Exception $e) {
         throw new TerminusException('API Request Error: {msg}', array('msg' => $e->getMessage()));
     }
 }