diff --git a/app/config/events.php b/app/config/events.php index 8a89402184..b0db9090fb 100644 --- a/app/config/events.php +++ b/app/config/events.php @@ -267,10 +267,13 @@ return [ '$resource' => true, '$description' => 'This event triggers on any topic event.', 'create' => [ - '$description' => 'This event triggers when a provider is created.', + '$description' => 'This event triggers when a topic is created.', + ], + 'update' => [ + '$description' => 'This event triggers when a topic is updated.', ], 'delete' => [ - '$description' => 'This event triggers when a provider is deleted.' + '$description' => 'This event triggers when a topic is deleted.' ], 'subscribers' => [ '$model' => Response::MODEL_SUBSCRIBER, diff --git a/app/controllers/api/messaging.php b/app/controllers/api/messaging.php index 4a2bc34776..e1057a0885 100644 --- a/app/controllers/api/messaging.php +++ b/app/controllers/api/messaging.php @@ -31,7 +31,7 @@ App::post('/v1/messaging/providers/mailgun') ->desc('Create Mailgun provider') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.create') - ->label('audits.resource', 'providers/{response.$id}') + ->label('audits.resource', 'provider/{response.$id}') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -94,7 +94,7 @@ App::post('/v1/messaging/providers/sendgrid') ->desc('Create Sendgrid provider') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.create') - ->label('audits.resource', 'providers/{response.$id}') + ->label('audits.resource', 'provider/{response.$id}') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -152,7 +152,7 @@ App::post('/v1/messaging/providers/msg91') ->desc('Create Msg91 provider') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.create') - ->label('audits.resource', 'providers/{response.$id}') + ->label('audits.resource', 'provider/{response.$id}') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -212,7 +212,7 @@ App::post('/v1/messaging/providers/telesign') ->desc('Create Telesign provider') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.create') - ->label('audits.resource', 'providers/{response.$id}') + ->label('audits.resource', 'provider/{response.$id}') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -272,7 +272,7 @@ App::post('/v1/messaging/providers/textmagic') ->desc('Create TextMagic provider') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.create') - ->label('audits.resource', 'providers/{response.$id}') + ->label('audits.resource', 'provider/{response.$id}') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -332,7 +332,7 @@ App::post('/v1/messaging/providers/twilio') ->desc('Create Twilio provider') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.create') - ->label('audits.resource', 'providers/{response.$id}') + ->label('audits.resource', 'provider/{response.$id}') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -392,7 +392,7 @@ App::post('/v1/messaging/providers/vonage') ->desc('Create Vonage provider') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.create') - ->label('audits.resource', 'providers/{response.$id}') + ->label('audits.resource', 'provider/{response.$id}') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -452,7 +452,7 @@ App::post('/v1/messaging/providers/fcm') ->desc('Create FCM provider') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.create') - ->label('audits.resource', 'providers/{response.$id}') + ->label('audits.resource', 'provider/{response.$id}') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -506,7 +506,7 @@ App::post('/v1/messaging/providers/apns') ->desc('Create APNS provider') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.create') - ->label('audits.resource', 'providers/{response.$id}') + ->label('audits.resource', 'provider/{response.$id}') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -635,7 +635,7 @@ App::patch('/v1/messaging/providers/mailgun/:providerId') ->desc('Update Mailgun provider') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.update') - ->label('audits.resource', 'providers/{response.$id}') + ->label('audits.resource', 'provider/{response.$id}') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -706,7 +706,7 @@ App::patch('/v1/messaging/providers/sendgrid/:providerId') ->desc('Update Sendgrid provider') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.update') - ->label('audits.resource', 'providers/{response.$id}') + ->label('audits.resource', 'provider/{response.$id}') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -765,7 +765,7 @@ App::patch('/v1/messaging/providers/msg91/:providerId') ->desc('Update Msg91 provider') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.update') - ->label('audits.resource', 'providers/{response.$id}') + ->label('audits.resource', 'provider/{response.$id}') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -831,7 +831,7 @@ App::patch('/v1/messaging/providers/telesign/:providerId') ->desc('Update Telesign provider') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.update') - ->label('audits.resource', 'providers/{response.$id}') + ->label('audits.resource', 'provider/{response.$id}') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -897,7 +897,7 @@ App::patch('/v1/messaging/providers/textmagic/:providerId') ->desc('Update TextMagic provider') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.update') - ->label('audits.resource', 'providers/{response.$id}') + ->label('audits.resource', 'provider/{response.$id}') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -963,7 +963,7 @@ App::patch('/v1/messaging/providers/twilio/:providerId') ->desc('Update Twilio provider') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.update') - ->label('audits.resource', 'providers/{response.$id}') + ->label('audits.resource', 'provider/{response.$id}') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -1029,7 +1029,7 @@ App::patch('/v1/messaging/providers/vonage/:providerId') ->desc('Update Vonage provider') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.update') - ->label('audits.resource', 'providers/{response.$id}') + ->label('audits.resource', 'provider/{response.$id}') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -1095,7 +1095,7 @@ App::patch('/v1/messaging/providers/fcm/:providerId') ->desc('Update FCM provider') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.update') - ->label('audits.resource', 'providers/{response.$id}') + ->label('audits.resource', 'provider/{response.$id}') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -1146,7 +1146,7 @@ App::patch('/v1/messaging/providers/apns/:providerId') ->desc('Update APNS provider') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.update') - ->label('audits.resource', 'providers/{response.$id}') + ->label('audits.resource', 'provider/{response.$id}') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -1219,8 +1219,8 @@ App::patch('/v1/messaging/providers/apns/:providerId') App::delete('/v1/messaging/providers/:providerId') ->desc('Delete provider') ->groups(['api', 'messaging']) - ->label('audits.event', 'providers.delete') - ->label('audits.resource', 'providers/{request.id}') + ->label('audits.event', 'provider.delete') + ->label('audits.resource', 'provider/{request.id}') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -1230,20 +1230,15 @@ App::delete('/v1/messaging/providers/:providerId') ->label('sdk.response.type', Response::CONTENT_TYPE_JSON) ->label('sdk.response.model', Response::MODEL_NONE) ->param('providerId', '', new UID(), 'Provider ID.') - ->inject('queueForDeletes') ->inject('dbForProject') ->inject('response') - ->action(function (string $providerId, Delete $queueForDeletes, Database $dbForProject, Response $response) { + ->action(function (string $providerId, Database $dbForProject, Response $response) { $provider = $dbForProject->getDocument('providers', $providerId); if ($provider->isEmpty()) { throw new Exception(Exception::PROVIDER_NOT_FOUND); } - $queueForDeletes - ->setType(DELETE_TYPE_PROVIDER) - ->setDocument($provider); - $dbForProject->deleteDocument('providers', $provider->getId()); $response @@ -1254,8 +1249,8 @@ App::delete('/v1/messaging/providers/:providerId') App::post('/v1/messaging/topics') ->desc('Create a topic.') ->groups(['api', 'messaging']) - ->label('audits.event', 'topics.create') - ->label('audits.resource', 'topics/{response.$id}') + ->label('audits.event', 'topic.create') + ->label('audits.resource', 'topic/{response.$id}') ->label('scope', 'topics.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -1373,8 +1368,8 @@ App::get('/v1/messaging/topics/:topicId') App::patch('/v1/messaging/topics/:topicId') ->desc('Update a topic.') ->groups(['api', 'messaging']) - ->label('audits.event', 'topics.update') - ->label('audits.resource', 'topics/{response.$id}') + ->label('audits.event', 'topic.update') + ->label('audits.resource', 'topic/{response.$id}') ->label('scope', 'topics.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -1412,8 +1407,8 @@ App::patch('/v1/messaging/topics/:topicId') App::delete('/v1/messaging/topics/:topicId') ->desc('Delete a topic.') ->groups(['api', 'messaging']) - ->label('audits.event', 'topics.delete') - ->label('audits.resource', 'topics/{request.topicId}') + ->label('audits.event', 'topic.delete') + ->label('audits.resource', 'topic/{request.topicId}') ->label('scope', 'topics.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -1447,8 +1442,8 @@ App::delete('/v1/messaging/topics/:topicId') App::post('/v1/messaging/topics/:topicId/subscribers') ->desc('Adds a subscriber to a topic.') ->groups(['api', 'messaging']) - ->label('audits.event', 'subscribers.create') - ->label('audits.resource', 'subscribers/{response.$id}') + ->label('audits.event', 'subscriber.create') + ->label('audits.resource', 'subscriber/{response.$id}') ->label('scope', 'subscribers.write') ->label('sdk.auth', [APP_AUTH_TYPE_JWT, APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -1584,8 +1579,8 @@ App::get('/v1/messaging/topics/:topicId/subscriber/:subscriberId') App::delete('/v1/messaging/topics/:topicId/subscriber/:subscriberId') ->desc('Delete a subscriber from a topic.') ->groups(['api', 'messaging']) - ->label('audits.event', 'subscribers.delete') - ->label('audits.resource', 'subscribers/{request.subscriberId}') + ->label('audits.event', 'subscriber.delete') + ->label('audits.resource', 'subscriber/{request.subscriberId}') ->label('scope', 'subscribers.write') ->label('sdk.auth', [APP_AUTH_TYPE_JWT, APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -1622,8 +1617,8 @@ App::delete('/v1/messaging/topics/:topicId/subscriber/:subscriberId') App::post('/v1/messaging/messages/email') ->desc('Create an email.') ->groups(['api', 'messaging']) - ->label('audits.event', 'messages.create') - ->label('audits.resource', 'messages/{response.$id}') + ->label('audits.event', 'message.create') + ->label('audits.resource', 'message/{response.$id}') ->label('scope', 'messages.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -1688,8 +1683,8 @@ App::post('/v1/messaging/messages/email') App::post('/v1/messaging/messages/sms') ->desc('Create an SMS.') ->groups(['api', 'messaging']) - ->label('audits.event', 'messages.create') - ->label('audits.resource', 'messages/{response.$id}') + ->label('audits.event', 'message.create') + ->label('audits.resource', 'message/{response.$id}') ->label('scope', 'messages.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -1751,8 +1746,8 @@ App::post('/v1/messaging/messages/sms') App::post('/v1/messaging/messages/push') ->desc('Create a push notification.') ->groups(['api', 'messaging']) - ->label('audits.event', 'messages.create') - ->label('audits.resource', 'messages/{response.$id}') + ->label('audits.event', 'message.create') + ->label('audits.resource', 'message/{response.$id}') ->label('scope', 'messages.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -1920,8 +1915,8 @@ App::get('/v1/messaging/messages/:messageId') App::patch('/v1/messaging/messages/email/:messageId') ->desc('Update an email.') ->groups(['api', 'messaging']) - ->label('audits.event', 'messages.update') - ->label('audits.resource', 'messages/{response.$id}') + ->label('audits.event', 'message.update') + ->label('audits.resource', 'message/{response.$id}') ->label('scope', 'messages.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -2007,8 +2002,8 @@ App::patch('/v1/messaging/messages/email/:messageId') App::patch('/v1/messaging/messages/sms/:messageId') ->desc('Update an SMS.') ->groups(['api', 'messaging']) - ->label('audits.event', 'messages.update') - ->label('audits.resource', 'messages/{response.$id}') + ->label('audits.event', 'message.update') + ->label('audits.resource', 'message/{response.$id}') ->label('scope', 'messages.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -2084,8 +2079,8 @@ App::patch('/v1/messaging/messages/sms/:messageId') App::patch('/v1/messaging/messages/push/:messageId') ->desc('Update a push notification.') ->groups(['api', 'messaging']) - ->label('audits.event', 'messages.update') - ->label('audits.resource', 'messages/{response.$id}') + ->label('audits.event', 'message.update') + ->label('audits.resource', 'message/{response.$id}') ->label('scope', 'messages.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') diff --git a/app/init.php b/app/init.php index 136ecd25cb..a60dcb2079 100644 --- a/app/init.php +++ b/app/init.php @@ -98,6 +98,7 @@ const APP_LIMIT_COMPRESSION = 20000000; //20MB const APP_LIMIT_ARRAY_PARAMS_SIZE = 100; // Default maximum of how many elements can there be in API parameter that expects array value const APP_LIMIT_ARRAY_ELEMENT_SIZE = 4096; // Default maximum length of element in array parameter represented by maximum URL length. const APP_LIMIT_SUBQUERY = 1000; +const APP_LIMIT_SUBSCRIBERS_SUBQUERY = 1000000; const APP_LIMIT_WRITE_RATE_DEFAULT = 60; // Default maximum write rate per rate period const APP_LIMIT_WRITE_RATE_PERIOD_DEFAULT = 60; // Default maximum write rate period in seconds const APP_LIMIT_LIST_DEFAULT = 25; // Default maximum number of items to return in list API calls @@ -168,7 +169,6 @@ const DELETE_TYPE_SESSIONS = 'sessions'; const DELETE_TYPE_CACHE_BY_TIMESTAMP = 'cacheByTimeStamp'; const DELETE_TYPE_CACHE_BY_RESOURCE = 'cacheByResource'; const DELETE_TYPE_SCHEDULES = 'schedules'; -const DELETE_TYPE_PROVIDER = 'provider'; const DELETE_TYPE_TOPIC = 'topic'; // Compression type const COMPRESSION_TYPE_NONE = 'none'; @@ -548,7 +548,7 @@ Database::addFilter( $database ->find('subscribers', [ Query::equal('topicInternalId', [$document->getInternalId()]), - Query::limit(1000000) + Query::limit(APP_LIMIT_SUBSCRIBERS_SUBQUERY) ]) )); if (\count($targetIds) > 0) { diff --git a/src/Appwrite/Platform/Workers/Deletes.php b/src/Appwrite/Platform/Workers/Deletes.php index 6f33679aca..a22f7840f7 100644 --- a/src/Appwrite/Platform/Workers/Deletes.php +++ b/src/Appwrite/Platform/Workers/Deletes.php @@ -150,9 +150,6 @@ class Deletes extends Action case DELETE_TYPE_SCHEDULES: $this->deleteSchedules($dbForConsole, $getProjectDB, $datetime); break; - case DELETE_TYPE_PROVIDER: - $this->deleteProvider($project, $getProjectDB, $document); - break; case DELETE_TYPE_TOPIC: $this->deleteTopic($project, $getProjectDB, $document); break; @@ -199,37 +196,6 @@ class Deletes extends Action ); } - /** - * @param Document $project - * @param callable $getProjectDB - * @param Document $provider - * @throws Exception - */ - protected function deleteProvider(Document $project, callable $getProjectDB, Document $provider) - { - if ($provider->isEmpty()) { - Console::error('Failed to delete topics, subscribers and messages. Provider not found'); - return; - } - - $dbForProject = $getProjectDB($project); - $topics = $dbForProject->find('topics', [Query::equal('providerInternalId', [$provider->getInternalId()]), Query::limit(APP_LIMIT_SUBQUERY)]); - - $this->deleteByGroup('topics', [ - Query::equal('providerInternalId', [$provider->getInternalId()]) - ], $dbForProject); - - foreach ($topics as $topic) { - $this->deleteByGroup('subscribers', [ - Query::equal('topicInternalId', [$topic->getInternalId()]) - ], $dbForProject); - } - - $this->deleteByGroup('messages', [ - Query::equal('providerInternalId', [$provider->getInternalId()]) - ], $dbForProject); - } - /** * @param Document $project * @param callable $getProjectDB