diff --git a/packages/analytics/package.json b/packages/analytics/package.json index 53eda5a..d035121 100644 --- a/packages/analytics/package.json +++ b/packages/analytics/package.json @@ -12,6 +12,7 @@ "dependencies": { "@linux-odyssey/models": "*", "express": "^4.18.2", + "express-basic-auth": "^1.2.1", "express-handlebars": "^7.1.2" }, "devDependencies": { diff --git a/packages/analytics/src/config.js b/packages/analytics/src/config.js index 00e1afd..a50eb7e 100644 --- a/packages/analytics/src/config.js +++ b/packages/analytics/src/config.js @@ -1,7 +1,16 @@ +function getOrFailed(key) { + if (!process.env[key]) { + throw new Error(`Missing required environment variable: ${key}`) + } + return process.env[key] +} + const config = { host: process.env.HOST || 'localhost', port: process.env.PORT || 3001, db: process.env.MONGO_URL || 'mongodb://localhost:27017/odyssey-test', + username: getOrFailed('USERNAME'), + password: getOrFailed('PASSWORD'), } config.baseUrl = process.env.BASE_URL || `http://${config.host}:${config.port}` diff --git a/packages/analytics/src/index.js b/packages/analytics/src/index.js index 6977ab0..581a28e 100644 --- a/packages/analytics/src/index.js +++ b/packages/analytics/src/index.js @@ -1,6 +1,7 @@ import connectDB from '@linux-odyssey/models' import express from 'express' import { engine } from 'express-handlebars' +import basicAuth from 'express-basic-auth' import config from './config.js' import router from './router.js' @@ -13,6 +14,13 @@ async function main() { app.set('view engine', 'handlebars') app.set('views', './views') + app.use( + basicAuth({ + users: { [config.username]: config.password }, + challenge: true, + realm: 'Linux Odyssey Admin Dashboard', + }) + ) app.use(router) app.use(express.static('./public')) diff --git a/yarn.lock b/yarn.lock index 19a6782..bd4e3ec 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1593,6 +1593,13 @@ base64url@3.x.x: resolved "https://registry.yarnpkg.com/base64url/-/base64url-3.0.1.tgz#6399d572e2bc3f90a9a8b22d5dbb0a32d33f788d" integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== +basic-auth@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" + integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== + dependencies: + safe-buffer "5.1.2" + bcrypt-pbkdf@^1.0.0, bcrypt-pbkdf@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" @@ -2850,6 +2857,13 @@ expect@^29.6.1: jest-message-util "^29.6.1" jest-util "^29.6.1" +express-basic-auth@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/express-basic-auth/-/express-basic-auth-1.2.1.tgz#d31241c03a915dd55db7e5285573049cfcc36381" + integrity sha512-L6YQ1wQ/mNjVLAmK3AG1RK6VkokA1BIY6wmiH304Xtt/cLTps40EusZsU1Uop+v9lTDPxdtzbFmdXfFO3KEnwA== + dependencies: + basic-auth "^2.0.1" + express-handlebars@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/express-handlebars/-/express-handlebars-7.1.2.tgz#2471673d11af46f496cba4098a705f0217232fda" @@ -5581,6 +5595,11 @@ rxjs@^7.5.1: dependencies: tslib "^2.1.0" +safe-buffer@5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"