backend/src/utils/auth.utils.ts
Fred Boniface 51bae70d6c Run prettier
Signed-off-by: Fred Boniface <fred@fjla.uk>
2023-09-27 20:49:21 +01:00

70 lines
2.1 KiB
TypeScript

const crypt = require("crypto");
const db = require("../services/dbAccess.services");
const fs = require("fs/promises");
import { minifyMail } from "./minify.utils";
import { logger } from "./logger.utils";
// Checks users registration key against issued keys
async function isAuthed(uuid: string): Promise<boolean> {
// Needs testing
const q = {
uuid: uuid,
};
const res = await db.query("users", q);
logger.debug(res, "checkUser: DB Query Result");
const authorized = res && res[0] && res[0].domain;
if (authorized) db.userAtime(uuid);
return authorized;
}
// Checks whether a registration request key is valid
async function checkRequest(key: string) {
// For some reason db.query seems to return correctly, but the second logs.out statement prints []??? so registration fails!!
const collection = "registrations";
const query = { uuid: key };
const res = await db.query(collection, query);
logger.debug(res, "checkRequest: DB Lookup result");
const result =
res.length > 0 && res[0].time
? { result: true, domain: res[0].domain }
: { result: false };
return result;
}
// Creates an API key for a user
async function generateKey() {
// Needs testing & moving to 'register.utils' ??? Why does it need moving?
return crypt.randomUUID();
}
async function generateConfirmationEmail(eml: string, uuid: string) {
try {
const htmlTpl = await fs.readFile("mail-templates/register.html", "utf-8");
const htmlStr = htmlTpl.replace(/>>ACCESSCODE<</g, uuid);
const htmlMin = await minifyMail(htmlStr);
const txtTpl = fs.readFile("mail-templates/register.txt", "utf-8");
return {
to: eml,
subject: "OwlBoard Registration",
text: (await txtTpl).replace(/>>ACCESSCODE<</g, uuid),
html: htmlMin,
};
} catch (err) {
logger.error(
err,
"generateConfirmationEmail: Error rendering email templates"
);
return false;
}
}
module.exports = {
isAuthed,
generateKey,
generateConfirmationEmail,
checkRequest,
};
export { isAuthed, generateKey, generateConfirmationEmail, checkRequest };