Changed config to env variables

This commit is contained in:
Andreas Greiner 2021-08-07 14:27:24 +02:00
parent fe1c8c4c15
commit 4f74804910
8 changed files with 104 additions and 49 deletions

View File

@ -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
}

View File

@ -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;
}
}

View File

@ -1,16 +1,15 @@
import mqtt from 'mqtt' import mqtt from 'mqtt'
import config from '../config/config.js'
import request from 'request'; import request from 'request';
export default class MqttManager{ export default class MqttManager{
constructor(){} constructor(){}
init(){ init(mqttUrl, mqttOptions){
this.messageHandlers = [] this.messageHandlers = []
this.client = mqtt.connect(config.mqtt.url, config.mqtt.options) this.client = mqtt.connect(mqttUrl, mqttOptions)
console.log("[MQTT] Connected to MQTT broker ["+config.mqtt.url+"]."); console.log("[MQTT] Connected to MQTT broker ["+mqttUrl+"].");
this.ready = true this.ready = true
this.client.on('message', (topic, message) => { this.client.on('message', (topic, message) => {

View File

@ -1,7 +1,6 @@
import sqlite3 from'sqlite3' import sqlite3 from'sqlite3'
import { open } from 'sqlite' import { open } from 'sqlite'
/** /**
* Manager for handling the sqlite database * Manager for handling the sqlite database
*/ */
@ -13,14 +12,18 @@ export default class SqliteManager{
sqlite3.verbose() sqlite3.verbose()
await open({filename: './database/loginbase.db', driver: sqlite3.Database}).then( await open({filename: './database/loginbase.db', driver: sqlite3.Database}).then(
(db) => { (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.database = db
this.ready = true 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){ async getUser(email){

1
package-lock.json generated
View File

@ -5,6 +5,7 @@
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "loginbase",
"version": "1.0.0", "version": "1.0.0",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {

View File

@ -13,8 +13,7 @@
"description": "Login base project", "description": "Login base project",
"main": "server.mjs", "main": "server.mjs",
"scripts": { "scripts": {
"start": "node server.mjs", "start": "node server.mjs"
"create_config": "node createConfig.js"
}, },
"repository": { "repository": {
"type": "git", "type": "git",

View File

@ -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

View File

@ -6,9 +6,9 @@ import path from 'path'
import { dirname } from 'path'; import { dirname } from 'path';
import { fileURLToPath } from 'url'; import { fileURLToPath } from 'url';
import crypto from "crypto"; import crypto from "crypto";
import config from './config/config.js'
import SqliteManager from "./own_modules/sqliteManager.mjs" import SqliteManager from "./own_modules/sqliteManager.mjs"
import MqttManager from "./own_modules/mqttManager.mjs" import MqttManager from "./own_modules/mqttManager.mjs"
import ConfigManager from "./own_modules/configManager.mjs"
// Setup express // Setup express
const app = express() const app = express()
@ -23,13 +23,17 @@ app.use(session({
// Setup path // Setup path
const __dirname = dirname(fileURLToPath(import.meta.url)); const __dirname = dirname(fileURLToPath(import.meta.url));
// Setup config manager
var configManager = new ConfigManager();
configManager.init();
// Setup database manager // Setup database manager
var databaseManager = new SqliteManager(); var databaseManager = new SqliteManager();
await databaseManager.init(); await databaseManager.init();
// Setup mqtt manager // Setup mqtt manager
var mqttManager = new MqttManager(); var mqttManager = new MqttManager();
mqttManager.init(); mqttManager.init(configManager.getMqttUrl(), configManager.getMqttOptions());
// Update mqtt handlers from sqlite // Update mqtt handlers from sqlite
initMqttHandlers(); initMqttHandlers();
@ -103,7 +107,7 @@ app.get('/mqttbridge', (req, res)=>{
var message = req.query.message; var message = req.query.message;
if(auth == undefined || topic == undefined || message == undefined){ if(auth == undefined || topic == undefined || message == undefined){
res.sendStatus(400); res.sendStatus(400);
}else if(auth != config.auth){ }else if(auth != configManager.getMqttAuthToken()){
res.sendStatus(401); res.sendStatus(401);
}else{ }else{
mqttManager.publishMessage(topic, message) mqttManager.publishMessage(topic, message)