|
|
|
|
|
|
65
|
if (existing && existing.active === 0) return json(res, 403, { error: 'This account has been deactivated' });
|
65
|
if (existing && existing.active === 0) return json(res, 403, { error: 'This account has been deactivated' });
|
|
66
|
|
66
|
|
|
67
|
let u = (existing && A.verifyPassword(password, existing.pw_salt, existing.pw_hash)) ? existing : null;
|
67
|
let u = (existing && A.verifyPassword(password, existing.pw_salt, existing.pw_hash)) ? existing : null;
|
|
|
|
68
|
+ let bzMsg = null;
|
|
68
|
if (!u) {
|
69
|
if (!u) {
|
|
69
|
const bz = await BZ.validateLogin(email, password);
|
70
|
const bz = await BZ.validateLogin(email, password);
|
|
70
|
if (bz.ok) u = provisionFromBizgaze(email, bz);
|
71
|
if (bz.ok) u = provisionFromBizgaze(email, bz);
|
|
71
|
else if (bz.error) return json(res, 503, { error: bz.error });
|
72
|
else if (bz.error) return json(res, 503, { error: bz.error });
|
|
|
|
73
|
+ else bzMsg = bz.message || null; // BizGaze was configured and rejected the credentials
|
|
|
|
74
|
+ }
|
|
|
|
75
|
+ if (!u) {
|
|
|
|
76
|
+ // Specific feedback where we can be truthful:
|
|
|
|
77
|
+ if (existing) return json(res, 401, { error: 'Incorrect password. Please try again.' });
|
|
|
|
78
|
+ // No local account. BizGaze (the identity provider) doesn't reveal whether an email
|
|
|
|
79
|
+ // exists, so when it rejects we surface its own message (covers wrong password +
|
|
|
|
80
|
+ // any lockout warning). Only when BizGaze isn't in play can we say "not registered".
|
|
|
|
81
|
+ if (bzMsg) return json(res, 401, { error: bzMsg });
|
|
|
|
82
|
+ return json(res, 404, { error: 'This email is not registered.' });
|
|
72
|
}
|
83
|
}
|
|
73
|
- if (!u) return json(res, 401, { error: 'invalid credentials' });
|
|
|
|
74
|
|
84
|
|
|
75
|
const tok = A.token();
|
85
|
const tok = A.token();
|
|
76
|
const ttl = remember ? 1000 * 60 * 60 * 24 * 30 : SESSION_TTL; // 30 days if remembered, else 24h
|
86
|
const ttl = remember ? 1000 * 60 * 60 * 24 * 30 : SESSION_TTL; // 30 days if remembered, else 24h
|