Send the right error when asking for a new code

This commit is contained in:
Maxime Lalo 2023-11-29 16:52:24 +01:00
parent 9dc1049ce7
commit b931e98c29
2 changed files with 10 additions and 3 deletions

View File

@ -8,6 +8,7 @@ import CustomersService, {
NotRegisteredCustomerError,
PasswordAlreadySetError,
SmsNotExpiredError,
TooSoonForNewCode,
TotpCodeExpiredError,
} from "@Services/customer/CustomersService/CustomersService";
import AuthService from "@Services/common/AuthService/AuthService";
@ -219,7 +220,7 @@ export default class AuthController extends ApiController {
}
this.httpSuccess(response, { partialPhoneNumber: customer.contact?.cell_phone_number.replace(/\s/g, "").slice(-4) });
} catch (error) {
if (error instanceof InvalidTotpCodeError || error instanceof TotpCodeExpiredError) {
if (error instanceof TooSoonForNewCode || error instanceof TotpCodeExpiredError) {
this.httpUnauthorized(response, error.message);
return;
}

View File

@ -42,6 +42,12 @@ export class PasswordAlreadySetError extends Error {
super("Password already set");
}
}
export class TooSoonForNewCode extends Error {
constructor() {
super("You need to wait at least 30 seconds before asking for a new code");
}
}
@Service()
export default class CustomersService extends BaseService {
constructor(
@ -258,10 +264,10 @@ export default class CustomersService extends BaseService {
const lastCode = customerHydrated.totpCodes?.find((totpCode) => {
return totpCode.expire_at && totpCode.expire_at.getTime() > now;
});
if (!lastCode) throw new SmsNotExpiredError();
if (!lastCode) throw new TotpCodeExpiredError();
// 3: Check if it was created more than 30 seconds ago
if (lastCode.created_at && lastCode.created_at.getTime() > now - 30000) throw new SmsNotExpiredError();
if (lastCode.created_at && lastCode.created_at.getTime() > now - 30000) throw new TooSoonForNewCode();
// 4: Generate a new SMS code
const totpPin = this.generateTotp();