43 lines
1.1 KiB
TypeScript
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() |