diff --git a/.eslintrc.js b/.eslintrc.js index bf1e948..3a2a1c4 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,31 +1,31 @@ module.exports = { - 'env': { - 'browser': true, - 'commonjs': true, - 'es2021': true - }, - 'extends': 'eslint:recommended', - 'overrides': [ + 'env': { + 'browser': true, + 'commonjs': true, + 'es2021': true + }, + 'extends': 'eslint:recommended', + 'overrides': [ + ], + 'parserOptions': { + 'ecmaVersion': 'latest' + }, + 'rules': { + 'indent': [ + 'error', + 2 ], - 'parserOptions': { - 'ecmaVersion': 'latest' - }, - 'rules': { - 'indent': [ - 'error', - 4 - ], - 'linebreak-style': [ - 'error', - 'unix' - ], - 'quotes': [ - 'error', - 'single' - ], - 'semi': [ - 'error', - 'never' - ] - } + 'linebreak-style': [ + 'error', + 'unix' + ], + 'quotes': [ + 'error', + 'single' + ], + 'semi': [ + 'error', + 'never' + ] + } } diff --git a/src/configs/version.configs.js b/src/configs/version.configs.js index e8e12a5..71fef60 100644 --- a/src/configs/version.configs.js +++ b/src/configs/version.configs.js @@ -1,6 +1,6 @@ const version = { - api: ["/api/v1/",], - app: "2.0.0-dev" -}; + api: ['/api/v1/',], + app: '2.0.0-dev' +} -module.exports = version; \ No newline at end of file +module.exports = version \ No newline at end of file diff --git a/src/services/dbAccess.services.js b/src/services/dbAccess.services.js index 8b85c27..68f57d0 100644 --- a/src/services/dbAccess.services.js +++ b/src/services/dbAccess.services.js @@ -1,82 +1,87 @@ -const log = require('../utils/log.utils'); // Log Helper +const log = require('../utils/log.utils') // Log Helper -const dbUser = process.env.OWL_DB_USER || "owl" -const dbPass = process.env.OWL_DB_PASS || "twittwoo" -const dbName = process.env.OWL_DB_NAME || "owlboard" +// eslint-disable-next-line no-undef +const dbUser = process.env.OWL_DB_USER || 'owl' +// eslint-disable-next-line no-undef +const dbPass = process.env.OWL_DB_PASS || 'twittwoo' +// eslint-disable-next-line no-undef +const dbName = process.env.OWL_DB_NAME || 'owlboard' +// eslint-disable-next-line no-undef const dbPort = process.env.OWL_DB_PORT || 27017 -const dbHost = process.env.OWL_DB_HOST || "localhost" -const uri = `mongodb://${dbUser}:${dbPass}@${dbHost}:${dbPort}`; +// eslint-disable-next-line no-undef +const dbHost = process.env.OWL_DB_HOST || 'localhost' +const uri = `mongodb://${dbUser}:${dbPass}@${dbHost}:${dbPort}` -const { MongoClient } = require('mongodb'); +const { MongoClient } = require('mongodb') -const client = new MongoClient(uri); -const db = client.db(dbName); +const client = new MongoClient(uri) +const db = client.db(dbName) async function query(collection, query){ - await client.connect(); - log.out(`dbAccess.query: Connecting to collection: '${collection}'`, "info") - var qcoll = db.collection(collection); - var qcursor = qcoll.find(query) - qcursor.project({_id: 0}) - log.out(`dbAccess.query: Running Query: ${JSON.stringify(query)}`, "info") - increment(collection) - return (await qcursor.toArray()); + await client.connect() + log.out(`dbAccess.query: Connecting to collection: '${collection}'`, 'info') + var qcoll = db.collection(collection) + var qcursor = qcoll.find(query) + qcursor.project({_id: 0}) + log.out(`dbAccess.query: Running Query: ${JSON.stringify(query)}`, 'info') + increment(collection) + return (await qcursor.toArray()) } async function increment(target) { - log.out(`dbAccess.increment: Incrementing counter for: ${target}`, "info") - await client.connect(); - let col = db.collection("meta"); - let update = {} - update[target] = 1 - col.updateOne({target: "counters"}, {$inc:update}) + log.out(`dbAccess.increment: Incrementing counter for: ${target}`, 'info') + await client.connect() + let col = db.collection('meta') + let update = {} + update[target] = 1 + col.updateOne({target: 'counters'}, {$inc:update}) } async function addUser(uuid, domain) { // Needs testing - log.out(`dbAccess.addUser: Adding user to database`) - let doc = {uuid: uuid, domain: domain, atime: new Date} - await client.connect(); - let col = db.collection("users"); - res = await col.insertOne(doc); - if (res.insertedId) { - return true - } - return false + log.out('dbAccess.addUser: Adding user to database') + let doc = {uuid: uuid, domain: domain, atime: new Date} + await client.connect() + let col = db.collection('users') + let res = await col.insertOne(doc) + if (res.insertedId) { + return true + } + return false } async function addRegReq(uuid, domain) { // Needs testing - log.out(`dbAccess.addRegReq: Adding registration request`) - let doc = {uuid: uuid, time: new Date, domain: domain} - await client.connect(); - let col = db.collection("registrations"); - res = col.insertOne(doc); - return res; + log.out('dbAccess.addRegReq: Adding registration request') + let doc = {uuid: uuid, time: new Date, domain: domain} + await client.connect() + let col = db.collection('registrations') + let res = col.insertOne(doc) + return res } async function userAtime(uuid) { // Needs testing - log.out(`dbAccess.userAtime: Updating access time for user`); - let q = {uuid: uuid}; - let n = {$set: {uuid: uuid, atime: new Date}}; - await client.connect(); - let col = db.collection("users"); - res = col.updateOne(q, n, {upsert: true}) - return res; + log.out('dbAccess.userAtime: Updating access time for user') + let q = {uuid: uuid} + let n = {$set: {uuid: uuid, atime: new Date}} + await client.connect() + let col = db.collection('users') + let res = col.updateOne(q, n, {upsert: true}) + return res } // Deletes one single registration request entry from the DB async function delRegReq(uuid) { - log.out(`dbAccess.delRegReq: Deleting a Registration Request`) - collection = "registrations" - await client.connect() - let col = db.collection(collection) - col.deleteOne({uuid: uuid}) + log.out('dbAccess.delRegReq: Deleting a Registration Request') + let collection = 'registrations' + await client.connect() + let col = db.collection(collection) + col.deleteOne({uuid: uuid}) } module.exports = { - query, - increment, // Probqbly doesn't need exporting? - addUser, - userAtime, - addRegReq, - delRegReq + query, + increment, // Probqbly doesn't need exporting? + addUser, + userAtime, + addRegReq, + delRegReq } \ No newline at end of file diff --git a/src/services/pis.services.js b/src/services/pis.services.js index f72050f..d8d5649 100644 --- a/src/services/pis.services.js +++ b/src/services/pis.services.js @@ -5,30 +5,30 @@ const log = require('../utils/log.utils') const clean = require('../utils/sanitizer.utils') async function findPisByOrigDest(start,end) { - log.out(`pisServices.findPisByOrigDest: Searching for PIS for Orig: ${start}, Dest: ${end}`, 'dbug') - const firstCrs = clean.cleanApiEndpointTxt(start.toLowerCase()) - const lastCrs = clean.cleanApiEndpointTxt(end.toLowerCase()) - const query = { - stops: { - $all: [ - { $elemMatch: { $eq: firstCrs } }, - { $elemMatch: { $eq: lastCrs } } - ] - }, - $expr: { - $and: [ - { $eq: [{ $arrayElemAt: [ '$stops', -1 ] }, lastCrs] }, - { $eq: [{ $arrayElemAt: [ '$stops', 0 ] }, firstCrs] } - ] - } + log.out(`pisServices.findPisByOrigDest: Searching for PIS for Orig: ${start}, Dest: ${end}`, 'dbug') + const firstCrs = clean.cleanApiEndpointTxt(start.toLowerCase()) + const lastCrs = clean.cleanApiEndpointTxt(end.toLowerCase()) + const query = { + stops: { + $all: [ + { $elemMatch: { $eq: firstCrs } }, + { $elemMatch: { $eq: lastCrs } } + ] + }, + $expr: { + $and: [ + { $eq: [{ $arrayElemAt: [ '$stops', -1 ] }, lastCrs] }, + { $eq: [{ $arrayElemAt: [ '$stops', 0 ] }, firstCrs] } + ] } - //const oldQuery = {$and:[{$expr:{$eq:[{$first:"$stops"},firstCrs]}},{$expr:{$eq:[{$last:"$stops"},lastCrs]}}]} - const search = db.query('pis', query) - return search + } + //const oldQuery = {$and:[{$expr:{$eq:[{$first:"$stops"},firstCrs]}},{$expr:{$eq:[{$last:"$stops"},lastCrs]}}]} + const search = db.query('pis', query) + return search } // Hopefully at some point, I will also be able to implement a find PIS code by headcode option. module.exports = { - findPisByOrigDest + findPisByOrigDest } \ No newline at end of file diff --git a/src/services/stats.services.js b/src/services/stats.services.js index 7893714..14d1ab5 100644 --- a/src/services/stats.services.js +++ b/src/services/stats.services.js @@ -1,24 +1,25 @@ -const log = require('../utils/log.utils'); // Log Helper +const log = require('../utils/log.utils') // Log Helper const db = require('../services/dbAccess.services') const os = require('os') const vers = require('../configs/version.configs') async function hits(){ - log.out("statsServices.hits: Statistics Requested", "info") - var dat = db.query("meta", {target: "counters"}); - var ver = db.query("meta", {target: "versions"}); - log.out(`statsServices.hits: fetched server meta`, "info") - let out = {}; - out.host = os.hostname(); - out.mode = process.env.NODE_ENV; - out.verBkend = vers.app; - out.verApi = vers.api; - out.dat = await dat; - out.ver = await ver; - log.out(`statsServices.hits: Sending Data: ${JSON.stringify(out)}`, "info") - return out; + log.out('statsServices.hits: Statistics Requested', 'info') + var dat = db.query('meta', {target: 'counters'}) + var ver = db.query('meta', {target: 'versions'}) + log.out('statsServices.hits: fetched server meta', 'info') + let out = {} + out.host = os.hostname() + // eslint-disable-next-line no-undef + out.mode = process.env.NODE_ENV + out.verBkend = vers.app + out.verApi = vers.api + out.dat = await dat + out.ver = await ver + log.out(`statsServices.hits: Sending Data: ${JSON.stringify(out)}`, 'info') + return out } module.exports = { - hits + hits } \ No newline at end of file diff --git a/src/utils/auth.utils.js b/src/utils/auth.utils.js index a4bd442..b3c50c1 100644 --- a/src/utils/auth.utils.js +++ b/src/utils/auth.utils.js @@ -1,60 +1,60 @@ -const log = require('../utils/log.utils'); +const log = require('../utils/log.utils') const crypto = require('crypto') -const db = require('../services/dbAccess.services'); +const db = require('../services/dbAccess.services') const fs = require('fs/promises') -const minify = require('html-minifier').minify; +const minify = require('html-minifier').minify // Checks users registration key against issued keys async function isAuthed(uuid) { // Needs testing - 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 + 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 } // Checks whether a registration request key is valid async function checkRequest(key) { - 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; + 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 } // Creates an API key for a user async function generateKey() { // Needs testing & moving to 'register.utils' - return crypto.randomUUID() -}; + return crypto.randomUUID() +} async function generateConfirmationEmail(eml, uuid) { - try { - let htmlTpl = await fs.readFile('mail-templates/register.html', 'utf-8'); - let mini = minify(((htmlTpl).replace(/>>ACCESSCODE<>ACCESSCODE<>ACCESSCODE<>ACCESSCODE<