diff --git a/config.example.json b/config.example.json index b3f185c..af5faa9 100644 --- a/config.example.json +++ b/config.example.json @@ -11,10 +11,9 @@ }, "cider": { - "targetHost": "localhost", - "targetPort": 10769, + "targetHosts": ["localhost:10769"], - "authKeyInDb": "apiAuthKeys.cider" + "authKeysDoc": "cider" }, "mailjet": { @@ -22,8 +21,7 @@ "senderAddress": "apinotifications@enstrayed.com", "senderName": "API Notifications", - "authKeyInDb": "apiAuthKeys.mailjet", - "usageKeyPrefix": "apiUsage.mailjet." + "authKeysDoc": "mailjet" }, "etyd": { diff --git a/routes/cider.js b/routes/cider.js index ea3cfdc..546cdd3 100644 --- a/routes/cider.js +++ b/routes/cider.js @@ -39,19 +39,19 @@ app.get("/cider", (rreq,rres) => { // GET current listening from target app.post("/cider", (rreq,rres) => { // POST stop listening on cider target - fetch(`http://${globalConfig.couchdb.host}/apiauthkeys/cider`, { + fetch(`http://${globalConfig.couchdb.host}/apiauthkeys/${globalConfig.cider.authKeysDoc}`, { headers: { "Authorization": `Basic ${btoa(globalConfig.couchdb.authorization)}` } }).then(dbRes => dbRes.json()).then(dbRes => { if (dbRes.status == 404) { // If document containing cider auth keys does not exist - console.log("ERROR: Could not find apiauthkeys/cider") + console.log(`ERROR: Could not find apiauthkeys/${globalConfig.mailjet.authKeysDoc}`) rres.sendStatus(500) // Refuse request } else { if (dbRes["content"][rreq.get("Authorization").split("_")[0]] === rreq.get("Authorization").split("_")[1]) { - fetch(`http://${globalConfig.cider.targetHost}:${globalConfig.cider.targetPort}/stop`).then(fres => { // send GET /stop to cider target + fetch(`http://${globalConfig.cider.targetHosts[0]}/stop`).then(fres => { // send GET /stop to cider target if (fres.status == 204) { console.log(`${rreq.get("cf-connecting-ip")} POST /cider returned 200 KEY:${rreq.get("Authorization")}`) rres.sendStatus(200) // if that works then 200 @@ -73,7 +73,7 @@ app.post("/cider", (rreq,rres) => { // POST stop listening on cider target async function getCurrentListening() { // async function to actually get and return the json (this is just adapted from the original gist) timeSinceLastCiderQuery = Date.now(); // update last query time - return await fetch(`http://${globalConfig.cider.targetHost}:${globalConfig.cider.targetPort}/currentPlayingSong`).then(res => res.json()).catch(err => { // fetch, format and return JSON + return await fetch(`http://${globalConfig.cider.targetHosts[0]}/currentPlayingSong`).then(res => res.json()).catch(err => { // fetch, format and return JSON return "unreachable" }) diff --git a/routes/mailjet.js b/routes/mailjet.js index 1fdfccf..bd2c48b 100644 --- a/routes/mailjet.js +++ b/routes/mailjet.js @@ -2,13 +2,17 @@ const { app, db, globalConfig } = require("../index.js") // Get globals from ind app.post("/sendemail", (rreq,rres) => { - db.get(globalConfig.mailjet.authKeyInDb).then(dbres => { - if (dbres == null) { - console.log("ERROR: Configured key containing mailjet authkeys is null") - rres.sendStatus(500) + fetch(`http://${globalConfig.couchdb.host}/apiauthkeys/${globalConfig.mailjet.authKeysDoc}`, { + headers: { + "Authorization": `Basic ${btoa(globalConfig.couchdb.authorization)}` + } + }).then(dbRes => dbRes.json()).then(dbRes => { + + if (dbRes.status == 404) { // If document containing mailjet auth keys does not exist + console.log(`ERROR: Could not find apiauthkeys/${globalConfig.mailjet.authKeysDoc}`) + rres.sendStatus(500) // Refuse request } else { - let validKeys = dbres.split(',') - if (validKeys.includes(rreq.get("Authorization"))) { + if (dbRes["content"][rreq.get("Authorization").split("_")[0]] === rreq.get("Authorization").split("_")[1]) { let message = { "Messages": [ @@ -39,7 +43,6 @@ app.post("/sendemail", (rreq,rres) => { body: JSON.stringify(message) }).then(fetchRes => { if (fetchRes.status == 200) { - db.incr(`${globalConfig.mailjet.usageKeyPrefix}${rreq.get("Authorization")}`) console.log(`${rreq.get("cf-connecting-ip")} POST /sendemail returned 200 KEY:${rreq.get("Authorization")}`) rres.sendStatus(200) } else { @@ -49,8 +52,8 @@ app.post("/sendemail", (rreq,rres) => { }) } else { - console.log(`${rreq.get("cf-connecting-ip")} POST /sendemail returned 401`) - rres.sendStatus(401) + console.log(`${rreq.get("cf-connecting-ip")} POST /sendemail returned 401`) // log ip of unauthorized requests + rres.sendStatus(401) // received auth key was not in database } } })