Add notify to phone and oauth

This commit is contained in:
Khushboo Verma
2023-12-06 23:55:31 +01:00
parent 57035f35f8
commit f7b3d4dfa8
+151 -7
View File
@@ -311,7 +311,7 @@ App::post('/v1/account/sessions/email')
->addHeader('X-Fallback-Cookies', \json_encode([Auth::$cookieName => Auth::encodeSession($user->getId(), $secret)]));
}
if ($project->getAttribute('auths', [])['notify'] ?? false) {
if ($project->getAttribute('auths', [])['notify'] ?? false && !empty($user->getAttribute('email', ''))) {
$body = $locale->getText("emails.authNotify.body");
$subject = $locale->getText("emails.authNotify.subject");
@@ -378,7 +378,7 @@ App::post('/v1/account/sessions/email')
->setSubject($subject)
->setBody($body)
->setVariables($emailVariables)
->setRecipient($email)
->setRecipient($user->getAttribute('email'))
->trigger();
}
@@ -1532,7 +1532,8 @@ App::put('/v1/account/sessions/phone')
->inject('locale')
->inject('geodb')
->inject('queueForEvents')
->action(function (string $userId, string $secret, Request $request, Response $response, Document $user, Database $dbForProject, Document $project, Locale $locale, Reader $geodb, Event $queueForEvents) {
->inject('queueForMails')
->action(function (string $userId, string $secret, Request $request, Response $response, Document $user, Database $dbForProject, Document $project, Locale $locale, Reader $geodb, Event $queueForEvents, Mail $queueForMails) {
$userFromRequest = Authorization::skip(fn () => $dbForProject->getDocument('users', $userId));
@@ -1618,6 +1619,77 @@ App::put('/v1/account/sessions/phone')
->setAttribute('current', true)
->setAttribute('countryName', $countryName);
if ($project->getAttribute('auths', [])['notify'] ?? false && !empty($user->getAttribute('email', ''))) {
$body = $locale->getText("emails.authNotify.body");
$subject = $locale->getText("emails.authNotify.subject");
$message = Template::fromFile(__DIR__ . '/../../config/locale/templates/email-inner-base.tpl');
$message
->setParam('{{body}}', $body)
->setParam('{{hello}}', $locale->getText("emails.authNotify.hello"))
->setParam('{{footer}}', $locale->getText("emails.authNotify.footer"))
->setParam('{{thanks}}', $locale->getText("emails.authNotify.thanks"))
->setParam('{{signature}}', $locale->getText("emails.authNotify.signature"));
$body = $message->render();
$smtp = $project->getAttribute('smtp', []);
$smtpEnabled = $smtp['enabled'] ?? false;
$senderEmail = App::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM);
$senderName = App::getEnv('_APP_SYSTEM_EMAIL_NAME', APP_NAME . ' Server');
$replyTo = "";
if ($smtpEnabled) {
if (!empty($smtp['senderEmail'])) {
$senderEmail = $smtp['senderEmail'];
}
if (!empty($smtp['senderName'])) {
$senderName = $smtp['senderName'];
}
if (!empty($smtp['replyTo'])) {
$replyTo = $smtp['replyTo'];
}
$queueForMails
->setSmtpHost($smtp['host'] ?? '')
->setSmtpPort($smtp['port'] ?? '')
->setSmtpUsername($smtp['username'] ?? '')
->setSmtpPassword($smtp['password'] ?? '')
->setSmtpSecure($smtp['secure'] ?? '');
$queueForMails
->setSmtpReplyTo($replyTo)
->setSmtpSenderEmail($senderEmail)
->setSmtpSenderName($senderName);
}
$device = $detector->getDevice();
$sessionCreatedAt = $session->getCreatedAt();
$dateTime = new DateTimeImmutable($sessionCreatedAt);
$date = $dateTime->format('Y-m-d');
$time = $dateTime->format('H:i:s');
$emailVariables = [
'direction' => $locale->getText('settings.direction'),
'user' => $user->getAttribute('name'),
'project' => $project->getAttribute('name'),
'date' => $date,
'time' => $time,
'device' => $device['deviceBrand'] . " " . $device['deviceModel'] . " " . $device['deviceName'],
'country' => $locale->getText('countries.' . strtolower($session->getAttribute('countryCode')), $locale->getText('locale.country.unknown')),
'ip' => $request->getIP(),
'redirect' => ''
];
$queueForMails
->setSubject($subject)
->setBody($body)
->setVariables($emailVariables)
->setRecipient($user->getAttribute('email'))
->trigger();
}
$response->dynamic($session, Response::MODEL_SESSION);
});
@@ -2538,7 +2610,8 @@ App::patch('/v1/account/sessions/:sessionId')
->inject('project')
->inject('locale')
->inject('queueForEvents')
->action(function (?string $sessionId, Request $request, Response $response, Document $user, Database $dbForProject, Document $project, Locale $locale, Event $queueForEvents) {
->inject('queueForMails')
->action(function (?string $sessionId, Request $request, Response $response, Document $user, Database $dbForProject, Document $project, Locale $locale, Event $queueForEvents, Mail $queueForMails) {
$authDuration = $project->getAttribute('auths', [])['duration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG;
$sessionId = ($sessionId === 'current')
? Auth::sessionVerify($user->getAttribute('sessions'), Auth::$secret, $authDuration)
@@ -2586,9 +2659,80 @@ App::patch('/v1/account/sessions/:sessionId')
$authDuration = $project->getAttribute('auths', [])['duration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG;
$queueForEvents
->setParam('userId', $user->getId())
->setParam('sessionId', $session->getId())
->setPayload($response->output($session, Response::MODEL_SESSION));
->setParam('userId', $user->getId())
->setParam('sessionId', $session->getId())
->setPayload($response->output($session, Response::MODEL_SESSION));
if ($project->getAttribute('auths', [])['notify'] ?? false && !empty($user->getAttribute('email', ''))) {
$body = $locale->getText("emails.authNotify.body");
$subject = $locale->getText("emails.authNotify.subject");
$message = Template::fromFile(__DIR__ . '/../../config/locale/templates/email-inner-base.tpl');
$message
->setParam('{{body}}', $body)
->setParam('{{hello}}', $locale->getText("emails.authNotify.hello"))
->setParam('{{footer}}', $locale->getText("emails.authNotify.footer"))
->setParam('{{thanks}}', $locale->getText("emails.authNotify.thanks"))
->setParam('{{signature}}', $locale->getText("emails.authNotify.signature"));
$body = $message->render();
$smtp = $project->getAttribute('smtp', []);
$smtpEnabled = $smtp['enabled'] ?? false;
$senderEmail = App::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM);
$senderName = App::getEnv('_APP_SYSTEM_EMAIL_NAME', APP_NAME . ' Server');
$replyTo = "";
if ($smtpEnabled) {
if (!empty($smtp['senderEmail'])) {
$senderEmail = $smtp['senderEmail'];
}
if (!empty($smtp['senderName'])) {
$senderName = $smtp['senderName'];
}
if (!empty($smtp['replyTo'])) {
$replyTo = $smtp['replyTo'];
}
$queueForMails
->setSmtpHost($smtp['host'] ?? '')
->setSmtpPort($smtp['port'] ?? '')
->setSmtpUsername($smtp['username'] ?? '')
->setSmtpPassword($smtp['password'] ?? '')
->setSmtpSecure($smtp['secure'] ?? '');
$queueForMails
->setSmtpReplyTo($replyTo)
->setSmtpSenderEmail($senderEmail)
->setSmtpSenderName($senderName);
}
$device = $detector->getDevice();
$sessionCreatedAt = $session->getCreatedAt();
$dateTime = new DateTimeImmutable($sessionCreatedAt);
$date = $dateTime->format('Y-m-d');
$time = $dateTime->format('H:i:s');
$emailVariables = [
'direction' => $locale->getText('settings.direction'),
'user' => $user->getAttribute('name'),
'project' => $project->getAttribute('name'),
'date' => $date,
'time' => $time,
'device' => $device['deviceBrand'] . " " . $device['deviceModel'] . " " . $device['deviceName'],
'country' => $locale->getText('countries.' . strtolower($session->getAttribute('countryCode')), $locale->getText('locale.country.unknown')),
'ip' => $request->getIP(),
'redirect' => ''
];
$queueForMails
->setSubject($subject)
->setBody($body)
->setVariables($emailVariables)
->setRecipient($user->getAttribute('email'))
->trigger();
}
return $response->dynamic($session, Response::MODEL_SESSION);
}