Files
umami/src/lib/two-factor/totp.ts
T

24 lines
649 B
TypeScript

import { generateSecret, generateURI, verify } from 'otplib';
import qrcode from 'qrcode';
export function generateTotpSecret(): string {
return generateSecret();
}
export function generateOtpAuthUri(secret: string, username: string): string {
return generateURI({
issuer: 'Umami',
label: username,
secret,
});
}
export async function generateQrCodeDataUrl(otpAuthUri: string): Promise<string> {
return qrcode.toDataURL(otpAuthUri, { errorCorrectionLevel: 'H' });
}
export async function verifyTotp(token: string, secret: string): Promise<boolean> {
const result = await verify({ secret, token });
return result.valid;
}