Fix custom SMTP locale

This commit is contained in:
Matej Bačo
2024-12-20 10:35:26 +00:00
parent 0715a8450a
commit e67efff74c
2 changed files with 28 additions and 15 deletions
+22 -12
View File
@@ -59,10 +59,10 @@ use Utopia\Validator\WhiteList;
$oauthDefaultSuccess = '/console/auth/oauth2/success';
$oauthDefaultFailure = '/console/auth/oauth2/failure';
function sendSessionAlert(Locale $locale, Document $user, Document $project, Document $session, Mail $queueForMails)
function sendSessionAlert(string $language, Locale $locale, Document $user, Document $project, Document $session, Mail $queueForMails)
{
$subject = $locale->getText("emails.sessionAlert.subject");
$customTemplate = $project->getAttribute('templates', [])['email.sessionAlert-' . $locale->default] ?? [];
$customTemplate = $project->getAttribute('templates', [])['email.sessionAlert-' . $language] ?? [];
$message = Template::fromFile(__DIR__ . '/../../config/locale/templates/email-session-alert.tpl');
$message
@@ -240,7 +240,8 @@ $createSession = function (string $userId, string $secret, Request $request, Res
]) !== 1;
if ($isAllowedTokenType && $hasUserEmail && $isSessionAlertsEnabled && $isNotFirstSession) {
sendSessionAlert($locale, $user, $project, $session, $queueForMails);
$language = (string)$request->getParam('locale', $request->getHeader('x-appwrite-locale', $locale->default));
sendSessionAlert($language, $locale, $user, $project, $session, $queueForMails);
}
$queueForEvents
@@ -918,7 +919,8 @@ App::post('/v1/account/sessions/email')
if ($dbForProject->count('sessions', [
Query::equal('userId', [$user->getId()]),
]) !== 1) {
sendSessionAlert($locale, $user, $project, $session, $queueForMails);
$language = (string)$request->getParam('locale', $request->getHeader('x-appwrite-locale', $locale->default));
sendSessionAlert($language, $locale, $user, $project, $session, $queueForMails);
}
}
@@ -1884,7 +1886,8 @@ App::post('/v1/account/tokens/magic-url')
$url = Template::unParseURL($url);
$subject = $locale->getText("emails.magicSession.subject");
$customTemplate = $project->getAttribute('templates', [])['email.magicSession-' . $locale->default] ?? [];
$language = (string)$request->getParam('locale', $request->getHeader('x-appwrite-locale', $locale->default));
$customTemplate = $project->getAttribute('templates', [])['email.magicSession-' . $language] ?? [];
$detector = new Detector($request->getUserAgent('UNKNOWN'));
$agentOs = $detector->getOS();
@@ -2115,7 +2118,8 @@ App::post('/v1/account/tokens/email')
$dbForProject->purgeCachedDocument('users', $user->getId());
$subject = $locale->getText("emails.otpSession.subject");
$customTemplate = $project->getAttribute('templates', [])['email.otpSession-' . $locale->default] ?? [];
$language = (string)$request->getParam('locale', $request->getHeader('x-appwrite-locale', $locale->default));
$customTemplate = $project->getAttribute('templates', [])['email.otpSession-' . $language] ?? [];
$detector = new Detector($request->getUserAgent('UNKNOWN'));
$agentOs = $detector->getOS();
@@ -2426,7 +2430,8 @@ App::post('/v1/account/tokens/phone')
if ($sendSMS) {
$message = Template::fromFile(__DIR__ . '/../../config/locale/templates/sms-base.tpl');
$customTemplate = $project->getAttribute('templates', [])['sms.login-' . $locale->default] ?? [];
$language = (string)$request->getParam('locale', $request->getHeader('x-appwrite-locale', $locale->default));
$customTemplate = $project->getAttribute('templates', [])['sms.login-' . $language] ?? [];
if (!empty($customTemplate)) {
$message = $customTemplate['message'] ?? $message;
}
@@ -3037,7 +3042,8 @@ App::post('/v1/account/recovery')
$projectName = $project->isEmpty() ? 'Console' : $project->getAttribute('name', '[APP-NAME]');
$body = $locale->getText("emails.recovery.body");
$subject = $locale->getText("emails.recovery.subject");
$customTemplate = $project->getAttribute('templates', [])['email.recovery-' . $locale->default] ?? [];
$language = (string)$request->getParam('locale', $request->getHeader('x-appwrite-locale', $locale->default));
$customTemplate = $project->getAttribute('templates', [])['email.recovery-' . $language] ?? [];
$message = Template::fromFile(__DIR__ . '/../../config/locale/templates/email-inner-base.tpl');
$message
@@ -3287,7 +3293,8 @@ App::post('/v1/account/verification')
$projectName = $project->isEmpty() ? 'Console' : $project->getAttribute('name', '[APP-NAME]');
$body = $locale->getText("emails.verification.body");
$subject = $locale->getText("emails.verification.subject");
$customTemplate = $project->getAttribute('templates', [])['email.verification-' . $locale->default] ?? [];
$language = (string)$request->getParam('locale', $request->getHeader('x-appwrite-locale', $locale->default));
$customTemplate = $project->getAttribute('templates', [])['email.verification-' . $language] ?? [];
$message = Template::fromFile(__DIR__ . '/../../config/locale/templates/email-inner-base.tpl');
$message
@@ -3522,7 +3529,8 @@ App::post('/v1/account/verification/phone')
if ($sendSMS) {
$message = Template::fromFile(__DIR__ . '/../../config/locale/templates/sms-base.tpl');
$customTemplate = $project->getAttribute('templates', [])['sms.verification-' . $locale->default] ?? [];
$language = (string)$request->getParam('locale', $request->getHeader('x-appwrite-locale', $locale->default));
$customTemplate = $project->getAttribute('templates', [])['sms.verification-' . $language] ?? [];
if (!empty($customTemplate)) {
$message = $customTemplate['message'] ?? $message;
}
@@ -4060,7 +4068,8 @@ App::post('/v1/account/mfa/challenge')
$message = Template::fromFile(__DIR__ . '/../../config/locale/templates/sms-base.tpl');
$customTemplate = $project->getAttribute('templates', [])['sms.mfaChallenge-' . $locale->default] ?? [];
$language = (string)$request->getParam('locale', $request->getHeader('x-appwrite-locale', $locale->default));
$customTemplate = $project->getAttribute('templates', [])['sms.mfaChallenge-' . $language] ?? [];
if (!empty($customTemplate)) {
$message = $customTemplate['message'] ?? $message;
}
@@ -4097,7 +4106,8 @@ App::post('/v1/account/mfa/challenge')
}
$subject = $locale->getText("emails.mfaChallenge.subject");
$customTemplate = $project->getAttribute('templates', [])['email.mfaChallenge-' . $locale->default] ?? [];
$language = (string)$request->getParam('locale', $request->getHeader('x-appwrite-locale', $locale->default));
$customTemplate = $project->getAttribute('templates', [])['email.mfaChallenge-' . $language] ?? [];
$detector = new Detector($request->getUserAgent('UNKNOWN'));
$agentOs = $detector->getOS();
+6 -3
View File
@@ -415,6 +415,7 @@ App::post('/v1/teams/:teamId/memberships')
}, 'Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](https://appwrite.io/docs/permissions). Maximum of ' . APP_LIMIT_ARRAY_PARAMS_SIZE . ' roles are allowed, each 32 characters long.', false, ['project'])
->param('url', '', fn ($clients) => new Host($clients), 'URL to redirect the user back to your app from the invitation email. This parameter is not required when an API key is supplied. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.', true, ['clients']) // TODO add our own built-in confirm page
->param('name', '', new Text(128), 'Name of the new team member. Max length: 128 chars.', true)
->inject('request')
->inject('response')
->inject('project')
->inject('user')
@@ -423,7 +424,7 @@ App::post('/v1/teams/:teamId/memberships')
->inject('queueForMails')
->inject('queueForMessaging')
->inject('queueForEvents')
->action(function (string $teamId, string $email, string $userId, string $phone, array $roles, string $url, string $name, Response $response, Document $project, Document $user, Database $dbForProject, Locale $locale, Mail $queueForMails, Messaging $queueForMessaging, Event $queueForEvents) {
->action(function (string $teamId, string $email, string $userId, string $phone, array $roles, string $url, string $name, Request $request, Response $response, Document $project, Document $user, Database $dbForProject, Locale $locale, Mail $queueForMails, Messaging $queueForMessaging, Event $queueForEvents) {
$isAPIKey = Auth::isAppUser(Authorization::getRoles());
$isPrivilegedUser = Auth::isPrivilegedUser(Authorization::getRoles());
@@ -589,7 +590,8 @@ App::post('/v1/teams/:teamId/memberships')
$body = $locale->getText("emails.invitation.body");
$subject = \sprintf($locale->getText("emails.invitation.subject"), $team->getAttribute('name'), $projectName);
$customTemplate = $project->getAttribute('templates', [])['email.invitation-' . $locale->default] ?? [];
$language = (string)$request->getParam('locale', $request->getHeader('x-appwrite-locale', $locale->default));
$customTemplate = $project->getAttribute('templates', [])['email.invitation-' . $language] ?? [];
$message = Template::fromFile(__DIR__ . '/../../config/locale/templates/email-inner-base.tpl');
$message
@@ -671,7 +673,8 @@ App::post('/v1/teams/:teamId/memberships')
$message = Template::fromFile(__DIR__ . '/../../config/locale/templates/sms-base.tpl');
$customTemplate = $project->getAttribute('templates', [])['sms.invitation-' . $locale->default] ?? [];
$language = (string)$request->getParam('locale', $request->getHeader('x-appwrite-locale', $locale->default));
$customTemplate = $project->getAttribute('templates', [])['sms.invitation-' . $language] ?? [];
if (!empty($customTemplate)) {
$message = $customTemplate['message'];
}