diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index 144bd1d2b..ade0f4c89 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -2014,12 +2014,35 @@ App::post('/v1/account/recovery') $url['query'] = Template::mergeQuery(((isset($url['query'])) ? $url['query'] : ''), ['userId' => $profile->getId(), 'secret' => $secret, 'expire' => $expire]); $url = Template::unParseURL($url); + $projectName = $project->isEmpty() ? 'Console' : $project->getAttribute('name', '[APP-NAME]'); + $from = $project->isEmpty() || $project->getId() === 'console' ? '' : \sprintf($locale->getText('emails.sender'), $projectName); + $body = Template::fromFile(__DIR__ . '/../config/locale/templates/email-base.tpl'); + $subject = $locale->getText("emails.recovery.subject"); + + $body + ->setParam('{{subject}}', $subject) + ->setParam('{{hello}}', $locale->getText("emails.recovery.hello")) + ->setParam('{{name}}', $profile->getAttribute('name')) + ->setParam('{{body}}', $locale->getText("emails.recovery.body")) + ->setParam('{{redirect}}', $url) + ->setParam('{{footer}}', $locale->getText("emails.recovery.footer")) + ->setParam('{{thanks}}', $locale->getText("emails.recovery.thanks")) + ->setParam('{{signature}}', $locale->getText("emails.recovery.signature")) + ->setParam('{{project}}', $projectName) + ->setParam('{{direction}}', $locale->getText('settings.direction')) + ->setParam('{{bg-body}}', '#f7f7f7') + ->setParam('{{bg-content}}', '#ffffff') + ->setParam('{{text-content}}', '#000000'); + + $body = $body->render(); + + $mails - ->setType(MAIL_TYPE_RECOVERY) ->setRecipient($profile->getAttribute('email', '')) - ->setUrl($url) - ->setLocale($locale->default) ->setName($profile->getAttribute('name')) + ->setBody($body) + ->setFrom($from) + ->setSubject($subject) ->trigger(); ; @@ -2173,22 +2196,15 @@ App::post('/v1/account/verification') $url = Template::parseURL($url); $url['query'] = Template::mergeQuery(((isset($url['query'])) ? $url['query'] : ''), ['userId' => $user->getId(), 'secret' => $verificationSecret, 'expire' => $expire]); $url = Template::unParseURL($url); + $projectName = $project->isEmpty() ? 'Console' : $project->getAttribute('name', '[APP-NAME]'); - - if (!$this->doesLocaleExist($locale, $prefix)) { - $locale->setDefault('en'); - } - $from = $project->isEmpty() || $project->getId() === 'console' ? '' : \sprintf($locale->getText('emails.sender'), $projectName); $body = Template::fromFile(__DIR__ . '/../config/locale/templates/email-base.tpl'); - $subject = \sprintf($locale->getText("emails.verification.subject"), $team->getAttribute('name'), $projectName); - $body->setParam('{{owner}}', $user->getAttribute('name')); - $body->setParam('{{team}}', $team->getAttribute('name')); - + $subject = $locale->getText("emails.verification.subject"); $body ->setParam('{{subject}}', $subject) ->setParam('{{hello}}', $locale->getText("emails.verification.hello")) - ->setParam('{{name}}', $name) + ->setParam('{{name}}', $user->getAttribute('name')) ->setParam('{{body}}', $locale->getText("emails.verification.body")) ->setParam('{{redirect}}', $url) ->setParam('{{footer}}', $locale->getText("emails.verification.footer")) diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php index 567560c6a..3b45450ba 100644 --- a/app/controllers/api/teams.php +++ b/app/controllers/api/teams.php @@ -434,14 +434,37 @@ App::post('/v1/teams/:teamId/memberships') $url = Template::unParseURL($url); if (!$isPrivilegedUser && !$isAppUser) { // No need of confirmation when in admin or app mode + $projectName = $project->isEmpty() ? 'Console' : $project->getAttribute('name', '[APP-NAME]'); + + $from = $project->isEmpty() || $project->getId() === 'console' ? '' : \sprintf($locale->getText('emails.sender'), $projectName); + $body = Template::fromFile(__DIR__ . '/../config/locale/templates/email-base.tpl'); + $subject = \sprintf($locale->getText("emails.invitation.subject"), $team->getAttribute('name'), $projectName); + $body->setParam('{{owner}}', $user->getAttribute('name')); + $body->setParam('{{team}}', $team->getAttribute('name')); + + $body + ->setParam('{{subject}}', $subject) + ->setParam('{{hello}}', $locale->getText("emails.invitation.hello")) + ->setParam('{{name}}', $user->getAttribute('name')) + ->setParam('{{body}}', $locale->getText("emails.invitation.body")) + ->setParam('{{redirect}}', $url) + ->setParam('{{footer}}', $locale->getText("emails.invitation.footer")) + ->setParam('{{thanks}}', $locale->getText("emails.invitation.thanks")) + ->setParam('{{signature}}', $locale->getText("emails.invitation.signature")) + ->setParam('{{project}}', $projectName) + ->setParam('{{direction}}', $locale->getText('settings.direction')) + ->setParam('{{bg-body}}', '#f7f7f7') + ->setParam('{{bg-content}}', '#ffffff') + ->setParam('{{text-content}}', '#000000'); + + $body = $body->render(); + $mails - ->setType(MAIL_TYPE_INVITATION) - ->setRecipient($email) - ->setUrl($url) - ->setName($name) - ->setLocale($locale->default) - ->setTeam($team) - ->setUser($user) + ->setSubject($subject) + ->setBody($body) + ->setFrom($from) + ->setRecipient($user->getAttribute('email')) + ->setName($user->getAttribute('name')) ->trigger() ; } diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index 6a7502522..5aab0b723 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -98,13 +98,12 @@ App::init() ->inject('user') ->inject('events') ->inject('audits') - ->inject('mails') ->inject('usage') ->inject('deletes') ->inject('database') ->inject('dbForProject') ->inject('mode') - ->action(function (App $utopia, Request $request, Response $response, Document $project, Document $user, Event $events, Audit $audits, Mail $mails, Stats $usage, Delete $deletes, EventDatabase $database, Database $dbForProject, string $mode) use ($databaseListener) { + ->action(function (App $utopia, Request $request, Response $response, Document $project, Document $user, Event $events, Audit $audits, Stats $usage, Delete $deletes, EventDatabase $database, Database $dbForProject, string $mode) use ($databaseListener) { $route = $utopia->match($request); @@ -178,10 +177,6 @@ App::init() ->setProject($project) ->setUser($user); - $mails - ->setProject($project) - ->setUser($user); - $audits ->setMode($mode) ->setUserAgent($request->getUserAgent('')) diff --git a/app/workers/certificates.php b/app/workers/certificates.php index e7885bc66..6de6445c4 100644 --- a/app/workers/certificates.php +++ b/app/workers/certificates.php @@ -4,6 +4,7 @@ use Appwrite\Event\Event; use Appwrite\Event\Mail; use Appwrite\Network\Validator\CNAME; use Appwrite\Resque\Worker; +use Appwrite\Template\Template; use Utopia\App; use Utopia\CLI\Console; use Utopia\Database\Database; @@ -12,6 +13,7 @@ use Utopia\Database\DateTime; use Utopia\Database\ID; use Utopia\Database\Query; use Utopia\Domains\Domain; +use Utopia\Locale\Locale; require_once __DIR__ . '/../init.php'; @@ -375,18 +377,38 @@ class CertificatesV1 extends Worker Console::warning('Cannot renew domain (' . $domain . ') on attempt no. ' . $attempt . ' certificate: ' . $errorMessage); // Send mail to administratore mail + + $locale = new Locale(App::getEnv('_APP_LOCALE', 'en')); + if (!$locale->getText('emails.sender') || !$locale->getText("emails.certificate.hello") || !$locale->getText("emails.certificate.subject") || !$locale->getText("emails.certificate.body") || !$locale->getText("emails.certificate.footer") || !$locale->getText("emails.certificate.thanks") || !$locale->getText("emails.certificate.signature")) { + $locale->setDefault('en'); + } + + $body = Template::fromFile(__DIR__ . '/../config/locale/templates/email-base.tpl'); + + $subject = \sprintf($locale->getText("emails.certificate.subject"), $domain); + $body->setParam('{{domain}}', $domain); + $body->setParam('{{error}}', $errorMessage); + $body->setParam('{{attempt}}', $attempt); + + $body + ->setParam('{{subject}}', $subject) + ->setParam('{{hello}}', $locale->getText("emails.certificate.hello")) + ->setParam('{{body}}', $locale->getText("emails.certificate.body")) + ->setParam('{{redirect}}', 'https://' . $domain) + ->setParam('{{footer}}', $locale->getText("emails.certificate.footer")) + ->setParam('{{thanks}}', $locale->getText("emails.certificate.thanks")) + ->setParam('{{signature}}', $locale->getText("emails.certificate.signature")) + ->setParam('{{project}}', 'Console') + ->setParam('{{direction}}', $locale->getText('settings.direction')) + ->setParam('{{bg-body}}', '#f7f7f7') + ->setParam('{{bg-content}}', '#ffffff') + ->setParam('{{text-content}}', '#000000'); + + $body = $body->render(); $mail = new Mail(); $mail - ->setType(MAIL_TYPE_CERTIFICATE) ->setRecipient(App::getEnv('_APP_SYSTEM_SECURITY_EMAIL_ADDRESS')) - ->setUrl('https://' . $domain) - ->setLocale(App::getEnv('_APP_LOCALE', 'en')) ->setName('Appwrite Administrator') - ->setPayload([ - 'domain' => $domain, - 'error' => $errorMessage, - 'attempt' => $attempt - ]) ->trigger(); }