fkooman\RemoteStorage\RemoteStorageService::getDocument PHP Method

getDocument() public method

public getDocument ( Path $path, fkooman\Http\Request $request, fkooman\Rest\Plugin\Authentication\Bearer\TokenInfo $tokenInfo = null )
$path Path
$request fkooman\Http\Request
$tokenInfo fkooman\Rest\Plugin\Authentication\Bearer\TokenInfo
    public function getDocument(Path $path, Request $request, TokenInfo $tokenInfo = null)
    {
        if (null !== $tokenInfo) {
            if ($path->getUserId() !== $tokenInfo->getUserId()) {
                throw new ForbiddenException('path does not match authorized subject');
            }
            if (!$this->hasReadScope($tokenInfo->getScope(), $path->getModuleName())) {
                throw new ForbiddenException('path does not match authorized scope');
            }
        }
        $documentVersion = $this->remoteStorage->getVersion($path);
        if (null === $documentVersion) {
            throw new NotFoundException(sprintf('document "%s" not found', $path->getPath()));
        }
        $requestedVersion = $this->stripQuotes($request->getHeader('If-None-Match'));
        $documentContentType = $this->remoteStorage->getContentType($path);
        if (null !== $requestedVersion) {
            if (in_array($documentVersion, $requestedVersion)) {
                $response = new Response(304, $documentContentType);
                $response->setHeader('ETag', '"' . $documentVersion . '"');
                return $response;
            }
        }
        $rsr = new Response(200, $documentContentType);
        $rsr->setHeader('ETag', '"' . $documentVersion . '"');
        if ('development' !== $this->options['server_mode']) {
            $rsr->setHeader('Accept-Ranges', 'bytes');
        }
        if ('GET' === $request->getMethod()) {
            if ('development' === $this->options['server_mode']) {
                // use body
                $rsr->setBody(file_get_contents($this->remoteStorage->getDocument($path, $requestedVersion)));
            } else {
                // use X-SendFile
                $rsr->setFile($this->remoteStorage->getDocument($path, $requestedVersion));
            }
        }
        return $rsr;
    }