mirror of
https://github.com/documenso/documenso.git
synced 2025-11-13 16:23:06 +10:00
This PR is handles the changes required to support envelopes. The new envelope editor/signing page will be hidden during release. The core changes here is to migrate the documents and templates model to a centralized envelopes model. Even though Documents and Templates are removed, from the user perspective they will still exist as we remap envelopes to documents and templates.
38 lines
800 B
TypeScript
38 lines
800 B
TypeScript
import { generateHOTP } from 'oslo/otp';
|
|
|
|
import { generateTwoFactorCredentialsFromEmail } from './generate-2fa-credentials-from-email';
|
|
|
|
export type ValidateTwoFactorTokenFromEmailOptions = {
|
|
envelopeId: string;
|
|
email: string;
|
|
code: string;
|
|
period?: number;
|
|
window?: number;
|
|
};
|
|
|
|
export const validateTwoFactorTokenFromEmail = async ({
|
|
envelopeId,
|
|
email,
|
|
code,
|
|
period = 30_000,
|
|
window = 1,
|
|
}: ValidateTwoFactorTokenFromEmailOptions) => {
|
|
const { secret } = generateTwoFactorCredentialsFromEmail({ email, envelopeId });
|
|
|
|
let now = Date.now();
|
|
|
|
for (let i = 0; i < window; i++) {
|
|
const counter = Math.floor(now / period);
|
|
|
|
const hotp = await generateHOTP(secret, counter);
|
|
|
|
if (code === hotp) {
|
|
return true;
|
|
}
|
|
|
|
now -= period;
|
|
}
|
|
|
|
return false;
|
|
};
|