2023-04-30 22:07:36 +01:00
|
|
|
const log = require('../utils/log.utils')
|
2023-04-04 21:28:46 +01:00
|
|
|
const crypto = require('crypto')
|
2023-04-30 22:07:36 +01:00
|
|
|
const db = require('../services/dbAccess.services')
|
2023-04-05 11:27:01 +01:00
|
|
|
const fs = require('fs/promises')
|
2023-04-30 22:07:36 +01:00
|
|
|
const minify = require('html-minifier').minify
|
2023-04-04 21:28:46 +01:00
|
|
|
|
|
|
|
// Checks users registration key against issued keys
|
2023-04-06 19:42:47 +01:00
|
|
|
async function isAuthed(uuid) { // Needs testing
|
2023-04-30 22:07:36 +01:00
|
|
|
const q = {uuid: uuid}
|
|
|
|
const res = await db.query('users', q)
|
|
|
|
log.out(`authUtils.checkUser: DB Query answer: ${JSON.stringify(res[0])}`, 'dbug')
|
|
|
|
const authorized = res && res[0] && res[0].domain
|
|
|
|
if (authorized) db.userAtime(uuid)
|
|
|
|
return authorized
|
2023-04-06 19:42:47 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// Checks whether a registration request key is valid
|
|
|
|
async function checkRequest(key) {
|
2023-04-30 22:07:36 +01:00
|
|
|
const collection = 'registrations'
|
|
|
|
const query = {uuid: key}
|
|
|
|
const res = await db.query(collection, query)
|
|
|
|
log.out(`authUtils.checkRequest: DB Query result: ${JSON.stringify(res)}`, 'dbug')
|
|
|
|
const result = res.length > 0 && res[0].time
|
|
|
|
? { result: true, domain: res[0].domain }
|
|
|
|
: { result: false }
|
|
|
|
return result
|
2023-04-04 21:28:46 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// Creates an API key for a user
|
2023-04-05 01:09:50 +01:00
|
|
|
async function generateKey() { // Needs testing & moving to 'register.utils'
|
2023-04-30 22:07:36 +01:00
|
|
|
return crypto.randomUUID()
|
|
|
|
}
|
2023-04-04 21:28:46 +01:00
|
|
|
|
2023-04-05 11:27:01 +01:00
|
|
|
async function generateConfirmationEmail(eml, uuid) {
|
2023-04-30 22:07:36 +01:00
|
|
|
try {
|
|
|
|
let htmlTpl = await fs.readFile('mail-templates/register.html', 'utf-8')
|
|
|
|
let mini = minify(((htmlTpl).replace(/>>ACCESSCODE<</g, uuid)), { // Add collapse whitespace here
|
|
|
|
removeComments: true,
|
|
|
|
collapseWhitespace: true,
|
|
|
|
minifyCSS: true
|
|
|
|
})
|
|
|
|
let txtTpl = fs.readFile('mail-templates/register.txt', 'utf-8')
|
|
|
|
return { // CSS Needs to be inlined. See css-inline, or css-inliner
|
|
|
|
to: eml,
|
|
|
|
subject: 'OwlBoard Registration',
|
|
|
|
text: (await txtTpl).replace(/>>ACCESSCODE<</g, uuid),
|
|
|
|
html: mini
|
2023-04-05 11:27:01 +01:00
|
|
|
}
|
2023-04-30 22:07:36 +01:00
|
|
|
} catch(err) {
|
|
|
|
log.out('mailServices.generateConfirmationEmail: Error reading templates, $(err)', 'err')
|
|
|
|
return false
|
|
|
|
}
|
2023-04-05 11:27:01 +01:00
|
|
|
}
|
|
|
|
|
2023-04-05 00:58:48 +01:00
|
|
|
module.exports = {
|
2023-04-30 22:07:36 +01:00
|
|
|
isAuthed,
|
|
|
|
generateKey,
|
|
|
|
generateConfirmationEmail,
|
|
|
|
checkRequest
|
2023-04-04 21:28:46 +01:00
|
|
|
}
|