2fab64
v1.0.1
Published
A Secure Auth Package For APIS 2FAbcrypt64
Downloads
10
Readme
2FAB64
2FAB is a secure auth token generator Source code:
const { Database } = require("bun:sqlite");
const db = new Database();
const inMemoryStore = db.query(`
CREATE TABLE IF NOT EXISTS tokenStore (
token TEXT,
uses INTEGER,
usesLimit INTEGER, -- Make sure this column exists to match your INSERT statement
date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
`).run()
const deleteToken = db.query("DELETE FROM tokenStore WHERE token = $token");
function randomString(length) {
let result = '';
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
const charactersLength = characters.length;
let counter = 0;
while (counter < length) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
counter += 1;
}
return result;
}
async function generateSecureToken(cost, stringLength, uses) {
const token = await Bun.password.hash(randomString(stringLength), {
algorithm: "bcrypt",
cost: cost,
});
db.query("INSERT INTO tokenStore (token, uses, usesLimit) VALUES ($token, $uses, $usesLimit)")
.run({ $token: token, $uses: 0, $usesLimit: uses });
return await token
}
async function validateSecureToken(token) {
if (!inMemoryStore.get({ $token: token })) {
const findTokenData = inMemoryStore.get({ $token: token });
if (findTokenData.uses > findTokenData.usesLimit || findTokenData == findTokenData.usesLimit) {
return false
}
return false
}
return true
}
async function destroySecureToken(token) {
// Query to check if the token exists
const tokenExistsQuery = db.query("SELECT * FROM tokenStore WHERE token = $token");
// Execute the query with the given token
const tokenData = await tokenExistsQuery.get({ $token: token });
if (!tokenData) {
console.error("Token does not exist");
return;
}
// If the token exists, delete it
deleteToken.run({ $token: token });
console.log("Token destroyed");
}
module.exports = { destroySecureToken, validateSecureToken, generateSecureToken }