diff --git a/createConfig.js b/createConfig.js deleted file mode 100644 index d17fb47..0000000 --- a/createConfig.js +++ /dev/null @@ -1,12 +0,0 @@ -const fs = require('fs'); -const path = require("path"); - -const pathToFile = path.join(__dirname, "sampleConfig.js") -const pathToNewDestination = path.join(__dirname, "config", "config.js") - -try { - fs.copyFileSync(pathToFile, pathToNewDestination) - console.log("Successfully copied and moved config file!") -} catch(err) { - throw err -} \ No newline at end of file diff --git a/own_modules/configManager.mjs b/own_modules/configManager.mjs new file mode 100644 index 0000000..6a7f862 --- /dev/null +++ b/own_modules/configManager.mjs @@ -0,0 +1,82 @@ +export default class ConfigManager{ + + constructor(){} + + init(){ + console.log("[CONFIG] Reading config environment variables.") + + // Initialize mqtt url + var mqttUrlEnv = process.env.MQTT_URL; + if(mqttUrlEnv){ + this.mqttUrl = mqttUrlEnv; + console.log("[CONFIG] MQTT_URL set to ["+mqttUrlEnv+"].") + }else{ + this.mqttUrl = "mqtt://localhost:1883" + console.log("[CONFIG] MQTT_URL set to default [mqtt://localhost].") + } + + // Initialize auth token + var mqttAuthTokenEnv = process.env.MQTT_AUTH_TOKEN + if(mqttAuthTokenEnv){ + this.mqttAuthToken = mqttAuthTokenEnv; + console.log("[CONFIG] MQTT_AUTH_TOKEN set to ["+mqttAuthTokenEnv+"].") + }else{ + this.mqttAuthToken = "skl20g67bm1"; + console.log("[CONFIG] MQTT_AUTH_TOKEN set to default value [skl20g67bm1]."); + } + + // Initialize mqtt options + this.mqttOptions = { + keepalive: 60, + reconnectPeriod: 1000, + protocolVersion: 3, + protocolId: 'MQIsdp', + clean: true, + encoding: 'utf8' + } + + // Initialize mqtt clientId + var mqttClientIdEnv = process.env.MQTT_CLIENTID + if(mqttClientIdEnv){ + this.mqttOptions.clientId = mqttClientIdEnv + console.log("[CONFIG] MQTT_CLIENTID read and set to ["+mqttClientIdEnv+"].") + }else{ + this.mqttOptions.clientId = "advancedMqttBridge" + console.log("[CONFIG] MQTT_CLIENTID set to default [advancedMqttBridge].") + } + + // Initialize mqtt username + var mqttUsernameEnv = process.env.MQTT_USERNAME + if(mqttUsernameEnv){ + this.mqttOptions.username = mqttUsernameEnv + console.log("[CONFIG] MQTT_USERNAME read and set to ["+mqttUsernameEnv+"].") + }else{ + this.mqttOptions.username = "advancedMqttBridge" + console.log("[CONFIG] MQTT_USERNAME set to default [advancedMqttBridge].") + } + + // Initialize mqtt password + var mqttPasswordEnv = process.env.MQTT_PASSWORD + if(mqttPasswordEnv){ + this.mqttOptions.password = mqttPasswordEnv + console.log("[CONFIG] MQTT_PASSWORD read and set to ["+mqttPasswordEnv+"].") + }else{ + this.mqttOptions.password = "mqttPassword#123" + console.log("[CONFIG] MQTT_PASSWORD set to default [mqttPassword#123].") + } + } + + getMqttAuthToken(){ + return this.mqttAuthToken; + } + + getMqttUrl(){ + return this.mqttUrl; + } + + getMqttOptions(){ + return this.mqttOptions; + } + +} + diff --git a/own_modules/mqttManager.mjs b/own_modules/mqttManager.mjs index 39e5951..dcadb4f 100644 --- a/own_modules/mqttManager.mjs +++ b/own_modules/mqttManager.mjs @@ -1,16 +1,15 @@ import mqtt from 'mqtt' -import config from '../config/config.js' import request from 'request'; export default class MqttManager{ constructor(){} - init(){ + init(mqttUrl, mqttOptions){ this.messageHandlers = [] - this.client = mqtt.connect(config.mqtt.url, config.mqtt.options) - console.log("[MQTT] Connected to MQTT broker ["+config.mqtt.url+"]."); + this.client = mqtt.connect(mqttUrl, mqttOptions) + console.log("[MQTT] Connected to MQTT broker ["+mqttUrl+"]."); this.ready = true this.client.on('message', (topic, message) => { diff --git a/own_modules/sqliteManager.mjs b/own_modules/sqliteManager.mjs index 8a30d9c..4e26815 100644 --- a/own_modules/sqliteManager.mjs +++ b/own_modules/sqliteManager.mjs @@ -1,7 +1,6 @@ import sqlite3 from'sqlite3' import { open } from 'sqlite' - /** * Manager for handling the sqlite database */ @@ -13,14 +12,18 @@ export default class SqliteManager{ sqlite3.verbose() await open({filename: './database/loginbase.db', driver: sqlite3.Database}).then( (db) => { - console.log('[SQLITE] Connected to the loginbase database.'); - db.run("CREATE TABLE IF NOT EXISTS users (email TEXT PRIMARY KEY, password TEXT)"); - console.log('[SQLITE] Created users table if it didnt exist.'); - db.run("CREATE TABLE IF NOT EXISTS handlers (topic TEXT, message TEXT, requestUrl TEXT)"); - console.log('[SQLITE] Created handlers table if it didnt exist.'); this.database = db this.ready = true - }) + console.log('[SQLITE] Connected to the loginbase database.'); + } + ) + await this.database.run("CREATE TABLE IF NOT EXISTS users (email TEXT PRIMARY KEY, password TEXT)"); + console.log('[SQLITE] Created users table if it didnt exist.'); + await this.database.run("CREATE TABLE IF NOT EXISTS handlers (topic TEXT, message TEXT, requestUrl TEXT)"); + console.log('[SQLITE] Created handlers table if it didnt exist.'); + + + } async getUser(email){ diff --git a/package-lock.json b/package-lock.json index 4b39b22..363b950 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,6 +5,7 @@ "requires": true, "packages": { "": { + "name": "loginbase", "version": "1.0.0", "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index adf78f6..a1446c7 100644 --- a/package.json +++ b/package.json @@ -13,8 +13,7 @@ "description": "Login base project", "main": "server.mjs", "scripts": { - "start": "node server.mjs", - "create_config": "node createConfig.js" + "start": "node server.mjs" }, "repository": { "type": "git", diff --git a/sampleConfig.js b/sampleConfig.js deleted file mode 100644 index b9b32a0..0000000 --- a/sampleConfig.js +++ /dev/null @@ -1,21 +0,0 @@ -var config = {} - -config.mqtt = {} -config.sqlite = {} - -config.mqtt.options = { - clientId: 'mqttclientid', - username: 'mqttusername', - password: 'mqttpassword', - keepalive: 60, - reconnectPeriod: 1000, - protocolVersion: 3, - protocolId: 'MQIsdp', - clean: true, - encoding: 'utf8' -}; -config.mqtt.url = 'mqtt://MQTTURL' - -config.auth = "random auth token" - -module.exports = config \ No newline at end of file diff --git a/server.mjs b/server.mjs index d8eb733..e37ca72 100644 --- a/server.mjs +++ b/server.mjs @@ -6,9 +6,9 @@ import path from 'path' import { dirname } from 'path'; import { fileURLToPath } from 'url'; import crypto from "crypto"; -import config from './config/config.js' import SqliteManager from "./own_modules/sqliteManager.mjs" import MqttManager from "./own_modules/mqttManager.mjs" +import ConfigManager from "./own_modules/configManager.mjs" // Setup express const app = express() @@ -23,13 +23,17 @@ app.use(session({ // Setup path const __dirname = dirname(fileURLToPath(import.meta.url)); +// Setup config manager +var configManager = new ConfigManager(); +configManager.init(); + // Setup database manager var databaseManager = new SqliteManager(); await databaseManager.init(); // Setup mqtt manager var mqttManager = new MqttManager(); -mqttManager.init(); +mqttManager.init(configManager.getMqttUrl(), configManager.getMqttOptions()); // Update mqtt handlers from sqlite initMqttHandlers(); @@ -103,7 +107,7 @@ app.get('/mqttbridge', (req, res)=>{ var message = req.query.message; if(auth == undefined || topic == undefined || message == undefined){ res.sendStatus(400); - }else if(auth != config.auth){ + }else if(auth != configManager.getMqttAuthToken()){ res.sendStatus(401); }else{ mqttManager.publishMessage(topic, message)