1
0
Fork 0
mirror of synced 2024-06-26 18:20:43 +12:00

functions/builds/deletes worker

This commit is contained in:
shimon 2023-06-11 17:08:48 +03:00
parent fd4f86b1c1
commit 57bc7d0584
14 changed files with 41 additions and 39 deletions

2
.env
View file

@ -1,4 +1,4 @@
_APP_ENV=development
_APP_ENV=production
_APP_LOCALE=en
_APP_WORKER_PER_CORE=2
_APP_CONSOLE_WHITELIST_ROOT=disabled

View file

@ -132,7 +132,7 @@ CLI::setResource('queue', function (Group $pools) {
CLI::setResource('queueForMessaging', function (Connection $queue) {
return new Phone($queue);
}, ['queue']);
CLI::setResource('queueForMail', function (Connection $queue) {
CLI::setResource('queueForMails', function (Connection $queue) {
return new Mail($queue);
}, ['queue']);
CLI::setResource('queueForBuilds', function (Connection $queue) {

View file

@ -732,8 +732,8 @@ App::post('/v1/account/sessions/magic-url')
->inject('dbForProject')
->inject('locale')
->inject('queueForEvents')
->inject('queueForMail')
->action(function (string $userId, string $email, string $url, Request $request, Response $response, Document $project, Database $dbForProject, Locale $locale, Event $queueForEvents, Mail $queueForMail) {
->inject('queueForMails')
->action(function (string $userId, string $email, string $url, Request $request, Response $response, Document $project, Database $dbForProject, Locale $locale, Event $queueForEvents, Mail $queueForMails) {
if (empty(App::getEnv('_APP_SMTP_HOST'))) {
throw new Exception(Exception::GENERAL_SMTP_DISABLED, 'SMTP disabled');
@ -837,13 +837,11 @@ App::post('/v1/account/sessions/magic-url')
$body = $body->render();
$queueForMail
$queueForMails
->setSubject($subject)
->setBody($body)
->setFrom($from)
->setRecipient($user->getAttribute('email'))
->setUrl($url)
->setLocale($locale->default)
->trigger()
;
@ -1624,6 +1622,8 @@ App::patch('/v1/account/password')
->label('sdk.response.code', Response::STATUS_CODE_OK)
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
->label('sdk.response.model', Response::MODEL_ACCOUNT)
->label('sdk.offline.model', '/account')
->label('sdk.offline.key', 'current')
->param('password', '', new Password(), 'New user password. Must be at least 8 chars.')
->param('oldPassword', '', new Password(), 'Current user password. Must be at least 8 chars.', true)
->inject('response')
@ -2055,9 +2055,9 @@ App::post('/v1/account/recovery')
->inject('dbForProject')
->inject('project')
->inject('locale')
->inject('queueForMail')
->inject('queueForMails')
->inject('queueForEvents')
->action(function (string $email, string $url, Request $request, Response $response, Database $dbForProject, Document $project, Locale $locale, Mail $queueForMail, Event $queueForEvents) {
->action(function (string $email, string $url, Request $request, Response $response, Database $dbForProject, Document $project, Locale $locale, Mail $queueForMails, Event $queueForEvents) {
if (empty(App::getEnv('_APP_SMTP_HOST'))) {
throw new Exception(Exception::GENERAL_SMTP_DISABLED, 'SMTP Disabled');
@ -2133,7 +2133,7 @@ App::post('/v1/account/recovery')
$body = $body->render();
$queueForMail
$queueForMails
->setRecipient($profile->getAttribute('email', ''))
->setName($profile->getAttribute('name'))
->setBody($body)
@ -2252,8 +2252,8 @@ App::post('/v1/account/verification')
->inject('dbForProject')
->inject('locale')
->inject('queueForEvents')
->inject('queueForMail')
->action(function (string $url, Request $request, Response $response, Document $project, Document $user, Database $dbForProject, Locale $locale, Event $queueForEvents, Mail $queueForMail) {
->inject('queueForMails')
->action(function (string $url, Request $request, Response $response, Document $project, Document $user, Database $dbForProject, Locale $locale, Event $queueForEvents, Mail $queueForMails) {
if (empty(App::getEnv('_APP_SMTP_HOST'))) {
throw new Exception(Exception::GENERAL_SMTP_DISABLED, 'SMTP Disabled');
@ -2312,13 +2312,11 @@ App::post('/v1/account/verification')
$body = $body->render();
$queueForMail
$queueForMails
->setSubject($subject)
->setBody($body)
->setFrom($from)
->setRecipient($user->getAttribute('email'))
->setUrl($url)
->setLocale($locale->default)
->setName($user->getAttribute('name'))
->trigger()
;

View file

@ -895,6 +895,7 @@ App::delete('/v1/functions/:functionId/deployments/:deploymentId')
if ($function->getAttribute('deployment') === $deployment->getId()) { // Reset function deployment
$function = $dbForProject->updateDocument('functions', $function->getId(), new Document(array_merge($function->getArrayCopy(), [
'deployment' => '',
'deploymentInternalId' => '',
])));
}

View file

@ -315,9 +315,9 @@ App::post('/v1/teams/:teamId/memberships')
->inject('user')
->inject('dbForProject')
->inject('locale')
->inject('queueForMail')
->inject('queueForMails')
->inject('queueForEvents')
->action(function (string $teamId, string $email, array $roles, string $url, string $name, Response $response, Document $project, Document $user, Database $dbForProject, Locale $locale, Mail $queueForMail, Event $queueForEvents) {
->action(function (string $teamId, string $email, array $roles, string $url, string $name, Response $response, Document $project, Document $user, Database $dbForProject, Locale $locale, Mail $queueForMails, Event $queueForEvents) {
$isPrivilegedUser = Auth::isPrivilegedUser(Authorization::getRoles());
$isAppUser = Auth::isAppUser(Authorization::getRoles());
@ -461,7 +461,7 @@ App::post('/v1/teams/:teamId/memberships')
$body = $body->render();
$queueForMail
$queueForMails
->setSubject($subject)
->setBody($body)
->setFrom($from)

View file

@ -156,13 +156,13 @@ App::init()
->inject('user')
->inject('queueForEvents')
->inject('queueForAudits')
->inject('queueForMail')
->inject('queueForMails')
->inject('queueForDeletes')
->inject('queueForDatabase')
->inject('queueForUsage')
->inject('dbForProject')
->inject('mode')
->action(function (App $utopia, Request $request, Response $response, Document $project, Document $user, Event $queueForEvents, Audit $queueForAudits, Mail $queueForMail, Delete $queueForDeletes, EventDatabase $queueForDatabase, Usage $queueForUsage, Database $dbForProject, string $mode) use ($databaseListener) {
->action(function (App $utopia, Request $request, Response $response, Document $project, Document $user, Event $queueForEvents, Audit $queueForAudits, Mail $queueForMails, Delete $queueForDeletes, EventDatabase $queueForDatabase, Usage $queueForUsage, Database $dbForProject, string $mode) use ($databaseListener) {
$route = $utopia->match($request);
@ -236,7 +236,7 @@ App::init()
->setProject($project)
->setUser($user);
$queueForMail
$queueForMails
->setProject($project)
->setUser($user);

View file

@ -869,7 +869,7 @@ App::setResource('queue', function (Group $pools) {
App::setResource('queueForMessaging', function (Connection $queue) {
return new Phone($queue);
}, ['queue']);
App::setResource('queueForMail', function (Connection $queue) {
App::setResource('queueForMails', function (Connection $queue) {
return new Mail($queue);
}, ['queue']);
App::setResource('queueForBuilds', function (Connection $queue) {

View file

@ -125,7 +125,7 @@ Server::setResource('queueForDatabase', function (Connection $queue) {
Server::setResource('queueForMessaging', function (Connection $queue) {
return new Phone($queue);
}, ['queue']);
Server::setResource('queueForMail', function (Connection $queue) {
Server::setResource('queueForMails', function (Connection $queue) {
return new Mail($queue);
}, ['queue']);
Server::setResource('queueForBuilds', function (Connection $queue) {

View file

@ -383,17 +383,17 @@ Server::setResource('applyCertificateFiles', function () {
* @param int $attempt How many times it failed already
* @return void
*/
Server::setResource('notifyError', function (Mail $queueForMail) {
Server::setResource('notifyError', function (Mail $queueForMails) {
return function (
string $domain,
string $errorMessage,
int $attempt,
) use ($queueForMail) {
) use ($queueForMails) {
// Log error into console
Console::warning('Cannot renew domain (' . $domain . ') on attempt no. ' . $attempt . ' certificate: ' . $errorMessage);
// Send mail to administratore mail
$queueForMail
$queueForMails
->setType(MAIL_TYPE_CERTIFICATE)
->setRecipient(App::getEnv('_APP_SYSTEM_SECURITY_EMAIL_ADDRESS'))
->setUrl('https://' . $domain)
@ -406,7 +406,7 @@ Server::setResource('notifyError', function (Mail $queueForMail) {
])
->trigger();
};
}, ['queueForMail']);
}, ['queueForMails']);
/**
* Update all existing domain documents so they have relation to correct certificate document.

View file

@ -308,6 +308,7 @@ services:
- appwrite-certificates:/storage/certificates:rw
- ./app:/usr/src/code/app
- ./src:/usr/src/code/src
- ./vendor/utopia-php/storage:/usr/src/code/vendor/utopia-php/storage
environment:
- _APP_ENV
- _APP_WORKER_PER_CORE

View file

@ -35,14 +35,14 @@ class Certificates extends Action
->desc('Certificates worker')
->inject('message')
->inject('dbForConsole')
->inject('queueForMail')
->callback(fn($message, $dbForConsole, $queueForMail) => $this->action($message, $dbForConsole, $queueForMail));
->inject('queueForMails')
->callback(fn($message, $dbForConsole, $queueForMails) => $this->action($message, $dbForConsole, $queueForMails));
}
/**
* @throws Exception|Throwable
*/
public function action(Message $message, Database $dbForConsole, Mail $queueForMail): void
public function action(Message $message, Database $dbForConsole, Mail $queueForMails): void
{
$payload = $message->getPayload() ?? [];
@ -54,13 +54,13 @@ class Certificates extends Action
$domain = new Domain($document->getAttribute('domain', ''));
$skipRenewCheck = $payload['skipRenewCheck'] ?? false;
$this->execute($domain, $dbForConsole, $queueForMail, $skipRenewCheck);
$this->execute($domain, $dbForConsole, $queueForMails, $skipRenewCheck);
}
/**
* @throws Exception|Throwable
*/
private function execute(Domain $domain, Database $dbForConsole, Mail $queueForMail, bool $skipRenewCheck = false): void
private function execute(Domain $domain, Database $dbForConsole, Mail $queueForMails, bool $skipRenewCheck = false): void
{
/**
* 1. Read arguments and validate domain
@ -152,7 +152,7 @@ class Certificates extends Action
$certificate->setAttribute('renewDate', DateTime::now());
// Send email to security email
$this->notifyError($domain->get(), $e->getMessage(), $attempts, $queueForMail);
$this->notifyError($domain->get(), $e->getMessage(), $attempts, $queueForMails);
} finally {
// All actions result in new updatedAt date
$certificate->setAttribute('updated', DateTime::now());
@ -340,11 +340,11 @@ class Certificates extends Action
* @param string $domain Domain that caused the error
* @param string $errorMessage Verbose error message
* @param int $attempt How many times it failed already
* @param Mail $queueForMail
* @param Mail $queueForMails
* @return void
* @throws Exception
*/
private function notifyError(string $domain, string $errorMessage, int $attempt, Mail $queueForMail): void
private function notifyError(string $domain, string $errorMessage, int $attempt, Mail $queueForMails): void
{
// Log error into console
Console::warning('Cannot renew domain (' . $domain . ') on attempt no. ' . $attempt . ' certificate: ' . $errorMessage);
@ -375,7 +375,7 @@ class Certificates extends Action
->setParam('{{bg-content}}', '#ffffff')
->setParam('{{text-content}}', '#000000');
$queueForMail
$queueForMails
->setRecipient(App::getEnv('_APP_SYSTEM_SECURITY_EMAIL_ADDRESS'))
->setBody($body->render())
->setName('Appwrite Administrator')

View file

@ -59,7 +59,7 @@ class Deletes extends Action
$hourlyUsageRetentionDatetime = $payload['hourlyUsageRetentionDatetime'] ?? null;
$resource = $payload['resource'] ?? null;
$document = new Document($payload['document'] ?? []);
$project = new Document($payload['project'] ?? []);
$project = new Document($payload['project'] ?? []);
switch (strval($type)) {
case DELETE_TYPE_DOCUMENT:
@ -186,6 +186,7 @@ class Deletes extends Action
}
/**
* @param Database $dbForConsole
* @param callable $getProjectDB
* @param string $resource
* @throws Exception
@ -618,7 +619,6 @@ class Deletes extends Action
$projectId = $project->getId();
$dbForProject = $getProjectDB($project);
$deploymentId = $document->getId();
$functionId = $document->getAttribute('resourceId');
/**
* Delete deployment files

View file

@ -142,6 +142,7 @@ class Functions extends Action
$this->execute(
dbForProject: $dbForProject,
queueForFunctions: $queueForFunctions,
queueForEvents: $queueForEvents,
queueForUsage: $queueForUsage,
project: $project,
function: $function,

View file

@ -60,13 +60,14 @@ class Webhooks extends Action
private function execute(array $events, string $payload, Document $webhook, Document $user, Document $project): void
{
$url = \rawurldecode($webhook->getAttribute('url'));
$signatureKey = $webhook->getAttribute('signatureKey');
$signature = base64_encode(hash_hmac('sha1', $url . $payload, $signatureKey, true));
$httpUser = $webhook->getAttribute('httpUser');
$httpPass = $webhook->getAttribute('httpPass');
$ch = \curl_init($webhook->getAttribute('url'));
var_dump($url);
\curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
\curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
\curl_setopt($ch, CURLOPT_HEADER, 0);