Skip to content

Commit d941b2e

Browse files
committed
fix(auth): new device email not sent after verify success
1 parent 4fbd61f commit d941b2e

2 files changed

Lines changed: 61 additions & 0 deletions

File tree

packages/fxa-auth-server/lib/routes/session.js

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,35 @@ module.exports = function (
512512
glean.login.verifyCodeConfirmed(request, { uid });
513513
await signinUtils.cleanupReminders({ verified: true }, account);
514514
await push.notifyAccountUpdated(uid, devices, 'accountConfirm');
515+
516+
// Send new device login notification email after successful verification
517+
const geoData = request.app.geo;
518+
const service = options.service || request.query.service;
519+
const emailOptions = {
520+
acceptLanguage: request.app.acceptLanguage,
521+
ip: request.app.clientAddress,
522+
location: geoData.location,
523+
service,
524+
timeZone: geoData.timeZone,
525+
uaBrowser: sessionToken.uaBrowser,
526+
uaBrowserVersion: sessionToken.uaBrowserVersion,
527+
uaOS: sessionToken.uaOS,
528+
uaOSVersion: sessionToken.uaOSVersion,
529+
uaDeviceType: sessionToken.uaDeviceType,
530+
uid,
531+
};
532+
533+
try {
534+
await mailer.sendNewDeviceLoginEmail(
535+
account.emails,
536+
account,
537+
emailOptions
538+
);
539+
} catch (err) {
540+
log.trace('Session.verify_code.sendNewDeviceLoginEmail.error', {
541+
error: err,
542+
});
543+
}
515544
}
516545

517546
return {};
@@ -794,6 +823,37 @@ module.exports = function (
794823
const devices = await db.devices(uid);
795824
await push.notifyAccountUpdated(uid, devices, 'accountConfirm');
796825

826+
// Send new device login notification email after successful verification
827+
if (account.primaryEmail.isVerified) {
828+
const geoData = request.app.geo;
829+
const service = request.query.service;
830+
const emailOptions = {
831+
acceptLanguage: request.app.acceptLanguage,
832+
ip: request.app.clientAddress,
833+
location: geoData.location,
834+
service,
835+
timeZone: geoData.timeZone,
836+
uaBrowser: sessionToken.uaBrowser,
837+
uaBrowserVersion: sessionToken.uaBrowserVersion,
838+
uaOS: sessionToken.uaOS,
839+
uaOSVersion: sessionToken.uaOSVersion,
840+
uaDeviceType: sessionToken.uaDeviceType,
841+
uid,
842+
};
843+
844+
try {
845+
await mailer.sendNewDeviceLoginEmail(
846+
account.emails,
847+
account,
848+
emailOptions
849+
);
850+
} catch (err) {
851+
log.trace('Session.verify_push.sendNewDeviceLoginEmail.error', {
852+
error: err,
853+
});
854+
}
855+
}
856+
797857
return {};
798858
},
799859
},

packages/fxa-auth-server/test/local/routes/session.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1584,6 +1584,7 @@ describe('/session/verify_code', () => {
15841584
assert.equal(args[0], 'account.confirmed');
15851585
assert.equal(args[1].uid, signupCodeAccount.uid);
15861586
sinon.assert.calledOnce(gleanMock.login.verifyCodeConfirmed);
1587+
assert.calledOnce(mailer.sendNewDeviceLoginEmail);
15871588
});
15881589

15891590
it('should fail for invalid code', async () => {

0 commit comments

Comments
 (0)