/** * {@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; }
/** * {@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; }