Skip to content
Snippets Groups Projects
Commit 8596b757 authored by Neuber, Eugen Ramon's avatar Neuber, Eugen Ramon :speech_balloon:
Browse files

Add remove file data by id /WIP

parent 424ea1f5
No related branches found
No related tags found
No related merge requests found
Pipeline #229831 failed
......@@ -64,6 +64,8 @@ class FileDataDataPersister extends AbstractController implements ContextAwareDa
public function remove($data, array $context = []): void
{
// no need to check, because signature is checked by getting the data
// $i = $data->getIdentifier();
// echo " FileDataPersister::remove(identifier: $i)\n";
assert($data instanceof FileData);
......
......@@ -53,6 +53,7 @@ class FileDataDataProvider extends AbstractDataProvider
protected function getFileDataById($id, array $filters): object
{
// echo " FileDataProvider::getFileDataById($id, filters)\n";
$sig = $this->requestStack->getCurrentRequest()->headers->get('x-dbp-signature', '');
if (!$sig) {
throw ApiError::withDetails(Response::HTTP_UNAUTHORIZED, 'Signature missing', 'blob:createFileData-missing-sig');
......@@ -77,8 +78,10 @@ class FileDataDataProvider extends AbstractDataProvider
}
$fileData = $this->blobService->setBucket($fileData);
if ($this->requestStack->getCurrentRequest()->getMethod() !== 'DELETE') {
$fileData = $this->blobService->getLink($fileData);
$this->blobService->saveFileData($fileData);
}
return $fileData;
}
......@@ -120,7 +123,7 @@ class FileDataDataProvider extends AbstractDataProvider
assert($fileData instanceof FileData);
$fileData->setBucket($bucket);
$fileData = $this->blobService->getLink($fileData);
$this->blobService->saveFileData($fileData);
// $this->blobService->saveFileData($fileData);
}
return $fileDatas;
......@@ -149,10 +152,12 @@ class FileDataDataProvider extends AbstractDataProvider
// check if signed params aer equal to request params
if ($data['bucketID'] !== $bucketId) {
/** @noinspection ForgottenDebugOutputInspection */
dump($data['bucketID'], $bucketId);
throw ApiError::withDetails(Response::HTTP_FORBIDDEN, 'BucketId change forbidden', 'blob:bucketid-change-forbidden');
}
if ((int) $data['creationTime'] !== (int) $creationTime) {
/** @noinspection ForgottenDebugOutputInspection */
dump($data['creationTime'], $creationTime);
throw ApiError::withDetails(Response::HTTP_FORBIDDEN, 'Creation Time change forbidden', 'blob:creationtime-change-forbidden');
}
......
......@@ -112,10 +112,15 @@ use Symfony\Component\Serializer\Annotation\Groups;
* },
* },
* "delete" = {
* "method" = "DELETE",
* "path" = "/blob/files/{identifier}",
* "openapi_context" = {
* "tags" = {"Blob"},
* },
* "denormalization_context" = {
* "jsonld_embed_context" = true,
* "groups" = {"BlobFiles:exists"}
* },
* }
* },
* iri="https://schema.org/DigitalDocument",
......
......@@ -58,9 +58,16 @@ class BlobService
public function createFileData(Request $request): FileData
{
$fileData = new FileData();
echo " BlobService::createFileData()\n";
if ($identifier = $request->get('identifier')) {
$fileData = $this->em->find(FileData::class, $identifier);
echo " load from store.\n";
} else {
$fileData = new FileData();
$fileData->setIdentifier((string)Uuid::v4());
echo " create new.\n";
}
/** @var ?UploadedFile $uploadedFile */
$uploadedFile = $request->files->get('file');
......@@ -132,12 +139,16 @@ class BlobService
$this->em->persist($fileData);
$this->em->flush();
} catch (\Exception $e) {
echo " error: {$e->getMessage()}\n";
echo " fileData =" . print_r($fileData, true)."\n";
throw ApiError::withDetails(Response::HTTP_INTERNAL_SERVER_ERROR, 'File could not be saved!', 'blob:file-not-saved', ['message' => $e->getMessage()]);
}
}
public function saveFile(FileData $fileData): ?FileData
{
$i = $fileData->getIdentifier();
echo " BlobService::saveFile(identifier: $i)\n";
$datasystemService = $this->datasystemService->getServiceByBucket($fileData->getBucket());
$fileData = $datasystemService->saveFile($fileData);
......@@ -154,6 +165,7 @@ class BlobService
public function getFileData(string $identifier): FileData
{
echo " BlobService::getFileData($identifier)\n";
/** @var FileData $fileData */
$fileData = $this->em
->getRepository(FileData::class)
......@@ -168,6 +180,7 @@ class BlobService
public function getFileDataByBucketIDAndPrefix(string $bucketID, string $prefix): array
{
echo " BlobService::getFileDataByBucketIDAndPrefix($bucketID, $prefix)\n";
$fileDatas = $this->em
->getRepository(FileData::class)
->findBy(['bucketID' => $bucketID, 'prefix' => $prefix]);
......@@ -228,6 +241,8 @@ class BlobService
public function removeFileData(FileData $fileData)
{
// $i = $fileData->getIdentifier();
// echo " BlobService::removeFileData(identifier: {$i})\n";
$datasystemService = $this->datasystemService->getServiceByBucket($fileData->getBucket());
$datasystemService->removeFile($fileData);
......
......@@ -9,11 +9,11 @@ use Dbp\Relay\BlobBundle\Helper\PoliciesStruct;
interface DatasystemProviderServiceInterface
{
public function saveFile(FileData &$fileData): ?FileData;
public function saveFile(FileData $fileData): ?FileData;
public function renameFile(FileData &$fileData): ?FileData;
public function renameFile(FileData $fileData): ?FileData;
public function getLink(FileData &$fileData, PoliciesStruct $policiesStruct): ?FileData;
public function getLink(FileData $fileData, PoliciesStruct $policiesStruct): ?FileData;
public function removeFile(FileData &$fileData): bool;
public function removeFile(FileData $fileData): bool;
}
This diff is collapsed.
......@@ -54,6 +54,7 @@ class Kernel extends BaseKernel
$container->extension('dbp_relay_blob', [
'database_url' => 'sqlite:///var/dbp_relay_blob_test.db',
// 'database_url' => 'sqlite:///:memory:',
'buckets' => [
'test_bucket' => [
'service' => 'Dbp\Relay\BlobBundle\Tests\DummyFileSystemService',
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment