totpauth-model/spec/tokenMan.spec.ts

43 lines
1.1 KiB
TypeScript

import * as tokenMan from "../src/tokenMan";
import Jimp from "jimp";
import QrCode from "qrcode-reader";
import speakeasy from "speakeasy";
async function test(){
const user = await tokenMan.initUser({
name:"Phillip Thern",
email: "phillip.nicholas@thern.wtf"
})
const otpURI = tokenMan.otpauthURI(user)
const qrpngdata = tokenMan.generateQR(otpURI, (result: Buffer)=>{
return result
})
Jimp.read(qrpngdata, (err, img)=>{
if(err){
throw err;
}
//console.log(img)
const qr = new QrCode()
qr.callback = (err: Error, data: {result: string})=>{
if(err){
throw err;
}
const token = speakeasy.totp({
secret: new URLSearchParams(data.result.split("?")[1]).get("secret")!,
encoding: "base32"
})
console.log(speakeasy.totp.verify({
secret: user.secret,
encoding: "base32",
token
})?"token is valid":"token is invalid")
}
qr.decode(img.bitmap)
})
}
test()