commit 5d7c4011b2001fb7aa4ef94ab440c454772349a3 Author: Sean Edmunds Date: Tue May 14 14:11:37 2024 -0500 Initial commit diff --git a/server.cjs b/server.cjs new file mode 100644 index 0000000..4fee94c --- /dev/null +++ b/server.cjs @@ -0,0 +1,294 @@ +const express = require('express'); +const cors = require('cors'); +const fs = require('fs'); +const wol = require('wol'); +const mariadb = require('mariadb'); +const snmp = require('net-snmp'); +const bodyParser = require('body-parser'); + +const pool = mariadb.createPool({ + host: 'localhost', + user: 'trigger', + password: 'trigger', + connectionLimit: 5, +}); + +const options = { + port: 162, + disableAuthorization: true, + includeAuthentication: false, + accessControlModelType: snmp.AccessControlModelType.None, + address: null, + transport: 'udp4', +}; + +const callback = (error, notification) => { + if (error) { + console.error(error); + } else { + } +}; + +// receiver = snmp.createReceiver(options, callback); + +// initializing app +const app = express(); + +// initializing cors middleware for all routes +const corsOptions = { + origin: '*', + credentials: true, +}; + +app.use(cors(corsOptions)); +app.use(bodyParser.json()); + +app.get('/trigger/api/personaldata', async (req, res) => { + conn = await pool.getConnection(); + const query = 'SELECT * FROM trigger.personaldata;'; + conn.query(query).then((rows) => { + res.status(200).send(rows); + }); + conn.end(); +}); + +app.patch('/trigger/api/personaldata', async (req, res) => { + conn = await pool.getConnection(); + const query = `UPDATE trigger.personaldata SET firstname = '${req.body.firstname}', lastname = '${req.body.lastname}', email = '${req.body.email}';`; + conn.query(query).then((rows) => { + res.status(200); + }); + conn.end(); +}); + +app.get('/trigger/api/messages', async (req, res) => { + conn = await pool.getConnection(); + const query = 'SELECT * FROM trigger.messages;'; + conn.query(query).then((rows) => { + res.status(200).send(rows); + }); + conn.end(); +}); + +app.post('/trigger/api/messages', async (req, res) => { + conn = await pool.getConnection(); + const query = `INSERT INTO trigger.messages (message, easteregg) VALUES ('${req.body.message}', '${req.body.easteregg}');`; + conn.query(query).then((rows) => { + res.status(200); + }); + conn.end(); +}); + +app.patch('/trigger/api/messages', async (req, res) => { + conn = await pool.getConnection(); + const query = `UPDATE trigger.messages SET message = '${req.body.message}', easteregg = '${req.body.easteregg}' WHERE id = '${req.body.id}';`; + conn.query(query).then((rows) => { + res.status(200); + }); + conn.end(); +}); + +app.delete('/trigger/api/messages', async (req, res) => { + conn = await pool.getConnection(); + const query = `DELETE FROM trigger.messages WHERE id = '${req.body.id}'`; + conn.query(query).then((rows) => { + res.status(200); + }); + conn.end(); +}); + +app.get('/trigger/api/apps', async (req, res) => { + conn = await pool.getConnection(); + const query = 'SELECT * FROM trigger.apps;'; + conn.query(query).then((rows) => { + res.status(200).send(rows); + }); + conn.end(); +}); + +app.post('/trigger/api/apps', async (req, res) => { + conn = await pool.getConnection(); + const query = `INSERT INTO trigger.apps (name, url, icon, urlbase, category) VALUES ('${req.body.name}', '${req.body.url}', '${req.body.icon}', '${req.body.urlbase}', '${req.body.category}')`; + conn.query(query).then((rows) => { + res.status(200); + }); + conn.end(); +}); + +app.patch('/trigger/api/apps', async (req, res) => { + conn = await pool.getConnection(); + const query = `UPDATE trigger.apps SET name = '${req.body.name}', url = '${req.body.url}', icon = '${req.body.icon}', urlbase = '${req.body.urlbase}', category = '${req.body.category}' WHERE id = '${req.body.id}'`; + conn.query(query).then((rows) => { + res.status(200); + }); + conn.end(); +}); + +app.delete('/trigger/api/apps', async (req, res) => { + conn = await pool.getConnection(); + const query = `DELETE FROM trigger.apps WHERE id = '${req.body.id}'`; + conn.query(query).then((rows) => { + res.status(200); + }); + conn.end(); +}); + +app.get('/trigger/api/appCategories', async (req, res) => { + conn = await pool.getConnection(); + const query = 'SELECT DISTINCT category FROM trigger.apps;'; + conn.query(query).then((rows) => { + res.status(200).send(rows); + }); + conn.end(); +}); + +app.get('/trigger/api/links', async (req, res) => { + conn = await pool.getConnection(); + const query = 'SELECT * FROM trigger.links;'; + conn.query(query).then((rows) => { + res.status(200).send(rows); + }); + conn.end(); +}); + +app.post('/trigger/api/links', async (req, res) => { + conn = await pool.getConnection(); + const query = `INSERT INTO trigger.links (name, url, category) VALUES ('${req.body.name}', '${req.body.url}', '${req.body.category}')`; + conn.query(query).then((rows) => { + res.status(200); + }); + conn.end(); +}); + +app.patch('/trigger/api/links', async (req, res) => { + conn = await pool.getConnection(); + const query = `UPDATE trigger.links SET name = '${req.body.name}', url = '${req.body.url}', category = '${req.body.category}' WHERE id = '${req.body.id}'`; + conn.query(query).then((rows) => { + res.status(200); + }); + conn.end(); +}); + +app.delete('/trigger/api/links', async (req, res) => { + conn = await pool.getConnection(); + const query = `DELETE FROM trigger.links WHERE id = '${req.body.id}'`; + conn.query(query).then((rows) => { + res.status(200); + }); + conn.end(); +}); + +app.get('/trigger/api/providers', async (req, res) => { + conn = await pool.getConnection(); + const query = 'SELECT * FROM trigger.providers;'; + conn.query(query).then((rows) => { + res.status(200).send(rows); + }); + conn.end(); +}); + +app.post('/trigger/api/providers', async (req, res) => { + conn = await pool.getConnection(); + const query = `INSERT INTO trigger.providers (name, url, prefix) VALUES ('${req.body.name}', '${req.body.url}', '${req.body.prefix}')`; + conn.query(query).then((rows) => { + res.status(200); + }); + conn.end(); +}); + +app.patch('/trigger/api/providers', async (req, res) => { + conn = await pool.getConnection(); + const query = `UPDATE trigger.providers SET name = '${req.body.name}', url = '${req.body.url}', prefix = '${req.body.prefix}' WHERE id = '${req.body.id}'`; + conn.query(query).then((rows) => { + res.status(200); + }); + conn.end(); +}); + +app.delete('/trigger/api/providers', async (req, res) => { + conn = await pool.getConnection(); + const query = `DELETE FROM trigger.providers WHERE id = '${req.body.id}'`; + conn.query(query).then((rows) => { + res.status(200); + }); + conn.end(); +}); + +app.get('/trigger/api/themes', async (req, res) => { + conn = await pool.getConnection(); + const query = 'SELECT * FROM trigger.themes;'; + conn.query(query).then((rows) => { + res.status(200).send(rows); + }); + conn.end(); +}); + +app.post('/trigger/api/themes', async (req, res) => { + conn = await pool.getConnection(); + const query = `INSERT INTO trigger.themes (name, imagebackground, colorbackground, colorsearchbackground, colortextpri, colortextacc, colorborder) VALUES ('${req.body.name}','${req.body.imagebackground}','${req.body.colorbackground}','${req.body.colorsearchbackground}','${req.body.colortextpri}','${req.body.colortextacc}','${req.body.colorborder}')`; + conn.query(query).then((rows) => { + res.status(200); + }); + conn.end(); +}); + +app.patch('/trigger/api/themes', async (req, res) => { + conn = await pool.getConnection(); + const query = `UPDATE trigger.themes SET name = '${req.body.name}', imagebackground = '${req.body.imagebackground}', colorbackground = '${req.body.colorbackground}', colorsearchbackground = '${req.body.colorsearchbackground}', colortextpri = '${req.body.colortextpri}', colortextacc = '${req.body.colortextacc}', colorborder = '${req.body.colorborder}' WHERE id = '${req.body.id}';`; + conn.query(query).then((rows) => { + res.status(200); + }); + conn.end(); +}); + +app.delete('/trigger/api/themes', async (req, res) => { + conn = await pool.getConnection(); + const query = `DELETE FROM trigger.themes WHERE id = '${req.body.id}'`; + conn.query(query).then((rows) => { + res.status(200); + }); + conn.end(); +}); + +app.get('/trigger/api/categories', async (req, res) => { + conn = await pool.getConnection(); + const query = 'SELECT * from trigger.linkcategories;'; + conn.query(query).then((rows) => { + res.status(200).send(rows); + }); + conn.end(); +}); + +app.post('/trigger/api/categories', async (req, res) => { + conn = await pool.getConnection(); + let query = 'SELECT * from trigger.linkcategories;'; + let category_index; + conn.query(query).then((rows) => { + category_index = rows.length; + }); + conn.end(); + conn = await pool.getConnection(); + query = `INSERT INTO trigger.linkcategories (category_name, category_index, column_filter) VALUES ('${req.body.category_name}','${category_index}','${req.body.column_filter}')`; + conn.query(query).then((rows) => { + category_index = rows.length; + }); + conn.end(); +}); + +// TODO: Add patch method + +app.delete('/trigger/api/categories', async (req, res) => { + conn = await pool.getConnection(); + const query = `DELETE FROM trigger.linkCategories WHERE id = '${req.body.id}'`; + conn.query(query).then((rows) => { + res.status(200); + }); + conn.end(); +}); + +app.get('/trigger/api/wakeDakota', (req, res) => { + wol.wake('18:C0:4D:81:57:68', (err, res) => {}); +}); + +// app is listening on port 5000 +app.listen(5000, 'localhost', () => {});