From c76a3c561bce59d6b6e7603236542aada06b842b Mon Sep 17 00:00:00 2001 From: Fred Boniface Date: Thu, 1 Dec 2022 13:40:24 +0000 Subject: [PATCH] Organised --- app.js | 104 ++++-------------- old-files/http.js | 68 ------------ package-lock.json | 3 +- settings.json | 1 - src/configs/server.configs.js | 6 + src/configs/version.configs.js | 5 + src/controllers/list.controllers.js | 15 +++ src/controllers/test.controllers.js | 24 ++++ routes/api.js => src/routes/ldb.routes.js | 0 src/routes/list.routes.js | 19 ++++ src/routes/test.routes.js | 20 ++++ .../services/db.services.js | 0 src/services/ldb.services.js | 1 + src/services/list.services.js | 10 ++ src/services/test.services.js | 14 +++ .../utils/checkauth.utils.js | 0 src/utils/ldbKey.utils.js | 22 ++++ 17 files changed, 159 insertions(+), 153 deletions(-) delete mode 100644 old-files/http.js delete mode 100644 settings.json create mode 100644 src/configs/server.configs.js create mode 100644 src/configs/version.configs.js create mode 100644 src/controllers/list.controllers.js create mode 100644 src/controllers/test.controllers.js rename routes/api.js => src/routes/ldb.routes.js (100%) create mode 100644 src/routes/list.routes.js create mode 100644 src/routes/test.routes.js rename routes/api.list.js => src/services/db.services.js (100%) create mode 100644 src/services/ldb.services.js create mode 100644 src/services/list.services.js create mode 100644 src/services/test.services.js rename routes/api.test.js => src/utils/checkauth.utils.js (100%) create mode 100644 src/utils/ldbKey.utils.js diff --git a/app.js b/app.js index 0264958..fa536ee 100644 --- a/app.js +++ b/app.js @@ -3,95 +3,35 @@ // Please see the included LICENSE file statically served fonts are // licensed separately, each folder contains a license file -// Version Number: -var version = "0.0.1" -console.log(`Starting OwlBoard version ${version}`) - // Load & prepare modules: -const fs = require('fs'); -const ldb = require('ldbs-json'); const express = require('express'); const app = express(); +const config = require('./src/configs/server.configs'); +const version = require('./src/configs/version.configs'); +const testRtr = require('./src/routes/test.routes'); +const listRtr = require('./src/routes/list.routes'); -// Get API Keys: -try { - var keys = JSON.parse(fs.readFileSync('/srv/keys/owlboard/keys.json', 'utf8')); - console.log('API Keys loaded from /srv/keys/ownboard/keys.json'); - } catch (err) { - var keys = 'ERR'; - console.error('Unable to obtain API Keys from file'); - console.error(err); - }; +// Print version number: +console.log(`Starting OwlBoard, API version ${version.api}`); -// Get Settings: -try { - var settings = JSON.parse(fs.readFileSync('./settings.json', 'utf8')); - console.log("Settings loaded from .settings.json"); -} catch (err) { - console.warn('Unable to load settings, using defaults', err); - var settings = {"webPort":8460,"listen":"localhost"}; -}; - -// Create Web Service: +// Middleware: app.use(express.json()); //JSON Parsing for POST Requests app.use(express.static('static')); //Serve static content from static - -app.listen(settings.webPort, (error) =>{ - if(!error) - console.log(`Server is running on http://${settings.listen}:${settings.webPort}`) - else - console.log("Error occurred, server can't start", error); - } -); - - -// Create/Connect to database: - -// Routes: - -app.get('/api', (req, res)=>{ - res.status(200); - res.set('Content-Type', 'application/json'); - res.send(JSON.stringify({"OwlBoard_Status":"ready","OwlBoard_Version":version})); +app.use((err, req, res, next) => { + const statusCode = err.statuscode || 500; + console.error(err.message, err.stack); + res.status(statusCode).json({'message': err.message}); }); -app.post('/api/test', (req, res)=>{ //Check auth and return status - const {test} = req.body; - res.status(200); - res.set('Content-Type', 'application/json'); - res.send(JSON.stringify({"test_outcome":"success","post_value":test})) -}) +// Point to Routes +app.use('/api/test', testRtr); +app.use('/api/list', listRtr); -app.post('/api/arrdep', (req, res)=>{ - //Check Validity and Auth then return ArrDep JSON - const {reqCode} = req.body; - const {auth} = req.body; - const permit = checkAuth(auth); - const valid = checkValid(reqCode); - res.set('Content-Type', 'application/json'); - if (permit == false) { //This should be the other way round - If Valid&Auth then return, elif not auth, elif invalid elif UnknownError - res.status(401); - res.send(JSON.stringify({"status":"fail","error":"Not Authorised"})); - } else if (valid == false) { - res.status(404); - res.send(JSON.stringify({"status":"fail","error":"Location not Recognized"})); - } - -}) - -app.post('/api/stations', (req, res)=>{ - //Return JSON of all available stations - No Auth Required -}) - -app.post('/api/send-issue', (req, res)=>{ - //Submit issue to Gitea (based on existing PHP Athena function) -}) - -// General Functions -function checkValid(input){ - // Check validity of the entered CRS/Tiploc against DB -} - -function checkAuth(downstreamKey){ - // Check the downstream requester has authority to get depBoards -} \ No newline at end of file +// Start server +app.listen(config.port, config.listen, (error) =>{ + if(!error) { + console.log(`Started server on http://${config.listen}:${config.port}`); + } else { + console.log("Error occurred, server can't start", error); + } +}); \ No newline at end of file diff --git a/old-files/http.js b/old-files/http.js deleted file mode 100644 index 5a9c71c..0000000 --- a/old-files/http.js +++ /dev/null @@ -1,68 +0,0 @@ -// OwlBoard - © Fred Boniface 2022 -// Licensed under GPLv3 (or later) -// Please see the included LICENSE file - -// Version Number: -var version = 0.1 -console.log(`Starting OwlBoard version ${version}`) - -// Load Modules: -const fs = require('fs'); -const ldb = require('ldbs-json'); -const http = require('http'); -const url = require('url'); - -// Get API Keys: -try { - var keys = JSON.parse(fs.readFileSync('/srv/keys/owlboard/keys.json', 'utf8')); - console.log('API Keys loaded from /srv/keys/ownboard/keys.json'); - } catch (err) { - var keys = 'ERR'; - console.error('Unable to obtain API Keys from file'); - console.error(err); - }; - -// Get Settings: -//let settings -try { - var settings = JSON.parse(fs.readFileSync('./settings.json', 'utf8')); - console.log("Settings loaded from .settings.json"); -} catch (err) { - console.warn('Unable to load settings, using defaults'); - console.log(err); - var settings = {"webPort":8460,"listen":"localhost"}; -}; - -// Create Web Service: -try { - http.createServer((req, res) => { - const queryOpt = url.parse(req.url, true).query; - const query = url.parse(req.url, true).pathname.replace(/[/]/g, ''); - - switch (req.url){ - case "": - res.writeHead(200, { 'Content-Type':'application/json' }); - res.end(JSON.stringify({"OwlBoardStatus":"ready","OwnBoardVersion":version})); - break; - } - switch (req.url){ - case "/crs": - res.writeHead(200, { 'Content-Type':'application/json'}); - res.end(crs); - break; - } - - - }).listen(settings.webPort); - - console.log(`Web server started on http://${settings.listen}:${settings.webPort}`); - -} catch (err) { - console.error('Unable to start webserver'); - console.error(err); -}; - -// Check Athena API Key: - -// Routes: -var crs = JSON.stringify({"resource":"crs_lookup"}); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index e2af8a9..7acfabb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,8 +12,7 @@ "express": "^4.18.2", "ldbs-json": "^1.2.1", "sqlite3": "^5.1.2" - }, - "devDependencies": {} + } }, "node_modules/@gar/promisify": { "version": "1.1.3", diff --git a/settings.json b/settings.json deleted file mode 100644 index 1bd0a49..0000000 --- a/settings.json +++ /dev/null @@ -1 +0,0 @@ -{"webPort":8460,"listen":"localhost"} \ No newline at end of file diff --git a/src/configs/server.configs.js b/src/configs/server.configs.js new file mode 100644 index 0000000..8f960cc --- /dev/null +++ b/src/configs/server.configs.js @@ -0,0 +1,6 @@ +const server = { + port: 8460, + listen: "localhost" +}; + +module.exports = server; \ No newline at end of file diff --git a/src/configs/version.configs.js b/src/configs/version.configs.js new file mode 100644 index 0000000..086755e --- /dev/null +++ b/src/configs/version.configs.js @@ -0,0 +1,5 @@ +const version = { + api: "0.0.1" +}; + +module.exports = version; \ No newline at end of file diff --git a/src/controllers/list.controllers.js b/src/controllers/list.controllers.js new file mode 100644 index 0000000..34dd916 --- /dev/null +++ b/src/controllers/list.controllers.js @@ -0,0 +1,15 @@ +const list = require('../services/list.services'); + +async function get(req, res, next){ + try { + res.json(await list.get(req.body)) + } catch (err) { + console.error(`Unknown Error`, err.message); + next(err); + } +} + +module.exports = { + get, + post +} \ No newline at end of file diff --git a/src/controllers/test.controllers.js b/src/controllers/test.controllers.js new file mode 100644 index 0000000..1d2f48f --- /dev/null +++ b/src/controllers/test.controllers.js @@ -0,0 +1,24 @@ +const test = require('../services/test.services'); + +async function get(req, res, next){ + try { + res.json(await test.get(req.body)) + } catch (err) { + console.error(`Unknown Error`, err.message); + next(err); + } +} + +async function post(req, res){ + try { + res.json(await test.post(req.body)) + } catch (err) { + console.error(`Unknown Error`, err.message); + next(err); + } +}; + +module.exports = { + get, + post +} \ No newline at end of file diff --git a/routes/api.js b/src/routes/ldb.routes.js similarity index 100% rename from routes/api.js rename to src/routes/ldb.routes.js diff --git a/src/routes/list.routes.js b/src/routes/list.routes.js new file mode 100644 index 0000000..a0e1f84 --- /dev/null +++ b/src/routes/list.routes.js @@ -0,0 +1,19 @@ +const express = require('express'); +const router = express.Router(); +const listController = require('../controllers/list.controllers'); + +/* GET programming languages. */ +//router.get('/', programmingLanguagesController.get); + +/* POST programming language */ +//router.post('/', programmingLanguagesController.create); + +/* PUT programming language */ +//router.put('/:id', programmingLanguagesController.update); + +/* DELETE programming language */ +//router.delete('/:id', programmingLanguagesController.remove); + +router.get('/', listController.get); + +module.exports = router; \ No newline at end of file diff --git a/src/routes/test.routes.js b/src/routes/test.routes.js new file mode 100644 index 0000000..99aa571 --- /dev/null +++ b/src/routes/test.routes.js @@ -0,0 +1,20 @@ +const express = require('express'); +const router = express.Router(); +const testController = require('../controllers/test.controllers'); + +/* GET programming languages. */ +//router.get('/', programmingLanguagesController.get); + +/* POST programming language */ +//router.post('/', programmingLanguagesController.create); + +/* PUT programming language */ +//router.put('/:id', programmingLanguagesController.update); + +/* DELETE programming language */ +//router.delete('/:id', programmingLanguagesController.remove); + +router.get('/', testController.get); +router.post('/', testController.post); + +module.exports = router; \ No newline at end of file diff --git a/routes/api.list.js b/src/services/db.services.js similarity index 100% rename from routes/api.list.js rename to src/services/db.services.js diff --git a/src/services/ldb.services.js b/src/services/ldb.services.js new file mode 100644 index 0000000..2ad7189 --- /dev/null +++ b/src/services/ldb.services.js @@ -0,0 +1 @@ +const ldb = require('ldbs-json'); \ No newline at end of file diff --git a/src/services/list.services.js b/src/services/list.services.js new file mode 100644 index 0000000..2bb7010 --- /dev/null +++ b/src/services/list.services.js @@ -0,0 +1,10 @@ +const version = require('../configs/version.configs'); + +async function get(){ + return {"OwlBoard_Status":"ready","OwlBoard_Version":version.api}; +} + +module.exports = { + get, + post +} \ No newline at end of file diff --git a/src/services/test.services.js b/src/services/test.services.js new file mode 100644 index 0000000..4eab255 --- /dev/null +++ b/src/services/test.services.js @@ -0,0 +1,14 @@ +const version = require('../configs/version.configs'); + +async function get(){ + return {"OwlBoard_Status":"ready","OwlBoard_Version":version.api}; +} + +async function post(){ + return {"type":"post"}; +} + +module.exports = { + get, + post +} \ No newline at end of file diff --git a/routes/api.test.js b/src/utils/checkauth.utils.js similarity index 100% rename from routes/api.test.js rename to src/utils/checkauth.utils.js diff --git a/src/utils/ldbKey.utils.js b/src/utils/ldbKey.utils.js new file mode 100644 index 0000000..b5f40d1 --- /dev/null +++ b/src/utils/ldbKey.utils.js @@ -0,0 +1,22 @@ +const fs = require('fs'); + +async function returnKey(type){ //Reads API key from file and returns either ldb or ldbsv key + try { + var keys = JSON.parse(fs.readFileSync('/srv/keys/owlboard/keys.json', 'utf8')); + console.log('API Keys loaded from /srv/keys/ownboard/keys.json'); + } catch (err) { + var keys = 'ERR'; + console.error('Unable to obtain API Keys from file'); + console.error(err); + }; + + if (staff = true){ + return keys.ldb; + } else { + return keys.ldvsv; + }; +}; + +module.exports = { + returnKey +}; \ No newline at end of file