Initial commit
This commit is contained in:
88
own_modules/mqttManager.mjs
Normal file
88
own_modules/mqttManager.mjs
Normal file
@@ -0,0 +1,88 @@
|
||||
import mqtt from 'mqtt'
|
||||
import config from '../config/config.js'
|
||||
import request from 'request';
|
||||
|
||||
export default class MqttManager{
|
||||
|
||||
constructor(){}
|
||||
|
||||
init(){
|
||||
this.messageHandlers = []
|
||||
|
||||
this.client = mqtt.connect(config.mqtt.url, config.mqtt.options)
|
||||
console.log("[MQTT] Connected to MQTT broker ["+config.mqtt.url+"].");
|
||||
this.ready = true
|
||||
|
||||
this.client.on('message', (topic, message) => {
|
||||
if(this.getSubscribedTopics().includes(topic)){
|
||||
console.log("[MQTT] Got message ["+message+"] on handled topic ["+topic+"].");
|
||||
const suitingMessageHandlers = this.messageHandlers.filter(handler => handler.topic == topic && handler.message == message);
|
||||
suitingMessageHandlers.forEach(handler => {
|
||||
console.log("[MQTT] Sending web request ["+handler.requestUrl+"].");
|
||||
request(handler.requestUrl, { json: true }, (err, res, body) => {
|
||||
if (err) {
|
||||
console.log("[MQTT] Error sending web request ["+handler.requestUrl+"].");
|
||||
}else{
|
||||
console.log("[MQTT] Sent web request ["+handler.requestUrl+"].");
|
||||
}
|
||||
});
|
||||
});
|
||||
}else{
|
||||
console.log("[MQTT] Got message ["+message+"] on unhandled topic ["+topic+"].");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
subscribe(topic){
|
||||
this.client.subscribe(topic, function(err){
|
||||
if(err != null){
|
||||
console.log("[MQTT] Error subscribing to topic ["+topic+"].");
|
||||
}else{
|
||||
console.log("[MQTT] Subscribed to topic ["+topic+"].");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
unsubscribe(topic){
|
||||
this.client.unsubscribe(topic, function(err){
|
||||
if(err != null){
|
||||
console.log("[MQTT] Error unsubscribing to topic ["+topic+"].");
|
||||
}else{
|
||||
console.log("[MQTT] Unsubscribed to topic ["+topic+"].");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
publishMessage(topic, message){
|
||||
this.client.publish(topic, message);
|
||||
console.log("[MQTT] Publishing message ["+message+"] in topic ["+topic+"].");
|
||||
}
|
||||
|
||||
getSubscribedTopics(){
|
||||
return this.messageHandlers.map(h => h.topic);
|
||||
}
|
||||
|
||||
addMessageHandler(messageHandler){
|
||||
if(!this.getSubscribedTopics().includes(messageHandler.topic)){
|
||||
this.subscribe(messageHandler.topic)
|
||||
}
|
||||
this.messageHandlers.push(messageHandler);
|
||||
console.log("[MQTT] Added new message handler ["+JSON.stringify(messageHandler)+"].");
|
||||
|
||||
}
|
||||
|
||||
removeMessageHandler(messageHandler){
|
||||
const messageHandlerIndex = this.messageHandlers.findIndex(handler => handler.topic == messageHandler.topic && handler.message == messageHandler.message && handler.requestUrl == messageHandler.requestUrl);
|
||||
if(messageHandlerIndex != -1){
|
||||
this.messageHandlers = this.messageHandlers.splice(messageHandlerIndex,1);
|
||||
console.log("[MQTT] Removed message handler ["+JSON.stringify(messageHandler)+"].");
|
||||
}else{
|
||||
console.log("[MQTT] Error removing message handler ["+JSON.stringify(messageHandler)+"].");
|
||||
}
|
||||
if(!this.getSubscribedTopics().includes(messageHandler.topic)){
|
||||
this.unsubscribe(messageHandler.topic)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
71
own_modules/sqliteManager.mjs
Normal file
71
own_modules/sqliteManager.mjs
Normal file
@@ -0,0 +1,71 @@
|
||||
import sqlite3 from'sqlite3'
|
||||
import { open } from 'sqlite'
|
||||
|
||||
|
||||
/**
|
||||
* Manager for handling the sqlite database
|
||||
*/
|
||||
export default class SqliteManager{
|
||||
|
||||
constructor(){}
|
||||
|
||||
async init(){
|
||||
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
|
||||
})
|
||||
}
|
||||
|
||||
async getUser(email){
|
||||
const result = await this.database.get('SELECT * FROM users WHERE email = ?', email)
|
||||
console.log('[SQLITE] Got user from database ['+JSON.stringify(result.email)+'].')
|
||||
return result
|
||||
}
|
||||
|
||||
async addUser(email, password){
|
||||
try{
|
||||
await this.database.run(`INSERT INTO users(email, password) VALUES(:email, :password)`, {':email': email, ':password':password});
|
||||
console.log("[SQLITE] Inserted new user("+email+").")
|
||||
return true
|
||||
}catch(err){
|
||||
console.log("[SQLITE] Failed inserting new user("+email+"): "+err)
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
async getHandlers(){
|
||||
const result = await this.database.all('SELECT * FROM handlers')
|
||||
console.log('[SQLITE] Got handlers from database ['+JSON.stringify(result)+'].')
|
||||
return result
|
||||
}
|
||||
|
||||
async addHandler(topic, message, requestUrl){
|
||||
try{
|
||||
await this.database.run(`INSERT INTO handlers(topic, message, requestUrl) VALUES(:topic, :message, :requestUrl)`, {':topic': topic, ':message':message, ':requestUrl': requestUrl});
|
||||
console.log("[SQLITE] Inserted new handler [topic: "+topic+", message: "+message+", requestUrl: "+requestUrl+"].")
|
||||
return true
|
||||
}catch(err){
|
||||
console.log("[SQLITE] Failed inserting new handler [topic: "+topic+", message: "+message+", requestUrl: "+requestUrl+"].")
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
async removeHandler(topic, message, requestUrl){
|
||||
const result = await this.database.run('DELETE FROM handlers WHERE topic = :topic AND message = :message AND requestUrl = :requestUrl', {':topic': topic, ':message': message, ':requestUrl': requestUrl})
|
||||
if(result.changes>=1){
|
||||
console.log("[SQLITE] Deleted message handler [topic: "+topic+", message: "+message+", requestUrl: "+requestUrl+"].")
|
||||
}else{
|
||||
console.log("[SQLITE] Failed deleting message handler [topic: "+topic+", message: "+message+", requestUrl: "+requestUrl+"].")
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user