WIP: first tests for building dav endpoints

This commit is contained in:
2023-09-12 11:24:50 +02:00
parent ae9f1e3905
commit 6893c833e4
10 changed files with 374 additions and 0 deletions

View File

@@ -73,6 +73,62 @@ final class StoredObjectManager implements StoredObjectManagerInterface
return $this->extractLastModifiedFromResponse($response);
}
public function getContentLength(StoredObject $document): int
{
if ([] === $document->getKeyInfos()) {
if ($this->hasCache($document)) {
$response = $this->getResponseFromCache($document);
} else {
try {
$response = $this
->client
->request(
Request::METHOD_HEAD,
$this
->tempUrlGenerator
->generate(
Request::METHOD_HEAD,
$document->getFilename()
)
->url
);
} catch (TransportExceptionInterface $exception) {
throw StoredObjectManagerException::errorDuringHttpRequest($exception);
}
}
return $this->extractContentLengthFromResponse($response);
}
return strlen($this->read($document));
}
public function etag(StoredObject $document): string
{
if ($this->hasCache($document)) {
$response = $this->getResponseFromCache($document);
} else {
try {
$response = $this
->client
->request(
Request::METHOD_HEAD,
$this
->tempUrlGenerator
->generate(
Request::METHOD_HEAD,
$document->getFilename()
)
->url
);
} catch (TransportExceptionInterface $exception) {
throw StoredObjectManagerException::errorDuringHttpRequest($exception);
}
}
return $this->extractEtagFromResponse($response);
}
public function read(StoredObject $document): string
{
$response = $this->getResponseFromCache($document);
@@ -163,6 +219,22 @@ final class StoredObjectManager implements StoredObjectManagerInterface
return $date;
}
private function extractContentLengthFromResponse(ResponseInterface $response): int
{
return (((int) $response->getHeaders()['content-length'] ?? [])[0] ?? 0);
}
private function extractEtagFromResponse(ResponseInterface $response): ?string
{
$etag = (($response->getHeaders()['etag'] ?? [])[0] ?? '');
if ('' === $etag) {
return md5($this->extractEtagFromResponse($response));
}
return $etag;
}
private function fillCache(StoredObject $document): void
{
try {