24 lines
649 B
TypeScript
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;
|
|
}
|