Esempio n. 1
0
 /**
  * {@inheritdoc}
  * @see LoaderInterface::loadJson()
  */
 public static function loadJson(ClientResponseInterface $response)
 {
     $token = $response->getHeader('X-Subject-Token');
     $jsonString = $response->getContent();
     $obj = json_decode($jsonString);
     if (empty($token)) {
         $invalid = true;
     }
     if (isset($invalid) || !isset($obj->token->expires_at)) {
         throw new InvalidArgumentException("Malformed JSON document " . (string) $jsonString);
     }
     $regions = $services = [];
     if (!empty($obj->token->catalog)) {
         foreach ($obj->token->catalog as $srv) {
             foreach ($srv->endpoints as $srvEndpoint) {
                 $url = $srvEndpoint->url;
                 $srvVersion = OpenStackConfig::parseIdentityVersion($url);
                 if (isset($srvEndpoint->region)) {
                     $regions[$srvEndpoint->region] = true;
                     $endpointRegion = $srvEndpoint->region;
                 } else {
                     $endpointRegion = '';
                 }
                 if (!isset($services[$srv->type][$endpointRegion][$srvVersion])) {
                     $services[$srv->type][$endpointRegion][$srvVersion] = [];
                 }
                 $srvEndpoint->publicURL = $url;
                 //Interface - can be public, internal or admin
                 $services[$srv->type][$endpointRegion][$srvVersion][$srvEndpoint->interface] = $srvEndpoint;
             }
         }
     }
     $regions = array_keys($regions);
     $ret = new AuthToken();
     $ret->setExpires(new DateTime($obj->token->expires_at))->setId($token)->setAuthDocument($obj)->setRegionEndpoints($services)->setZones($regions);
     if (isset($obj->token->project->id)) {
         $ret->setTenantId($obj->token->project->id);
     }
     if (isset($obj->token->project->name)) {
         $ret->setTenantName($obj->token->project->name);
     }
     return $ret;
 }
Esempio n. 2
0
 /**
  * {@inheritdoc}
  * @see LoaderInterface::loadJson()
  */
 public static function loadJson(ClientResponseInterface $response)
 {
     $jsonString = $response->getContent();
     $obj = json_decode($jsonString);
     if (!isset($obj->access->token)) {
         $invalid = true;
     }
     if (isset($invalid) || !isset($obj->access->token->expires) || !isset($obj->access->token->id)) {
         throw new InvalidArgumentException("Malformed JSON document " . (string) $jsonString);
     }
     $services = array();
     $regions = array();
     if (!empty($obj->access->serviceCatalog)) {
         foreach ($obj->access->serviceCatalog as $srv) {
             foreach ($srv->endpoints as $srvEndpoint) {
                 $srvVersion = isset($srvEndpoint->versionId) ? $srvEndpoint->versionId . '' : '';
                 if (isset($srvEndpoint->region)) {
                     $regions[$srvEndpoint->region] = true;
                     $endpointRegion = $srvEndpoint->region;
                 } else {
                     $endpointRegion = '';
                 }
                 if (!isset($services[$srv->type][$endpointRegion][$srvVersion])) {
                     $services[$srv->type][$endpointRegion][$srvVersion] = array();
                 }
                 $services[$srv->type][$endpointRegion][$srvVersion][] = $srvEndpoint;
             }
         }
     }
     $regions = array_keys($regions);
     $ret = new AuthToken();
     $ret->setExpires(new DateTime($obj->access->token->expires))->setId($obj->access->token->id)->setAuthDocument($obj)->setRegionEndpoints($services)->setZones($regions);
     if (isset($obj->access->token->tenant->id)) {
         $ret->setTenantId($obj->access->token->tenant->id);
     }
     if (isset($obj->access->token->tenant->name)) {
         $ret->setTenantName($obj->access->token->tenant->name);
     }
     return $ret;
 }