From a719c3f46b0a2ac5e07af0ca8446062ac292039a Mon Sep 17 00:00:00 2001 From: Prateek Banga Date: Tue, 31 Oct 2023 23:17:58 +0530 Subject: [PATCH 1/5] adds event label to create providers endpoint --- app/controllers/api/messaging.php | 65 ++++++++++++++++++++++++++----- 1 file changed, 56 insertions(+), 9 deletions(-) diff --git a/app/controllers/api/messaging.php b/app/controllers/api/messaging.php index 0147e472bb..abf97ce34d 100644 --- a/app/controllers/api/messaging.php +++ b/app/controllers/api/messaging.php @@ -1,6 +1,7 @@ groups(['api', 'messaging']) ->label('audits.event', 'provider.create') ->label('audits.resource', 'provider/{response.$id}') + ->label('event', 'providers.[provider].create') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -47,9 +49,10 @@ App::post('/v1/messaging/providers/mailgun') ->param('domain', '', new Text(0), 'Mailgun Domain.') ->param('isEuRegion', false, new Boolean(), 'Set as EU region.') ->param('enabled', true, new Boolean(), 'Set as enabled.', true) + ->inject('queueForEvents') ->inject('dbForProject') ->inject('response') - ->action(function (string $providerId, string $name, string $from, string $apiKey, string $domain, bool $isEuRegion, bool $enabled, Database $dbForProject, Response $response) { + ->action(function (string $providerId, string $name, string $from, string $apiKey, string $domain, bool $isEuRegion, bool $enabled, Event $queueForEvents, Database $dbForProject, Response $response) { $providerId = $providerId == 'unique()' ? ID::unique() : $providerId; $provider = new Document([ @@ -85,6 +88,9 @@ App::post('/v1/messaging/providers/mailgun') throw new Exception(Exception::PROVIDER_ALREADY_EXISTS); } + $queueForEvents + ->setParam('provider', 'mailgun'); + $response ->setStatusCode(Response::STATUS_CODE_CREATED) ->dynamic($provider, Response::MODEL_PROVIDER); @@ -95,6 +101,7 @@ App::post('/v1/messaging/providers/sendgrid') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.create') ->label('audits.resource', 'provider/{response.$id}') + ->label('event', 'providers.[provider].create') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -108,9 +115,10 @@ App::post('/v1/messaging/providers/sendgrid') ->param('from', '', new Text(256), 'Sender email address.') ->param('apiKey', '', new Text(0), 'Sendgrid API key.') ->param('enabled', true, new Boolean(), 'Set as enabled.', true) + ->inject('queueForEvents') ->inject('dbForProject') ->inject('response') - ->action(function (string $providerId, string $name, string $from, string $apiKey, bool $enabled, Database $dbForProject, Response $response) { + ->action(function (string $providerId, string $name, string $from, string $apiKey, bool $enabled, Event $queueForEvents, Database $dbForProject, Response $response) { $providerId = $providerId == 'unique()' ? ID::unique() : $providerId; $provider = new Document([ '$id' => $providerId, @@ -143,6 +151,9 @@ App::post('/v1/messaging/providers/sendgrid') throw new Exception(Exception::PROVIDER_ALREADY_EXISTS); } + $queueForEvents + ->setParam('provider', 'sendgrid'); + $response ->setStatusCode(Response::STATUS_CODE_CREATED) ->dynamic($provider, Response::MODEL_PROVIDER); @@ -154,6 +165,7 @@ App::post('/v1/messaging/providers/msg91') ->label('audits.event', 'provider.create') ->label('audits.resource', 'provider/{response.$id}') ->label('scope', 'providers.write') + ->label('event', 'providers.[provider].create') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') ->label('sdk.method', 'createMsg91Provider') @@ -167,9 +179,10 @@ App::post('/v1/messaging/providers/msg91') ->param('senderId', '', new Text(0), 'Msg91 Sender ID.') ->param('authKey', '', new Text(0), 'Msg91 Auth Key.') ->param('enabled', true, new Boolean(), 'Set as enabled.', true) + ->inject('queueForEvents') ->inject('dbForProject') ->inject('response') - ->action(function (string $providerId, string $name, string $from, string $senderId, string $authKey, bool $enabled, Database $dbForProject, Response $response) { + ->action(function (string $providerId, string $name, string $from, string $senderId, string $authKey, bool $enabled, Event $queueForEvents, Database $dbForProject, Response $response) { $providerId = $providerId == 'unique()' ? ID::unique() : $providerId; $provider = new Document([ '$id' => $providerId, @@ -203,6 +216,9 @@ App::post('/v1/messaging/providers/msg91') throw new Exception(Exception::PROVIDER_ALREADY_EXISTS); } + $queueForEvents + ->setParam('provider', 'msg91'); + $response ->setStatusCode(Response::STATUS_CODE_CREATED) ->dynamic($provider, Response::MODEL_PROVIDER); @@ -213,6 +229,7 @@ App::post('/v1/messaging/providers/telesign') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.create') ->label('audits.resource', 'provider/{response.$id}') + ->label('event', 'providers.[provider].create') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -227,9 +244,10 @@ App::post('/v1/messaging/providers/telesign') ->param('username', '', new Text(0), 'Telesign username.') ->param('password', '', new Text(0), 'Telesign password.') ->param('enabled', true, new Boolean(), 'Set as enabled.', true) + ->inject('queueForEvents') ->inject('dbForProject') ->inject('response') - ->action(function (string $providerId, string $name, string $from, string $username, string $password, bool $enabled, Database $dbForProject, Response $response) { + ->action(function (string $providerId, string $name, string $from, string $username, string $password, bool $enabled, Event $queueForEvents, Database $dbForProject, Response $response) { $providerId = $providerId == 'unique()' ? ID::unique() : $providerId; $provider = new Document([ '$id' => $providerId, @@ -263,6 +281,9 @@ App::post('/v1/messaging/providers/telesign') throw new Exception(Exception::PROVIDER_ALREADY_EXISTS); } + $queueForEvents + ->setParam('provider', 'telesign'); + $response ->setStatusCode(Response::STATUS_CODE_CREATED) ->dynamic($provider, Response::MODEL_PROVIDER); @@ -273,6 +294,8 @@ App::post('/v1/messaging/providers/textmagic') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.create') ->label('audits.resource', 'provider/{response.$id}') + ->inject('queueForEvents') + ->label('event', 'providers.[provider].create') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -287,9 +310,10 @@ App::post('/v1/messaging/providers/textmagic') ->param('username', '', new Text(0), 'Textmagic username.') ->param('apiKey', '', new Text(0), 'Textmagic apiKey.') ->param('enabled', true, new Boolean(), 'Set as enabled.', true) + ->inject('queueForEvents') ->inject('dbForProject') ->inject('response') - ->action(function (string $providerId, string $name, string $from, string $username, string $apiKey, bool $enabled, Database $dbForProject, Response $response) { + ->action(function (string $providerId, string $name, string $from, string $username, string $apiKey, bool $enabled, Event $queueForEvents Database $dbForProject, Response $response) { $providerId = $providerId == 'unique()' ? ID::unique() : $providerId; $provider = new Document([ '$id' => $providerId, @@ -323,6 +347,9 @@ App::post('/v1/messaging/providers/textmagic') throw new Exception(Exception::PROVIDER_ALREADY_EXISTS); } + $queueForEvents + ->setParam('provider', 'textmagic'); + $response ->setStatusCode(Response::STATUS_CODE_CREATED) ->dynamic($provider, Response::MODEL_PROVIDER); @@ -333,6 +360,7 @@ App::post('/v1/messaging/providers/twilio') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.create') ->label('audits.resource', 'provider/{response.$id}') + ->label('event', 'providers.[provider].create') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -347,9 +375,10 @@ App::post('/v1/messaging/providers/twilio') ->param('accountSid', '', new Text(0), 'Twilio account secret ID.') ->param('authToken', '', new Text(0), 'Twilio authentication token.') ->param('enabled', true, new Boolean(), 'Set as enabled.', true) + ->inject('queueForEvents') ->inject('dbForProject') ->inject('response') - ->action(function (string $providerId, string $name, string $from, string $accountSid, string $authToken, bool $enabled, Database $dbForProject, Response $response) { + ->action(function (string $providerId, string $name, string $from, string $accountSid, string $authToken, bool $enabled, Event $queueForEvents, Database $dbForProject, Response $response) { $providerId = $providerId == 'unique()' ? ID::unique() : $providerId; $provider = new Document([ '$id' => $providerId, @@ -383,6 +412,9 @@ App::post('/v1/messaging/providers/twilio') throw new Exception(Exception::PROVIDER_ALREADY_EXISTS); } + $queueForEvents + ->setParam('provider', 'twilio'); + $response ->setStatusCode(Response::STATUS_CODE_CREATED) ->dynamic($provider, Response::MODEL_PROVIDER); @@ -393,6 +425,7 @@ App::post('/v1/messaging/providers/vonage') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.create') ->label('audits.resource', 'provider/{response.$id}') + ->label('event', 'providers.[provider].create') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -407,9 +440,10 @@ App::post('/v1/messaging/providers/vonage') ->param('apiKey', '', new Text(0), 'Vonage API key.') ->param('apiSecret', '', new Text(0), 'Vonage API secret.') ->param('enabled', true, new Boolean(), 'Set as enabled.', true) + ->inject('queueForEvents') ->inject('dbForProject') ->inject('response') - ->action(function (string $providerId, string $name, string $from, string $apiKey, string $apiSecret, bool $enabled, Database $dbForProject, Response $response) { + ->action(function (string $providerId, string $name, string $from, string $apiKey, string $apiSecret, bool $enabled, Event $queueForEvents, Database $dbForProject, Response $response) { $providerId = $providerId == 'unique()' ? ID::unique() : $providerId; $provider = new Document([ '$id' => $providerId, @@ -443,6 +477,9 @@ App::post('/v1/messaging/providers/vonage') throw new Exception(Exception::PROVIDER_ALREADY_EXISTS); } + $queueForEvents + ->setParam('provider', 'vonage'); + $response ->setStatusCode(Response::STATUS_CODE_CREATED) ->dynamic($provider, Response::MODEL_PROVIDER); @@ -453,6 +490,7 @@ App::post('/v1/messaging/providers/fcm') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.create') ->label('audits.resource', 'provider/{response.$id}') + ->label('event', 'providers.[provider].create') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -465,9 +503,10 @@ App::post('/v1/messaging/providers/fcm') ->param('name', '', new Text(128), 'Provider name.') ->param('enabled', true, new Boolean(), 'Set as enabled.', true) ->param('serverKey', '', new Text(0), 'FCM server key.') + ->inject('queueForEvents') ->inject('dbForProject') ->inject('response') - ->action(function (string $providerId, string $name, bool $enabled, string $serverKey, Database $dbForProject, Response $response) { + ->action(function (string $providerId, string $name, bool $enabled, string $serverKey, Event $queueForEvents, Database $dbForProject, Response $response) { $providerId = $providerId == 'unique()' ? ID::unique() : $providerId; $provider = new Document([ '$id' => $providerId, @@ -497,6 +536,9 @@ App::post('/v1/messaging/providers/fcm') throw new Exception(Exception::PROVIDER_ALREADY_EXISTS); } + $queueForEvents + ->setParam('provider', 'fcm'); + $response ->setStatusCode(Response::STATUS_CODE_CREATED) ->dynamic($provider, Response::MODEL_PROVIDER); @@ -507,6 +549,7 @@ App::post('/v1/messaging/providers/apns') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.create') ->label('audits.resource', 'provider/{response.$id}') + ->label('event', 'providers.[provider].create') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -523,9 +566,10 @@ App::post('/v1/messaging/providers/apns') ->param('teamId', '', new Text(0), 'APNS team ID.') ->param('bundleId', '', new Text(0), 'APNS bundle ID.') ->param('endpoint', '', new Text(0), 'APNS endpoint.') + ->inject('queueForEvents') ->inject('dbForProject') ->inject('response') - ->action(function (string $providerId, string $name, bool $enabled, string $authKey, string $authKeyId, string $teamId, string $bundleId, string $endpoint, Database $dbForProject, Response $response) { + ->action(function (string $providerId, string $name, bool $enabled, string $authKey, string $authKeyId, string $teamId, string $bundleId, string $endpoint, Event $queueForEvents, Database $dbForProject, Response $response) { $providerId = $providerId == 'unique()' ? ID::unique() : $providerId; $provider = new Document([ '$id' => $providerId, @@ -559,6 +603,9 @@ App::post('/v1/messaging/providers/apns') throw new Exception(Exception::PROVIDER_ALREADY_EXISTS); } + $queueForEvents + ->setParam('provider', 'apns'); + $response ->setStatusCode(Response::STATUS_CODE_CREATED) ->dynamic($provider, Response::MODEL_PROVIDER); From f7529140bd648f157adb278f8d7003dcedef4aae Mon Sep 17 00:00:00 2001 From: prateek banga Date: Tue, 31 Oct 2023 23:53:46 +0530 Subject: [PATCH 2/5] adds event label to remaining messaging api --- app/controllers/api/messaging.php | 191 +++++++++++++++++++++++------- app/controllers/api/users.php | 26 +++- 2 files changed, 171 insertions(+), 46 deletions(-) diff --git a/app/controllers/api/messaging.php b/app/controllers/api/messaging.php index abf97ce34d..46675dc5f0 100644 --- a/app/controllers/api/messaging.php +++ b/app/controllers/api/messaging.php @@ -33,7 +33,7 @@ App::post('/v1/messaging/providers/mailgun') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.create') ->label('audits.resource', 'provider/{response.$id}') - ->label('event', 'providers.[provider].create') + ->label('event', 'providers.[providerId].create') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -89,7 +89,7 @@ App::post('/v1/messaging/providers/mailgun') } $queueForEvents - ->setParam('provider', 'mailgun'); + ->setParam('providerId', $provider->getId()); $response ->setStatusCode(Response::STATUS_CODE_CREATED) @@ -101,7 +101,7 @@ App::post('/v1/messaging/providers/sendgrid') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.create') ->label('audits.resource', 'provider/{response.$id}') - ->label('event', 'providers.[provider].create') + ->label('event', 'providers.[providerId].create') ->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/sendgrid') } $queueForEvents - ->setParam('provider', 'sendgrid'); + ->setParam('providerId', $provider->getId()); $response ->setStatusCode(Response::STATUS_CODE_CREATED) @@ -165,7 +165,7 @@ App::post('/v1/messaging/providers/msg91') ->label('audits.event', 'provider.create') ->label('audits.resource', 'provider/{response.$id}') ->label('scope', 'providers.write') - ->label('event', 'providers.[provider].create') + ->label('event', 'providers.[providerId].create') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') ->label('sdk.method', 'createMsg91Provider') @@ -217,7 +217,7 @@ App::post('/v1/messaging/providers/msg91') } $queueForEvents - ->setParam('provider', 'msg91'); + ->setParam('providerId', $provider->getId()); $response ->setStatusCode(Response::STATUS_CODE_CREATED) @@ -229,7 +229,7 @@ App::post('/v1/messaging/providers/telesign') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.create') ->label('audits.resource', 'provider/{response.$id}') - ->label('event', 'providers.[provider].create') + ->label('event', 'providers.[providerId].create') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -282,7 +282,7 @@ App::post('/v1/messaging/providers/telesign') } $queueForEvents - ->setParam('provider', 'telesign'); + ->setParam('providerId', $provider->getId()); $response ->setStatusCode(Response::STATUS_CODE_CREATED) @@ -295,7 +295,7 @@ App::post('/v1/messaging/providers/textmagic') ->label('audits.event', 'provider.create') ->label('audits.resource', 'provider/{response.$id}') ->inject('queueForEvents') - ->label('event', 'providers.[provider].create') + ->label('event', 'providers.[providerId].create') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -313,7 +313,7 @@ App::post('/v1/messaging/providers/textmagic') ->inject('queueForEvents') ->inject('dbForProject') ->inject('response') - ->action(function (string $providerId, string $name, string $from, string $username, string $apiKey, bool $enabled, Event $queueForEvents Database $dbForProject, Response $response) { + ->action(function (string $providerId, string $name, string $from, string $username, string $apiKey, bool $enabled, Event $queueForEvents, Database $dbForProject, Response $response) { $providerId = $providerId == 'unique()' ? ID::unique() : $providerId; $provider = new Document([ '$id' => $providerId, @@ -348,7 +348,7 @@ App::post('/v1/messaging/providers/textmagic') } $queueForEvents - ->setParam('provider', 'textmagic'); + ->setParam('providerId', $provider->getId()); $response ->setStatusCode(Response::STATUS_CODE_CREATED) @@ -360,7 +360,7 @@ App::post('/v1/messaging/providers/twilio') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.create') ->label('audits.resource', 'provider/{response.$id}') - ->label('event', 'providers.[provider].create') + ->label('event', 'providers.[providerId].create') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -413,7 +413,7 @@ App::post('/v1/messaging/providers/twilio') } $queueForEvents - ->setParam('provider', 'twilio'); + ->setParam('providerId', $provider->getId()); $response ->setStatusCode(Response::STATUS_CODE_CREATED) @@ -425,7 +425,7 @@ App::post('/v1/messaging/providers/vonage') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.create') ->label('audits.resource', 'provider/{response.$id}') - ->label('event', 'providers.[provider].create') + ->label('event', 'providers.[providerId].create') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -478,7 +478,7 @@ App::post('/v1/messaging/providers/vonage') } $queueForEvents - ->setParam('provider', 'vonage'); + ->setParam('providerId', $provider->getId()); $response ->setStatusCode(Response::STATUS_CODE_CREATED) @@ -490,7 +490,7 @@ App::post('/v1/messaging/providers/fcm') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.create') ->label('audits.resource', 'provider/{response.$id}') - ->label('event', 'providers.[provider].create') + ->label('event', 'providers.[providerId].create') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -537,7 +537,7 @@ App::post('/v1/messaging/providers/fcm') } $queueForEvents - ->setParam('provider', 'fcm'); + ->setParam('providerId', $provider->getId()); $response ->setStatusCode(Response::STATUS_CODE_CREATED) @@ -549,7 +549,7 @@ App::post('/v1/messaging/providers/apns') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.create') ->label('audits.resource', 'provider/{response.$id}') - ->label('event', 'providers.[provider].create') + ->label('event', 'providers.[providerId].create') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -604,7 +604,7 @@ App::post('/v1/messaging/providers/apns') } $queueForEvents - ->setParam('provider', 'apns'); + ->setParam('providerId', $provider->getId()); $response ->setStatusCode(Response::STATUS_CODE_CREATED) @@ -683,6 +683,7 @@ App::patch('/v1/messaging/providers/mailgun/:providerId') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.update') ->label('audits.resource', 'provider/{response.$id}') + ->label('event', 'providers.[providerId].update') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -699,9 +700,10 @@ App::patch('/v1/messaging/providers/mailgun/:providerId') ->param('from', '', new Text(256), 'Sender email address.', true) ->param('apiKey', '', new Text(0), 'Mailgun API Key.', true) ->param('domain', '', new Text(0), 'Mailgun Domain.', true) + ->inject('queueForEvents') ->inject('dbForProject') ->inject('response') - ->action(function (string $providerId, string $name, ?bool $enabled, ?bool $internal, ?bool $isEuRegion, string $from, string $apiKey, string $domain, Database $dbForProject, Response $response) { + ->action(function (string $providerId, string $name, ?bool $enabled, ?bool $internal, ?bool $isEuRegion, string $from, string $apiKey, string $domain, Event $queueForEvents, Database $dbForProject, Response $response) { $provider = $dbForProject->getDocument('providers', $providerId); if ($provider->isEmpty()) { @@ -759,6 +761,9 @@ App::patch('/v1/messaging/providers/mailgun/:providerId') $dbForProject->updateDocument('providers', $internalProvider->getId(), $internalProvider); } + $queueForEvents + ->setParam('providerId', $provider->getId()); + $response ->dynamic($provider, Response::MODEL_PROVIDER); }); @@ -768,6 +773,7 @@ App::patch('/v1/messaging/providers/sendgrid/:providerId') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.update') ->label('audits.resource', 'provider/{response.$id}') + ->label('event', 'providers.[providerId].update') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -782,9 +788,10 @@ App::patch('/v1/messaging/providers/sendgrid/:providerId') ->param('internal', null, new Boolean(), 'Set as internal. Internal providers are used in services other than Messaging service such as Authentication service', true) ->param('apiKey', '', new Text(0), 'Sendgrid API key.', true) ->param('from', '', new Text(256), 'Sender email address.', true) + ->inject('queueForEvents') ->inject('dbForProject') ->inject('response') - ->action(function (string $providerId, string $name, ?bool $enabled, ?bool $internal, string $apiKey, string $from, Database $dbForProject, Response $response) { + ->action(function (string $providerId, string $name, ?bool $enabled, ?bool $internal, string $apiKey, string $from, Event $queueForEvents, Database $dbForProject, Response $response) { $provider = $dbForProject->getDocument('providers', $providerId); if ($provider->isEmpty()) { @@ -832,6 +839,9 @@ App::patch('/v1/messaging/providers/sendgrid/:providerId') $dbForProject->updateDocument('providers', $internalProvider->getId(), $internalProvider); } + $queueForEvents + ->setParam('providerId', $provider->getId()); + $response ->dynamic($provider, Response::MODEL_PROVIDER); }); @@ -841,6 +851,7 @@ App::patch('/v1/messaging/providers/msg91/:providerId') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.update') ->label('audits.resource', 'provider/{response.$id}') + ->label('event', 'providers.[provider].update') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -856,9 +867,10 @@ App::patch('/v1/messaging/providers/msg91/:providerId') ->param('senderId', '', new Text(0), 'Msg91 Sender ID.', true) ->param('authKey', '', new Text(0), 'Msg91 Auth Key.', true) ->param('from', '', new Text(256), 'Sender number.', true) + ->inject('queueForEvents') ->inject('dbForProject') ->inject('response') - ->action(function (string $providerId, string $name, ?bool $enabled, ?bool $internal, string $senderId, string $authKey, string $from, Database $dbForProject, Response $response) { + ->action(function (string $providerId, string $name, ?bool $enabled, ?bool $internal, string $senderId, string $authKey, string $from, Event $queueForEvents, Database $dbForProject, Response $response) { $provider = $dbForProject->getDocument('providers', $providerId); if ($provider->isEmpty()) { @@ -912,6 +924,9 @@ App::patch('/v1/messaging/providers/msg91/:providerId') $dbForProject->updateDocument('providers', $internalProvider->getId(), $internalProvider); } + $queueForEvents + ->setParam('providerId', $provider->getId()); + $response ->dynamic($provider, Response::MODEL_PROVIDER); }); @@ -921,6 +936,7 @@ App::patch('/v1/messaging/providers/telesign/:providerId') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.update') ->label('audits.resource', 'provider/{response.$id}') + ->label('event', 'providers.[providerId].update') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -936,9 +952,10 @@ App::patch('/v1/messaging/providers/telesign/:providerId') ->param('username', '', new Text(0), 'Telesign username.', true) ->param('password', '', new Text(0), 'Telesign password.', true) ->param('from', '', new Text(256), 'Sender number.', true) + ->inject('queueForEvents') ->inject('dbForProject') ->inject('response') - ->action(function (string $providerId, string $name, ?bool $enabled, ?bool $internal, string $username, string $password, string $from, Database $dbForProject, Response $response) { + ->action(function (string $providerId, string $name, ?bool $enabled, ?bool $internal, string $username, string $password, string $from, Event $queueForEvents, Database $dbForProject, Response $response) { $provider = $dbForProject->getDocument('providers', $providerId); if ($provider->isEmpty()) { @@ -992,6 +1009,9 @@ App::patch('/v1/messaging/providers/telesign/:providerId') $dbForProject->updateDocument('providers', $internalProvider->getId(), $internalProvider); } + $queueForEvents + ->setParam('providerId', $provider->getId()); + $response ->dynamic($provider, Response::MODEL_PROVIDER); }); @@ -1001,6 +1021,7 @@ App::patch('/v1/messaging/providers/textmagic/:providerId') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.update') ->label('audits.resource', 'provider/{response.$id}') + ->label('event', 'providers.[providerId].update') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -1016,9 +1037,10 @@ App::patch('/v1/messaging/providers/textmagic/:providerId') ->param('username', '', new Text(0), 'Textmagic username.', true) ->param('apiKey', '', new Text(0), 'Textmagic apiKey.', true) ->param('from', '', new Text(256), 'Sender number.', true) + ->inject('queueForEvents') ->inject('dbForProject') ->inject('response') - ->action(function (string $providerId, string $name, ?bool $enabled, ?bool $internal, string $username, string $apiKey, string $from, Database $dbForProject, Response $response) { + ->action(function (string $providerId, string $name, ?bool $enabled, ?bool $internal, string $username, string $apiKey, string $from, Event $queueForEvents, Database $dbForProject, Response $response) { $provider = $dbForProject->getDocument('providers', $providerId); if ($provider->isEmpty()) { @@ -1072,6 +1094,9 @@ App::patch('/v1/messaging/providers/textmagic/:providerId') $dbForProject->updateDocument('providers', $internalProvider->getId(), $internalProvider); } + $queueForEvents + ->setParam('providerId', $provider->getId()); + $response ->dynamic($provider, Response::MODEL_PROVIDER); }); @@ -1081,6 +1106,7 @@ App::patch('/v1/messaging/providers/twilio/:providerId') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.update') ->label('audits.resource', 'provider/{response.$id}') + ->label('event', 'providers.[providerId].update') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -1096,9 +1122,10 @@ App::patch('/v1/messaging/providers/twilio/:providerId') ->param('accountSid', null, new Text(0), 'Twilio account secret ID.', true) ->param('authToken', null, new Text(0), 'Twilio authentication token.', true) ->param('from', '', new Text(256), 'Sender number.', true) + ->inject('queueForEvents') ->inject('dbForProject') ->inject('response') - ->action(function (string $providerId, string $name, ?bool $enabled, ?bool $internal, string $accountSid, string $authToken, string $from, Database $dbForProject, Response $response) { + ->action(function (string $providerId, string $name, ?bool $enabled, ?bool $internal, string $accountSid, string $authToken, string $from, Event $queueForEvents, Database $dbForProject, Response $response) { $provider = $dbForProject->getDocument('providers', $providerId); if ($provider->isEmpty()) { @@ -1152,6 +1179,9 @@ App::patch('/v1/messaging/providers/twilio/:providerId') $dbForProject->updateDocument('providers', $internalProvider->getId(), $internalProvider); } + $queueForEvents + ->setParam('providerId', $provider->getId()); + $response ->dynamic($provider, Response::MODEL_PROVIDER); }); @@ -1161,6 +1191,7 @@ App::patch('/v1/messaging/providers/vonage/:providerId') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.update') ->label('audits.resource', 'provider/{response.$id}') + ->label('event', 'providers.[providerId].update') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -1176,9 +1207,10 @@ App::patch('/v1/messaging/providers/vonage/:providerId') ->param('apiKey', '', new Text(0), 'Vonage API key.', true) ->param('apiSecret', '', new Text(0), 'Vonage API secret.', true) ->param('from', '', new Text(256), 'Sender number.', true) + ->inject('queueForEvents') ->inject('dbForProject') ->inject('response') - ->action(function (string $providerId, string $name, ?bool $enabled, ?bool $internal, string $apiKey, string $apiSecret, string $from, Database $dbForProject, Response $response) { + ->action(function (string $providerId, string $name, ?bool $enabled, ?bool $internal, string $apiKey, string $apiSecret, string $from, Event $queueForEvents, Database $dbForProject, Response $response) { $provider = $dbForProject->getDocument('providers', $providerId); if ($provider->isEmpty()) { @@ -1232,6 +1264,9 @@ App::patch('/v1/messaging/providers/vonage/:providerId') $dbForProject->updateDocument('providers', $internalProvider->getId(), $internalProvider); } + $queueForEvents + ->setParam('providerId', $provider->getId()); + $response ->dynamic($provider, Response::MODEL_PROVIDER); }); @@ -1241,6 +1276,7 @@ App::patch('/v1/messaging/providers/fcm/:providerId') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.update') ->label('audits.resource', 'provider/{response.$id}') + ->label('event', 'providers.[providerId].update') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -1254,9 +1290,10 @@ App::patch('/v1/messaging/providers/fcm/:providerId') ->param('enabled', null, new Boolean(), 'Set as enabled.', true) ->param('internal', null, new Boolean(), 'Set as internal. Internal providers are used in services other than Messaging service such as Authentication service', true) ->param('serverKey', '', new Text(0), 'FCM Server Key.', true) + ->inject('queueForEvents') ->inject('dbForProject') ->inject('response') - ->action(function (string $providerId, string $name, ?bool $enabled, ?bool $internal, string $serverKey, Database $dbForProject, Response $response) { + ->action(function (string $providerId, string $name, ?bool $enabled, ?bool $internal, string $serverKey, Event $queueForEvents, Database $dbForProject, Response $response) { $provider = $dbForProject->getDocument('providers', $providerId); if ($provider->isEmpty()) { @@ -1296,6 +1333,9 @@ App::patch('/v1/messaging/providers/fcm/:providerId') $dbForProject->updateDocument('providers', $internalProvider->getId(), $internalProvider); } + $queueForEvents + ->setParam('providerId', $provider->getId()); + $response ->dynamic($provider, Response::MODEL_PROVIDER); }); @@ -1306,6 +1346,7 @@ App::patch('/v1/messaging/providers/apns/:providerId') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.update') ->label('audits.resource', 'provider/{response.$id}') + ->label('event', 'providers.[providerId].update') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -1323,9 +1364,10 @@ App::patch('/v1/messaging/providers/apns/:providerId') ->param('teamId', '', new Text(0), 'APNS team ID.', true) ->param('bundleId', '', new Text(0), 'APNS bundle ID.', true) ->param('endpoint', '', new Text(0), 'APNS endpoint.', true) + ->inject('queueForEvents') ->inject('dbForProject') ->inject('response') - ->action(function (string $providerId, string $name, ?bool $enabled, ?bool $internal, string $authKey, string $authKeyId, string $teamId, string $bundleId, string $endpoint, Database $dbForProject, Response $response) { + ->action(function (string $providerId, string $name, ?bool $enabled, ?bool $internal, string $authKey, string $authKeyId, string $teamId, string $bundleId, string $endpoint, Event $queueForEvents, Database $dbForProject, Response $response) { $provider = $dbForProject->getDocument('providers', $providerId); if ($provider->isEmpty()) { @@ -1385,6 +1427,9 @@ App::patch('/v1/messaging/providers/apns/:providerId') $dbForProject->updateDocument('providers', $internalProvider->getId(), $internalProvider); } + $queueForEvents + ->setParam('providerId', $provider->getId()); + $response ->dynamic($provider, Response::MODEL_PROVIDER); }); @@ -1394,6 +1439,7 @@ App::delete('/v1/messaging/providers/:providerId') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.delete') ->label('audits.resource', 'provider/{request.id}') + ->label('event', 'providers.[providerId].delete') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -1403,9 +1449,10 @@ 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('queueForEvents') ->inject('dbForProject') ->inject('response') - ->action(function (string $providerId, Database $dbForProject, Response $response) { + ->action(function (string $providerId, Event $queueForEvents, Database $dbForProject, Response $response) { $provider = $dbForProject->getDocument('providers', $providerId); if ($provider->isEmpty()) { @@ -1414,6 +1461,9 @@ App::delete('/v1/messaging/providers/:providerId') $dbForProject->deleteDocument('providers', $provider->getId()); + $queueForEvents + ->setParam('providerId', $provider->getId()); + $response ->setStatusCode(Response::STATUS_CODE_NOCONTENT) ->noContent(); @@ -1422,8 +1472,9 @@ App::delete('/v1/messaging/providers/:providerId') App::post('/v1/messaging/topics') ->desc('Create a topic.') ->groups(['api', 'messaging']) - ->label('audits.event', 'topic.create') + ->label('audits.event', 'topic.[topicId].create') ->label('audits.resource', 'topic/{response.$id}') + ->label('event', 'topics.create') ->label('scope', 'topics.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -1435,9 +1486,10 @@ App::post('/v1/messaging/topics') ->param('topicId', '', new CustomId(), 'Topic ID. Choose a custom Topic ID or a new Topic ID.') ->param('name', '', new Text(128), 'Topic Name.') ->param('description', '', new Text(2048), 'Topic Description.', true) + ->inject('queueForEvents') ->inject('dbForProject') ->inject('response') - ->action(function (string $topicId, string $name, string $description, Database $dbForProject, Response $response) { + ->action(function (string $topicId, string $name, string $description, Event $queueForEvents, Database $dbForProject, Response $response) { $topicId = $topicId == 'unique()' ? ID::unique() : $topicId; $topic = new Document([ @@ -1458,6 +1510,9 @@ App::post('/v1/messaging/topics') throw new Exception(Exception::TOPIC_ALREADY_EXISTS); } + $queueForEvents + ->setParam('topicId', $topic->getId()); + $response ->setStatusCode(Response::STATUS_CODE_CREATED) ->dynamic($topic, Response::MODEL_TOPIC); @@ -1538,6 +1593,7 @@ App::patch('/v1/messaging/topics/:topicId') ->groups(['api', 'messaging']) ->label('audits.event', 'topic.update') ->label('audits.resource', 'topic/{response.$id}') + ->label('event', 'topics.[topicId].update') ->label('scope', 'topics.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -1549,9 +1605,10 @@ App::patch('/v1/messaging/topics/:topicId') ->param('topicId', '', new UID(), 'Topic ID.') ->param('name', '', new Text(128), 'Topic Name.', true) ->param('description', '', new Text(2048), 'Topic Description.', true) + ->inject('queueForEvents') ->inject('dbForProject') ->inject('response') - ->action(function (string $topicId, string $name, string $description, Database $dbForProject, Response $response) { + ->action(function (string $topicId, string $name, string $description, Event $queueForEvents, Database $dbForProject, Response $response) { $topic = $dbForProject->getDocument('topics', $topicId); if ($topic->isEmpty()) { @@ -1578,6 +1635,9 @@ App::patch('/v1/messaging/topics/:topicId') $topic = $dbForProject->updateDocument('topics', $topicId, $topic); + $queueForEvents + ->setParam('topicId', $topic->getId()); + $response ->dynamic($topic, Response::MODEL_TOPIC); }); @@ -1587,6 +1647,7 @@ App::delete('/v1/messaging/topics/:topicId') ->groups(['api', 'messaging']) ->label('audits.event', 'topic.delete') ->label('audits.resource', 'topic/{request.topicId}') + ->label('event', 'topics.[topicId].delete') ->label('scope', 'topics.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -1596,10 +1657,11 @@ App::delete('/v1/messaging/topics/:topicId') ->label('sdk.response.type', Response::CONTENT_TYPE_JSON) ->label('sdk.response.model', Response::MODEL_NONE) ->param('topicId', '', new UID(), 'Topic ID.') + ->inject('queueForEvents') ->inject('dbForProject') ->inject('queueForDeletes') ->inject('response') - ->action(function (string $topicId, Database $dbForProject, Delete $queueForDeletes, Response $response) { + ->action(function (string $topicId, Event $queueForEvents, Database $dbForProject, Delete $queueForDeletes, Response $response) { $topic = $dbForProject->getDocument('topics', $topicId); if ($topic->isEmpty()) { @@ -1612,6 +1674,9 @@ App::delete('/v1/messaging/topics/:topicId') ->setType(DELETE_TYPE_TOPIC) ->setDocument($topic); + $queueForEvents + ->setParam('topicId', $topic->getId()); + $response ->setStatusCode(Response::STATUS_CODE_NOCONTENT) ->noContent(); @@ -1622,6 +1687,7 @@ App::post('/v1/messaging/topics/:topicId/subscribers') ->groups(['api', 'messaging']) ->label('audits.event', 'subscriber.create') ->label('audits.resource', 'subscriber/{response.$id}') + ->label('event', 'topics.[topicId].subscribers.[subscriberId].create') ->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') @@ -1633,9 +1699,10 @@ App::post('/v1/messaging/topics/:topicId/subscribers') ->param('subscriberId', '', new CustomId(), 'Subscriber ID. Choose a custom Topic ID or a new Topic ID.') ->param('topicId', '', new UID(), 'Topic ID.') ->param('targetId', '', new UID(), 'Target ID.') + ->inject('queueForEvents') ->inject('dbForProject') ->inject('response') - ->action(function (string $subscriberId, string $topicId, string $targetId, Database $dbForProject, Response $response) { + ->action(function (string $subscriberId, string $topicId, string $targetId, Event $queueForEvents, Database $dbForProject, Response $response) { $subscriberId = $subscriberId == 'unique()' ? ID::unique() : $subscriberId; $topic = Authorization::skip(fn () => $dbForProject->getDocument('topics', $topicId)); @@ -1669,6 +1736,10 @@ App::post('/v1/messaging/topics/:topicId/subscribers') throw new Exception(Exception::SUBSCRIBER_ALREADY_EXISTS); } + $queueForEvents + ->setParam('topicId', $topic->getId()) + ->setParam('subscriberId', $subscriber->getId()); + $response ->setStatusCode(Response::STATUS_CODE_CREATED) ->dynamic($subscriber, Response::MODEL_SUBSCRIBER); @@ -1759,6 +1830,7 @@ App::delete('/v1/messaging/topics/:topicId/subscriber/:subscriberId') ->groups(['api', 'messaging']) ->label('audits.event', 'subscriber.delete') ->label('audits.resource', 'subscriber/{request.subscriberId}') + ->label('event', 'topics.[topicId].subscribers.[subscriberId].delete') ->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') @@ -1769,9 +1841,10 @@ App::delete('/v1/messaging/topics/:topicId/subscriber/:subscriberId') ->label('sdk.response.model', Response::MODEL_NONE) ->param('topicId', '', new UID(), 'Topic ID.') ->param('subscriberId', '', new UID(), 'Subscriber ID.') + ->inject('queueForEvents') ->inject('dbForProject') ->inject('response') - ->action(function (string $topicId, string $subscriberId, Database $dbForProject, Response $response) { + ->action(function (string $topicId, string $subscriberId, Event $queueForEvents, Database $dbForProject, Response $response) { $topic = Authorization::skip(fn () => $dbForProject->getDocument('topics', $topicId)); if ($topic->isEmpty()) { @@ -1784,9 +1857,13 @@ App::delete('/v1/messaging/topics/:topicId/subscriber/:subscriberId') throw new Exception(Exception::SUBSCRIBER_NOT_FOUND); } - $subscriber = $dbForProject->deleteDocument('subscribers', $subscriberId); + $dbForProject->deleteDocument('subscribers', $subscriberId); Authorization::skip(fn () => $dbForProject->decreaseDocumentAttribute('topics', $topicId, 'total', 1)); + $queueForEvents + ->setParam('topicId', $topic->getId()) + ->setParam('subscriberId', $subscriber->getId()); + $response ->setStatusCode(Response::STATUS_CODE_NOCONTENT) ->noContent(); @@ -1797,6 +1874,7 @@ App::post('/v1/messaging/messages/email') ->groups(['api', 'messaging']) ->label('audits.event', 'message.create') ->label('audits.resource', 'message/{response.$id}') + ->label('event', 'messages.[messageId].create') ->label('scope', 'messages.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -1815,11 +1893,12 @@ App::post('/v1/messaging/messages/email') ->param('status', 'processing', new WhiteList(['draft', 'processing']), 'Message Status. Value must be either draft or processing.', true) ->param('html', false, new Boolean(), 'Is content of type HTML', true) ->param('deliveryTime', null, new DatetimeValidator(requireDateInFuture: true), 'Delivery time for message in ISO 8601 format. DateTime value must be in future.', true) + ->inject('queueForEvents') ->inject('dbForProject') ->inject('project') ->inject('queueForMessaging') ->inject('response') - ->action(function (string $messageId, string $subject, string $content, array $topics, array $users, array $targets, string $description, string $status, bool $html, ?string $deliveryTime, Database $dbForProject, Document $project, Messaging $queueForMessaging, Response $response) { + ->action(function (string $messageId, string $subject, string $content, array $topics, array $users, array $targets, string $description, string $status, bool $html, ?string $deliveryTime, Event $queueForEvents, Database $dbForProject, Document $project, Messaging $queueForMessaging, Response $response) { $messageId = $messageId == 'unique()' ? ID::unique() : $messageId; if (\count($topics) === 0 && \count($users) === 0 && \count($targets) === 0) { @@ -1848,6 +1927,9 @@ App::post('/v1/messaging/messages/email') ->trigger(); } + $queueForEvents + ->setParam('messageId', $message->getId()); + $response ->setStatusCode(Response::STATUS_CODE_CREATED) ->dynamic($message, Response::MODEL_MESSAGE); @@ -1858,6 +1940,7 @@ App::post('/v1/messaging/messages/sms') ->groups(['api', 'messaging']) ->label('audits.event', 'message.create') ->label('audits.resource', 'message/{response.$id}') + ->label('event', 'messages.[messageId].create') ->label('scope', 'messages.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -1874,11 +1957,12 @@ App::post('/v1/messaging/messages/sms') ->param('description', '', new Text(256), 'Description for Message.', true) ->param('status', 'processing', new WhiteList(['draft', 'processing']), 'Message Status. Value must be either draft or processing.', true) ->param('deliveryTime', null, new DatetimeValidator(requireDateInFuture: true), 'Delivery time for message in ISO 8601 format. DateTime value must be in future.', true) + ->inject('queueForEvents') ->inject('dbForProject') ->inject('project') ->inject('queueForMessaging') ->inject('response') - ->action(function (string $messageId, string $content, array $topics, array $users, array $targets, string $description, string $status, ?string $deliveryTime, Database $dbForProject, Document $project, Messaging $queueForMessaging, Response $response) { + ->action(function (string $messageId, string $content, array $topics, array $users, array $targets, string $description, string $status, ?string $deliveryTime, Event $queueForEvents, Database $dbForProject, Document $project, Messaging $queueForMessaging, Response $response) { $messageId = $messageId == 'unique()' ? ID::unique() : $messageId; if (\count($topics) === 0 && \count($users) === 0 && \count($targets) === 0) { @@ -1905,6 +1989,9 @@ App::post('/v1/messaging/messages/sms') ->trigger(); } + $queueForEvents + ->setParam('messageId', $message->getId()); + $response ->setStatusCode(Response::STATUS_CODE_CREATED) ->dynamic($message, Response::MODEL_MESSAGE); @@ -1915,6 +2002,7 @@ App::post('/v1/messaging/messages/push') ->groups(['api', 'messaging']) ->label('audits.event', 'message.create') ->label('audits.resource', 'message/{response.$id}') + ->label('event', 'messages.[messageId].create') ->label('scope', 'messages.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -1939,11 +2027,12 @@ App::post('/v1/messaging/messages/push') ->param('badge', '', new Text(256), 'Badge for push notification. Available only for IOS Platform.', true) ->param('status', 'processing', new WhiteList(['draft', 'processing']), 'Message Status. Value must be either draft or processing.', true) ->param('deliveryTime', null, new DatetimeValidator(requireDateInFuture: true), 'Delivery time for message in ISO 8601 format. DateTime value must be in future.', true) + ->inject('queueForEvents') ->inject('dbForProject') ->inject('project') ->inject('queueForMessaging') ->inject('response') - ->action(function (string $messageId, string $title, string $body, array $topics, array $users, array $targets, string $description, ?array $data, string $action, string $icon, string $sound, string $color, string $tag, string $badge, string $status, ?string $deliveryTime, Database $dbForProject, Document $project, Messaging $queueForMessaging, Response $response) { + ->action(function (string $messageId, string $title, string $body, array $topics, array $users, array $targets, string $description, ?array $data, string $action, string $icon, string $sound, string $color, string $tag, string $badge, string $status, ?string $deliveryTime, Event $queueForEvents, Database $dbForProject, Document $project, Messaging $queueForMessaging, Response $response) { $messageId = $messageId == 'unique()' ? ID::unique() : $messageId; if (\count($topics) === 0 && \count($users) === 0 && \count($targets) === 0) { @@ -2002,6 +2091,9 @@ App::post('/v1/messaging/messages/push') ->trigger(); } + $queueForEvents + ->setParam('messageId', $message->getId()); + $response ->setStatusCode(Response::STATUS_CODE_CREATED) ->dynamic($message, Response::MODEL_MESSAGE); @@ -2079,6 +2171,7 @@ App::patch('/v1/messaging/messages/email/:messageId') ->groups(['api', 'messaging']) ->label('audits.event', 'message.update') ->label('audits.resource', 'message/{response.$id}') + ->label('event', 'messages.[messageId].update') ->label('scope', 'messages.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -2097,11 +2190,12 @@ App::patch('/v1/messaging/messages/email/:messageId') ->param('status', '', new WhiteList(['draft', 'processing']), 'Message Status. Value must be either draft or processing.', true) ->param('html', false, new Boolean(), 'Is content of type HTML', true) ->param('deliveryTime', null, new DatetimeValidator(requireDateInFuture: true), 'Delivery time for message in ISO 8601 format. DateTime value must be in future.', true) + ->inject('queueForEvents') ->inject('dbForProject') ->inject('project') ->inject('queueForMessaging') ->inject('response') - ->action(function (string $messageId, array $topics, array $users, array $targets, string $subject, string $description, string $content, string $status, bool $html, ?string $deliveryTime, Database $dbForProject, Document $project, Messaging $queueForMessaging, Response $response) { + ->action(function (string $messageId, array $topics, array $users, array $targets, string $subject, string $description, string $content, string $status, bool $html, ?string $deliveryTime, Event $queueForEvents, Database $dbForProject, Document $project, Messaging $queueForMessaging, Response $response) { $message = $dbForProject->getDocument('messages', $messageId); if ($message->isEmpty()) { @@ -2167,6 +2261,9 @@ App::patch('/v1/messaging/messages/email/:messageId') ->trigger(); } + $queueForEvents + ->setParam('messageId', $message->getId()); + $response ->dynamic($message, Response::MODEL_MESSAGE); }); @@ -2176,6 +2273,7 @@ App::patch('/v1/messaging/messages/sms/:messageId') ->groups(['api', 'messaging']) ->label('audits.event', 'message.update') ->label('audits.resource', 'message/{response.$id}') + ->label('event', 'messages.[messageId].update') ->label('scope', 'messages.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -2192,11 +2290,12 @@ App::patch('/v1/messaging/messages/sms/:messageId') ->param('content', '', new Text(64230), 'Email Content.', true) ->param('status', '', new WhiteList(['draft', 'processing']), 'Message Status. Value must be either draft or processing.', true) ->param('deliveryTime', null, new DatetimeValidator(requireDateInFuture: true), 'Delivery time for message in ISO 8601 format. DateTime value must be in future.', true) + ->inject('queueForEvents') ->inject('dbForProject') ->inject('project') ->inject('queueForMessaging') ->inject('response') - ->action(function (string $messageId, array $topics, array $users, array $targets, string $description, string $content, string $status, ?string $deliveryTime, Database $dbForProject, Document $project, Messaging $queueForMessaging, Response $response) { + ->action(function (string $messageId, array $topics, array $users, array $targets, string $description, string $content, string $status, ?string $deliveryTime, Event $queueForEvents, Database $dbForProject, Document $project, Messaging $queueForMessaging, Response $response) { $message = $dbForProject->getDocument('messages', $messageId); if ($message->isEmpty()) { @@ -2254,6 +2353,9 @@ App::patch('/v1/messaging/messages/sms/:messageId') ->trigger(); } + $queueForEvents + ->setParam('messageId', $message->getId()); + $response ->dynamic($message, Response::MODEL_MESSAGE); }); @@ -2263,6 +2365,7 @@ App::patch('/v1/messaging/messages/push/:messageId') ->groups(['api', 'messaging']) ->label('audits.event', 'message.update') ->label('audits.resource', 'message/{response.$id}') + ->label('event', 'messages.[messageId].update') ->label('scope', 'messages.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -2286,11 +2389,12 @@ App::patch('/v1/messaging/messages/push/:messageId') ->param('tag', '', new Text(256), 'Tag for push notification. Available only for Android Platform.', true) ->param('badge', '', new Text(256), 'Badge for push notification. Available only for IOS Platform.', true) ->param('status', 'processing', new WhiteList(['draft', 'processing']), 'Message Status. Value must be either draft or processing.', true) ->param('deliveryTime', null, new DatetimeValidator(requireDateInFuture: true), 'Delivery time for message in ISO 8601 format. DateTime value must be in future.', true) + ->inject('queueForEvents') ->inject('dbForProject') ->inject('project') ->inject('queueForMessaging') ->inject('response') - ->action(function (string $messageId, array $topics, array $users, array $targets, string $description, string $title, string $body, ?array $data, string $action, string $icon, string $sound, string $color, string $tag, string $badge, string $status, ?string $deliveryTime, Database $dbForProject, Document $project, Messaging $queueForMessaging, Response $response) { + ->action(function (string $messageId, array $topics, array $users, array $targets, string $description, string $title, string $body, ?array $data, string $action, string $icon, string $sound, string $color, string $tag, string $badge, string $status, ?string $deliveryTime, Event $queueForEvents, Database $dbForProject, Document $project, Messaging $queueForMessaging, Response $response) { $message = $dbForProject->getDocument('messages', $messageId); if ($message->isEmpty()) { @@ -2380,6 +2484,9 @@ App::patch('/v1/messaging/messages/push/:messageId') ->trigger(); } + $queueForEvents + ->setParam('messageId', $message->getId()); + $response ->dynamic($message, Response::MODEL_MESSAGE); }); diff --git a/app/controllers/api/users.php b/app/controllers/api/users.php index 7c9253684e..023cef3641 100644 --- a/app/controllers/api/users.php +++ b/app/controllers/api/users.php @@ -384,6 +384,7 @@ App::post('/v1/users/:userId/targets') ->groups(['api', 'users']) ->label('audits.event', 'target.create') ->label('audits.resource', 'target/response.$id') + ->label('event', 'users.[userId].targets.[targetId].create') ->label('scope', 'targets.write') ->label('sdk.auth', [APP_AUTH_TYPE_KEY, APP_AUTH_TYPE_ADMIN]) ->label('sdk.namespace', 'users') @@ -396,9 +397,10 @@ App::post('/v1/users/:userId/targets') ->param('targetId', '', new UID(), 'Target ID.') ->param('providerId', '', new UID(), 'Provider ID.') ->param('identifier', '', new Text(Database::LENGTH_KEY), 'The target identifier (token, email, phone etc.)') + ->inject('queueForEvents') ->inject('response') ->inject('dbForProject') - ->action(function (string $userId, string $targetId, string $providerId, string $identifier, Response $response, Database $dbForProject) { + ->action(function (string $userId, string $targetId, string $providerId, string $identifier, Event $queueForEvents, Response $response, Database $dbForProject) { $provider = $dbForProject->getDocument('providers', $providerId); if ($provider->isEmpty()) { @@ -431,6 +433,10 @@ App::post('/v1/users/:userId/targets') } $dbForProject->deleteCachedDocument('users', $user->getId()); + $queueForEvents + ->setParam('userId', $user->getId()) + ->setParam('targetId', $target->getId()); + $response ->setStatusCode(Response::STATUS_CODE_CREATED) ->dynamic($target, Response::MODEL_TARGET); @@ -1203,6 +1209,7 @@ App::patch('/v1/users/:userId/targets/:targetId/identifier') ->groups(['api', 'users']) ->label('audits.event', 'target.update') ->label('audits.resource', 'target/{response.$id}') + ->label('event', 'users.[userId].targets.[targetId].update') ->label('scope', 'targets.write') ->label('sdk.auth', [APP_AUTH_TYPE_KEY, APP_AUTH_TYPE_ADMIN]) ->label('sdk.namespace', 'users') @@ -1214,9 +1221,10 @@ App::patch('/v1/users/:userId/targets/:targetId/identifier') ->param('userId', '', new UID(), 'User ID.') ->param('targetId', '', new UID(), 'Target ID.') ->param('identifier', '', new Text(Database::LENGTH_KEY), 'The target identifier (token, email, phone etc.)') + ->inject('queueForEvents') ->inject('response') ->inject('dbForProject') - ->action(function (string $userId, string $targetId, string $identifier, Response $response, Database $dbForProject) { + ->action(function (string $userId, string $targetId, string $identifier, Event $queueForEvents, Response $response, Database $dbForProject) { $user = $dbForProject->getDocument('users', $userId); @@ -1239,6 +1247,10 @@ App::patch('/v1/users/:userId/targets/:targetId/identifier') $target = $dbForProject->updateDocument('targets', $target->getId(), $target); $dbForProject->deleteCachedDocument('users', $user->getId()); + $queueForEvents + ->setParam('userId', $user->getId()) + ->setParam('targetId', $target->getId()); + $response ->dynamic($target, Response::MODEL_TARGET); }); @@ -1378,6 +1390,7 @@ App::delete('/v1/users/:userId/targets/:targetId') ->groups(['api', 'users']) ->label('audits.event', 'target.delete') ->label('audits.resource', 'target/{request.$targetId}') + ->label('event', 'users.[userId].targets.[targetId].delete') ->label('scope', 'targets.write') ->label('sdk.auth', [APP_AUTH_TYPE_KEY, APP_AUTH_TYPE_ADMIN]) ->label('sdk.namespace', 'users') @@ -1388,9 +1401,10 @@ App::delete('/v1/users/:userId/targets/:targetId') ->label('sdk.response.model', Response::MODEL_NONE) ->param('userId', '', new UID(), 'User ID.') ->param('targetId', '', new UID(), 'Target ID.') + ->inject('queueForEvents') ->inject('response') ->inject('dbForProject') - ->action(function (string $userId, string $targetId, Response $response, Database $dbForProject) { + ->action(function (string $userId, string $targetId, Event $queueForEvents, Response $response, Database $dbForProject) { $user = $dbForProject->getDocument('users', $userId); @@ -1408,9 +1422,13 @@ App::delete('/v1/users/:userId/targets/:targetId') throw new Exception(Exception::USER_TARGET_NOT_FOUND); } - $target = $dbForProject->deleteDocument('targets', $target->getId()); + $dbForProject->deleteDocument('targets', $target->getId()); $dbForProject->deleteCachedDocument('users', $user->getId()); + $queueForEvents + ->setParam('userId', $user->getId()) + ->setParam('targetId', $target->getId()); + $response->noContent(); }); From 2aa5c5742b4f13f1d4aeba149af434bed5d805b4 Mon Sep 17 00:00:00 2001 From: Prateek Banga Date: Wed, 1 Nov 2023 12:09:00 +0530 Subject: [PATCH 3/5] remove unnecessary injection --- app/controllers/api/messaging.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/controllers/api/messaging.php b/app/controllers/api/messaging.php index 46675dc5f0..d154302832 100644 --- a/app/controllers/api/messaging.php +++ b/app/controllers/api/messaging.php @@ -294,7 +294,6 @@ App::post('/v1/messaging/providers/textmagic') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.create') ->label('audits.resource', 'provider/{response.$id}') - ->inject('queueForEvents') ->label('event', 'providers.[providerId].create') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) From fda4e6a8bddd05a303434737a8ba43220fc09093 Mon Sep 17 00:00:00 2001 From: prateek banga Date: Wed, 1 Nov 2023 14:33:13 +0530 Subject: [PATCH 4/5] fixes typo in event label --- app/controllers/api/messaging.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/api/messaging.php b/app/controllers/api/messaging.php index d154302832..cbabb2d0e5 100644 --- a/app/controllers/api/messaging.php +++ b/app/controllers/api/messaging.php @@ -850,7 +850,7 @@ App::patch('/v1/messaging/providers/msg91/:providerId') ->groups(['api', 'messaging']) ->label('audits.event', 'provider.update') ->label('audits.resource', 'provider/{response.$id}') - ->label('event', 'providers.[provider].update') + ->label('event', 'providers.[providerId].update') ->label('scope', 'providers.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') @@ -1473,7 +1473,7 @@ App::post('/v1/messaging/topics') ->groups(['api', 'messaging']) ->label('audits.event', 'topic.[topicId].create') ->label('audits.resource', 'topic/{response.$id}') - ->label('event', 'topics.create') + ->label('event', 'topics.[topicId].create') ->label('scope', 'topics.write') ->label('sdk.auth', [APP_AUTH_TYPE_ADMIN, APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'messaging') From 8d5bfdabc6b51457143838d720c4ce9c9792de9a Mon Sep 17 00:00:00 2001 From: Prateek Banga Date: Thu, 9 Nov 2023 12:29:16 +0530 Subject: [PATCH 5/5] revert wrong aduits.event label --- app/controllers/api/messaging.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/api/messaging.php b/app/controllers/api/messaging.php index 3521402a24..36508a0817 100644 --- a/app/controllers/api/messaging.php +++ b/app/controllers/api/messaging.php @@ -1471,7 +1471,7 @@ App::delete('/v1/messaging/providers/:providerId') App::post('/v1/messaging/topics') ->desc('Create a topic.') ->groups(['api', 'messaging']) - ->label('audits.event', 'topic.[topicId].create') + ->label('audits.event', 'topic.create') ->label('audits.resource', 'topic/{response.$id}') ->label('event', 'topics.[topicId].create') ->label('scope', 'topics.write')