diff --git a/app.js b/app.js new file mode 100644 index 0000000..6292e11 --- /dev/null +++ b/app.js @@ -0,0 +1,92 @@ +// OwlBoard - © Fred Boniface 2022 +// Licensed under GPLv3 (or later) +// Please see the included LICENSE file + +// Version Number: +var version = "0.0.1" +console.log(`Starting OwlBoard version ${version}`) + +// Load Modules: +const fs = require('fs'); +const ldb = require('ldbs-json'); +const express = require('express'); +const app = express(); + +// 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: +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: +app.use(express.json()); + +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); + } +); + + +// Check Athena API Key: + +// Routes: + +app.get('/', (req, res)=>{ + res.status(200); + res.set('Content-Type', 'application/json'); + res.send(JSON.stringify({"OwlBoard_Status":"ready","OwlBoard_Version":version})); +}); + +app.post('/test', (req, res)=>{ + const {test} = req.body; + res.status(200); + res.set('Content-Type', 'application/json'); + res.send(JSON.stringify({"test_outcome":"success","post_value":test})) +}) + +app.post('/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('/stations', (req, res)=>{ + //Return JSON of all available stations - No Auth Required +}) + + +// 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 diff --git a/express.js b/express.js deleted file mode 100644 index add3d67..0000000 --- a/express.js +++ /dev/null @@ -1,32 +0,0 @@ -// OwlBoard - © Fred Boniface 2022 -// Licensed under GPLv3 (or later) -// Please see the included LICENSE file - -// Load Modules -const fs = require('fs'); -const ldb = require('ldbs-json'); -const bodyParser = require('body-parser'); -const exit = require('process'); -const express = require('express'); -const app = express(); - -// Get API Keys: -// - Keys are available as keys.ldbws and keys.ldbsvws -try { - const keys = JSON.parse(fs.readFileSync('/srv/keys/owlboard/keys.json', 'utf8')); - console.log('API Keys loaded from file'); - } catch (err) { - const keys = 'ERR'; - console.error('Unable to obtain API Keys from file'); - console.error(err); - exit - }; - -// Define Web Service: -var server = app.listen(8080, function () { - var host = server.address().address - var port = server.address().port - console.log("Example app listening at http://%s:%s", host, port) -}) - -// Define Output Functions: diff --git a/package.json b/package.json index 0be0431..8287810 100644 --- a/package.json +++ b/package.json @@ -2,5 +2,19 @@ "dependencies": { "express": "^4.18.2", "ldbs-json": "^1.2.1" - } + }, + "name": "owlboard", + "description": "OwlBoard is the backend API that powers the Athena web application at athena.fb-infra.uk.", + "version": "0.0.1", + "main": "express.js", + "devDependencies": {}, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://git.fjla.uk/fred.boniface/owlboard.git" + }, + "author": "Fred Boniface", + "license": "GPL-3.0-or-later" }