/** * Get missing fields. * * Not all containers come fully instantiated. This method is sometimes * called to "fill in" missing fields. * * @return \OpenStack\ObjectStore\v1\Resource\Container */ protected function loadExtraData() { // If URL and token are empty, we are dealing with a local item that // has not been saved, and was not created with Container::createContainer(). // We treat this as an error condition. if (empty($this->url) || empty($this->token)) { throw new Exception('Remote data cannot be fetched. A Token and endpoint URL are required.'); } // Do a GET on $url to fetch headers. $headers = ['X-Auth-Token' => $this->token]; $response = $this->client->get($this->url, ['headers' => $headers]); $headers = self::reformatHeaders($response->getHeaders()); // Get ACL. $this->acl = ACL::newFromHeaders($headers); // Update size and count. $this->bytes = $response->getHeader('X-Container-Bytes-Used', 0); $this->count = $response->getHeader('X-Container-Object-Count', 0); // Get metadata. $prefix = Container::CONTAINER_METADATA_HEADER_PREFIX; $this->setMetadata(Container::extractHeaderAttributes($headers, $prefix)); return $this; }
/** * Extract information from HTTP headers. * * This is used internally to set object properties from headers. * * @return \OpenStack\ObjectStore\v1\Resource\RemoteObject $this for the current object so it * can be used in chaining methods. */ protected function extractFromHeaders($response) { $this->setContentType($response->getHeader('Content-Type') ? $response->getHeader('Content-Type') : $this->contentType()); $this->lastModified = strtotime($response->getHeader('Last-Modified') ? $response->getHeader('Last-Modified') : 0); $this->etag = $response->getHeader('Etag') ? $response->getHeader('Etag') : $this->etag; $this->contentLength = (int) ($response->getHeader('Content-Length') ? $response->getHeader('Content-Length') : 0); $this->setDisposition($response->getHeader('Content-Disposition', null)); $this->setEncoding($response->getHeader('Content-Encoding', null)); // Reset the metadata, too: $headers = []; foreach ($response->getHeaders() as $name => $header) { $headers[$name] = $header[0]; } $this->setMetadata(Container::extractHeaderAttributes($headers)); return $this; }