diff --git a/app/controllers/api/storage.php b/app/controllers/api/storage.php index 32d0c9f810..34272bfe49 100644 --- a/app/controllers/api/storage.php +++ b/app/controllers/api/storage.php @@ -58,17 +58,19 @@ App::post('/v1/storage/buckets') ->param('antiVirus', true, new Boolean(), 'Is virus scanning enabled? For file size above ' . Storage::human(APP_LIMIT_ANTIVIRUS) . ' AntiVirus scanning is skipped even if it\'s enabled', true) ->inject('response') ->inject('dbForInternal') + ->inject('dbForExternal') ->inject('audits') ->inject('usage') - ->action(function ($bucketId, $name, $permission, $read, $write, $maximumFileSize, $allowedFileExtensions, $enabled, $adapter, $encryption, $antiVirus, $response, $dbForInternal, $audits, $usage) { + ->action(function ($bucketId, $name, $permission, $read, $write, $maximumFileSize, $allowedFileExtensions, $enabled, $adapter, $encryption, $antiVirus, $response, $dbForInternal, $dbForExternal, $audits, $usage) { /** @var Appwrite\Utopia\Response $response */ /** @var Utopia\Database\Database $dbForInternal */ + /** @var Utopia\Database\Database $dbForExternal */ /** @var Appwrite\Event\Event $audits */ /** @var Appwrite\Stats\Stats $usage */ $bucketId = $bucketId === 'unique()' ? $dbForInternal->getId() : $bucketId; try { - $dbForInternal->createCollection('bucket_' . $bucketId, [ + $dbForExternal->createCollection('bucket_' . $bucketId, [ new Document([ '$id' => 'dateCreated', 'type' => Database::VAR_INTEGER, @@ -257,7 +259,7 @@ App::post('/v1/storage/buckets') '$collection' => 'buckets', 'dateCreated' => \time(), 'dateUpdated' => \time(), - 'name' => $name, + 'name' => $name, 'permission' => $permission, 'maximumFileSize' => $maximumFileSize, 'allowedFileExtensions' => $allowedFileExtensions, @@ -507,13 +509,15 @@ App::post('/v1/storage/buckets/:bucketId/files') ->inject('request') ->inject('response') ->inject('dbForInternal') + ->inject('dbForExternal') ->inject('user') ->inject('audits') ->inject('usage') - ->action(function ($bucketId, $fileId, $file, $read, $write, $request, $response, $dbForInternal, $user, $audits, $usage) { + ->action(function ($bucketId, $fileId, $file, $read, $write, $request, $response, $dbForInternal, $dbForExternal, $user, $audits, $usage) { /** @var Utopia\Swoole\Request $request */ /** @var Appwrite\Utopia\Response $response */ /** @var Utopia\Database\Database $dbForInternal */ + /** @var Utopia\Database\Database $dbForExternal */ /** @var Utopia\Database\Document $user */ /** @var Appwrite\Event\Event $audits */ /** @var Appwrite\Stats\Stats $usage */ @@ -638,11 +642,11 @@ App::post('/v1/storage/buckets/:bucketId/files') try { if($bucket->getAttribute('permission') === 'bucket') { - $file = Authorization::skip(function() use ($dbForInternal, $bucket, $data) { - return $dbForInternal->createDocument('bucket_' . $bucket->getId(), new Document($data)); + $file = Authorization::skip(function() use ($dbForExternal, $bucket, $data) { + return $dbForExternal->createDocument('bucket_' . $bucket->getId(), new Document($data)); }); } else { - $file = $dbForInternal->createDocument('bucket_' . $bucket->getId(), new Document($data)); + $file = $dbForExternal->createDocument('bucket_' . $bucket->getId(), new Document($data)); } } @@ -691,10 +695,12 @@ App::get('/v1/storage/buckets/:bucketId/files') ->param('orderType', 'ASC', new WhiteList(['ASC', 'DESC'], true), 'Order result by ASC or DESC order.', true) ->inject('response') ->inject('dbForInternal') + ->inject('dbForExternal') ->inject('usage') - ->action(function ($bucketId, $search, $limit, $offset, $cursor, $cursorDirection, $orderType, $response, $dbForInternal, $usage) { + ->action(function ($bucketId, $search, $limit, $offset, $cursor, $cursorDirection, $orderType, $response, $dbForInternal, $dbForExternal, $usage) { /** @var Appwrite\Utopia\Response $response */ /** @var Utopia\Database\Database $dbForInternal */ + /** @var Utopia\Database\Database $dbForExternal */ /** @var Appwrite\Stats\Stats $usage */ $bucket = $dbForInternal->getDocument('buckets', $bucketId); @@ -719,11 +725,11 @@ App::get('/v1/storage/buckets/:bucketId/files') if (!empty($cursor)) { if($bucket->getAttribute('permission') ==='bucket') { - $cursorFile = Authorization::skip(function() use ($dbForInternal, $bucket, $cursor) { - return $dbForInternal->getDocument('bucket_' . $bucket->getId(), $cursor); + $cursorFile = Authorization::skip(function() use ($dbForExternal, $bucket, $cursor) { + return $dbForExternal->getDocument('bucket_' . $bucket->getId(), $cursor); }); } else { - $cursorFile = $dbForInternal->getDocument('bucket_' . $bucket->getId(), $cursor); + $cursorFile = $dbForExternal->getDocument('bucket_' . $bucket->getId(), $cursor); } if ($cursorFile->isEmpty()) { @@ -738,11 +744,11 @@ App::get('/v1/storage/buckets/:bucketId/files') } if($bucket->getAttribute('permission') === 'bucket') { - $files = Authorization::skip(function() use ($dbForInternal, $bucketId, $queries, $limit, $offset, $cursor, $cursorDirection, $orderType) { - return $dbForInternal->find('bucket_' . $bucketId, $queries, $limit, $offset, [], [$orderType], $cursorFile ?? null, $cursorDirection); + $files = Authorization::skip(function() use ($dbForExternal, $bucketId, $queries, $limit, $offset, $cursor, $cursorDirection, $orderType) { + return $dbForExternal->find('bucket_' . $bucketId, $queries, $limit, $offset, [], [$orderType], $cursorFile ?? null, $cursorDirection); }); } else { - $files = $dbForInternal->find('bucket_' . $bucketId, $queries, $limit, $offset, [], [$orderType], $cursorFile ?? null, $cursorDirection); + $files = $dbForExternal->find('bucket_' . $bucketId, $queries, $limit, $offset, [], [$orderType], $cursorFile ?? null, $cursorDirection); } $usage @@ -752,7 +758,7 @@ App::get('/v1/storage/buckets/:bucketId/files') $response->dynamic(new Document([ 'files' => $files, - 'sum' => $dbForInternal->count('bucket_' . $bucketId, $queries, APP_LIMIT_COUNT), + 'sum' => $dbForExternal->count('bucket_' . $bucketId, $queries, APP_LIMIT_COUNT), ]), Response::MODEL_FILE_LIST); }); @@ -772,10 +778,12 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId') ->param('fileId', '', new UID(), 'File unique ID.') ->inject('response') ->inject('dbForInternal') + ->inject('dbForExternal') ->inject('usage') - ->action(function ($bucketId, $fileId, $response, $dbForInternal, $usage) { + ->action(function ($bucketId, $fileId, $response, $dbForInternal, $dbForExternal, $usage) { /** @var Appwrite\Utopia\Response $response */ /** @var Utopia\Database\Database $dbForInternal */ + /** @var Utopia\Database\Database $dbForExternal */ /** @var Appwrite\Stats\Stats $usage */ $bucket = $dbForInternal->getDocument('buckets', $bucketId); @@ -793,11 +801,11 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId') } if($bucket->getAttribute('permission') === 'bucket') { - $file = Authorization::skip(function() use ($dbForInternal, $bucketId, $fileId) { - return $dbForInternal->getDocument('bucket_' . $bucketId, $fileId); + $file = Authorization::skip(function() use ($dbForExternal, $bucketId, $fileId) { + return $dbForExternal->getDocument('bucket_' . $bucketId, $fileId); }); } else { - $file = $dbForInternal->getDocument('bucket_' . $bucketId, $fileId); + $file = $dbForExternal->getDocument('bucket_' . $bucketId, $fileId); } if ($file->isEmpty() || $file->getAttribute('bucketId') !== $bucketId) { @@ -839,12 +847,14 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId/preview') ->inject('response') ->inject('project') ->inject('dbForInternal') + ->inject('dbForExternal') ->inject('usage') - ->action(function ($bucketId, $fileId, $width, $height, $gravity, $quality, $borderWidth, $borderColor, $borderRadius, $opacity, $rotation, $background, $output, $request, $response, $project, $dbForInternal, $usage) { + ->action(function ($bucketId, $fileId, $width, $height, $gravity, $quality, $borderWidth, $borderColor, $borderRadius, $opacity, $rotation, $background, $output, $request, $response, $project, $dbForInternal, $dbForExternal, $usage) { /** @var Utopia\Swoole\Request $request */ /** @var Appwrite\Utopia\Response $response */ /** @var Utopia\Database\Document $project */ /** @var Utopia\Database\Database $dbForInternal */ + /** @var Utopia\Database\Database $dbForExternal */ /** @var Appwrite\Stats\Stats $usage */ $storage = 'files'; @@ -883,11 +893,11 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId/preview') if($bucket->getAttribute('permission')==='bucket') { // skip authorization - $file = Authorization::skip(function () use ($dbForInternal, $bucketId, $fileId) { - return $dbForInternal->getDocument('bucket_' . $bucketId, $fileId); + $file = Authorization::skip(function () use ($dbForExternal, $bucketId, $fileId) { + return $dbForExternal->getDocument('bucket_' . $bucketId, $fileId); }); } else { - $file = $dbForInternal->getDocument('bucket_' . $bucketId, $fileId); + $file = $dbForExternal->getDocument('bucket_' . $bucketId, $fileId); } if ($file->isEmpty() || $file->getAttribute('bucketId') !== $bucketId) { @@ -1008,10 +1018,12 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId/download') ->param('fileId', '', new UID(), 'File unique ID.') ->inject('response') ->inject('dbForInternal') + ->inject('dbForExternal') ->inject('usage') - ->action(function ($bucketId, $fileId, $response, $dbForInternal, $usage) { + ->action(function ($bucketId, $fileId, $response, $dbForInternal, $dbForExternal, $usage) { /** @var Appwrite\Utopia\Response $response */ /** @var Utopia\Database\Database $dbForInternal */ + /** @var Utopia\Database\Database $dbForExternal */ /** @var Appwrite\Stats\Stats $usage */ $bucket = $dbForInternal->getDocument('buckets', $bucketId); @@ -1029,11 +1041,11 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId/download') } if($bucket->getAttribute('permission') === 'bucket') { - $file = Authorization::skip(function() use ($dbForInternal, $fileId, $bucketId) { - return $dbForInternal->getDocument('bucket_' . $bucketId, $fileId); + $file = Authorization::skip(function() use ($dbForExternal, $fileId, $bucketId) { + return $dbForExternal->getDocument('bucket_' . $bucketId, $fileId); }); } else { - $file = $dbForInternal->getDocument('bucket_' . $bucketId, $fileId); + $file = $dbForExternal->getDocument('bucket_' . $bucketId, $fileId); } if ($file->isEmpty() || $file->getAttribute('bucketId') !== $bucketId) { @@ -1095,8 +1107,9 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId/view') ->param('fileId', '', new UID(), 'File unique ID.') ->inject('response') ->inject('dbForInternal') + ->inject('dbForExternal') ->inject('usage') - ->action(function ($bucketId, $fileId, $response, $dbForInternal, $usage) { + ->action(function ($bucketId, $fileId, $response, $dbForInternal, $dbForExternal, $usage) { /** @var Appwrite\Utopia\Response $response */ /** @var Utopia\Database\Database $dbForInternal */ /** @var Appwrite\Stats\Stats $usage */ @@ -1116,11 +1129,11 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId/view') } if($bucket->getAttribute('permission') === 'bucket') { - $file = Authorization::skip(function() use ($dbForInternal, $fileId, $bucketId) { - return $dbForInternal->getDocument('bucket_' . $bucketId, $fileId); + $file = Authorization::skip(function() use ($dbForExternal, $fileId, $bucketId) { + return $dbForExternal->getDocument('bucket_' . $bucketId, $fileId); }); } else { - $file = $dbForInternal->getDocument('bucket_' . $bucketId, $fileId); + $file = $dbForExternal->getDocument('bucket_' . $bucketId, $fileId); } $mimes = Config::getParam('storage-mimes'); @@ -1195,9 +1208,10 @@ App::put('/v1/storage/buckets/:bucketId/files/:fileId') ->param('write', null, new Permissions(), 'An array of strings with write permissions. By default no user is granted with any write permissions. [learn more about permissions](/docs/permissions) and get a full list of available permissions.') ->inject('response') ->inject('dbForInternal') + ->inject('dbForExternal') ->inject('audits') ->inject('usage') - ->action(function ($bucketId, $fileId, $read, $write, $response, $dbForInternal, $audits, $usage) { + ->action(function ($bucketId, $fileId, $read, $write, $response, $dbForInternal, $dbForExternal, $audits, $usage) { /** @var Appwrite\Utopia\Response $response */ /** @var Utopia\Database\Database $dbForInternal */ /** @var Appwrite\Event\Event $audits */ @@ -1218,11 +1232,11 @@ App::put('/v1/storage/buckets/:bucketId/files/:fileId') } if($bucket->getAttribute('permission') === 'bucket') { - $file = Authorization::skip(function() use ($dbForInternal, $fileId, $bucketId) { - return $dbForInternal->getDocument('bucket_' . $bucketId, $fileId); + $file = Authorization::skip(function() use ($dbForExternal, $fileId, $bucketId) { + return $dbForExternal->getDocument('bucket_' . $bucketId, $fileId); }); } else { - $file = $dbForInternal->getDocument('bucket_' . $bucketId, $fileId); + $file = $dbForExternal->getDocument('bucket_' . $bucketId, $fileId); } if ($file->isEmpty() || $file->getAttribute('bucketId') !== $bucketId) { @@ -1230,14 +1244,14 @@ App::put('/v1/storage/buckets/:bucketId/files/:fileId') } if($bucket->getAttribute('permission') === 'bucket') { - $file = Authorization::skip(function() use ($dbForInternal, $fileId, $bucketId, $file, $read, $write) { - return $dbForInternal->updateDocument('bucket_' . $bucketId, $fileId, $file + $file = Authorization::skip(function() use ($dbForExternal, $fileId, $bucketId, $file, $read, $write) { + return $dbForExternal->updateDocument('bucket_' . $bucketId, $fileId, $file ->setAttribute('$read', $read) ->setAttribute('$write', $write) ); }); } else { - $file = $dbForInternal->updateDocument('bucket_' . $bucketId, $fileId, $file + $file = $dbForExternal->updateDocument('bucket_' . $bucketId, $fileId, $file ->setAttribute('$read', $read) ->setAttribute('$write', $write) ); @@ -1272,12 +1286,14 @@ App::delete('/v1/storage/buckets/:bucketId/files/:fileId') ->param('fileId', '', new UID(), 'File unique ID.') ->inject('response') ->inject('dbForInternal') + ->inject('dbForExternal') ->inject('events') ->inject('audits') ->inject('usage') - ->action(function ($bucketId, $fileId, $response, $dbForInternal, $events, $audits, $usage) { + ->action(function ($bucketId, $fileId, $response, $dbForInternal, $dbForExternal, $events, $audits, $usage) { /** @var Appwrite\Utopia\Response $response */ /** @var Utopia\Database\Database $dbForInternal */ + /** @var Utopia\Database\Database $dbForExternal */ /** @var Appwrite\Event\Event $events */ /** @var Appwrite\Event\Event $audits */ /** @var Appwrite\Stats\Stats $usage */ @@ -1297,11 +1313,11 @@ App::delete('/v1/storage/buckets/:bucketId/files/:fileId') } if($bucket->getAttribute('permission') === 'bucket') { - $file = Authorization::skip(function() use ($dbForInternal, $fileId, $bucketId) { - return $dbForInternal->getDocument('bucket_' . $bucketId, $fileId); + $file = Authorization::skip(function() use ($dbForExternal, $fileId, $bucketId) { + return $dbForExternal->getDocument('bucket_' . $bucketId, $fileId); }); } else { - $file = $dbForInternal->getDocument('bucket_' . $bucketId, $fileId); + $file = $dbForExternal->getDocument('bucket_' . $bucketId, $fileId); } if ($file->isEmpty() || $file->getAttribute('bucketId') !== $bucketId) { @@ -1312,11 +1328,11 @@ App::delete('/v1/storage/buckets/:bucketId/files/:fileId') if ($device->delete($file->getAttribute('path', ''))) { if($bucket->getAttribute('permission') === 'bucket') { - $deleted = Authorization::skip(function() use ($dbForInternal, $fileId, $bucketId) { - return $dbForInternal->deleteDocument('bucket_' . $bucketId, $fileId); + $deleted = Authorization::skip(function() use ($dbForExternal, $fileId, $bucketId) { + return $dbForExternal->deleteDocument('bucket_' . $bucketId, $fileId); }); } else { - $deleted = $dbForInternal->deleteDocument('bucket_' . $bucketId, $fileId); + $deleted = $dbForExternal->deleteDocument('bucket_' . $bucketId, $fileId); } if (!$deleted) { throw new Exception('Failed to remove file from DB', 500);