summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--server.mjs16
-rw-r--r--server.test.mjs28
2 files changed, 44 insertions, 0 deletions
diff --git a/server.mjs b/server.mjs
index 2bfbde7..b958049 100644
--- a/server.mjs
+++ b/server.mjs
@@ -33,6 +33,22 @@ const server = createServer((req, res) => {
const record = insert.run(mac, key)
res.writeHead(200, { 'Content-Type': 'application/json' })
res.end(JSON.stringify({ status: 200, data: { eagleId: record.lastInsertRowid } }))
+ } else if (req.method === 'GET' && req.url.startsWith('/exchange')) {
+ const params = new URLSearchParams(req.url.substring('/exchange'.length))
+ const device = params.get('device')
+ if (device === null) {
+ res.writeHead(422)
+ res.end()
+ return
+ }
+ const query = database.prepare('SELECT * FROM eagles WHERE id = ?').get(device)
+ if (query === undefined) {
+ res.writeHead(404)
+ res.end()
+ return
+ }
+ res.writeHead(200)
+ res.end(JSON.stringify({ key: query.key }))
} else {
res.writeHead(404)
res.end()
diff --git a/server.test.mjs b/server.test.mjs
index f59f09b..5e01355 100644
--- a/server.test.mjs
+++ b/server.test.mjs
@@ -10,6 +10,12 @@ const port = 8090
const baseUrl = `http://${hostname}:${port}`
let server = null
+const createDevice = async (mac, key) => {
+ const response = await fetch(`${baseUrl}/eagle?mac=${mac}&key=${key}`)
+ const data = await response.json()
+ return data.data.eagleId
+}
+
before(() => new Promise((resolve, reject) => {
const nodeBinary = process.argv[0]
server = spawn(nodeBinary, ['server.mjs'], {
@@ -111,3 +117,25 @@ test('device registration endpoint returns bad request if missing encryption key
assert.fail(`HTTP request failed: ${err.message}`)
})
})
+
+test('exchange endpoint', async () => {
+ const stubMacAddress = '00:00:00:00:00'
+ const stubKey = '00000000000000000000000000000000'
+
+ const deviceId = await createDevice(stubMacAddress, stubKey)
+ const res = await fetch(`${baseUrl}/exchange?device=${deviceId}`)
+ assert.strictEqual(res.status, 200)
+
+ const data = await res.json()
+ assert.strictEqual(data.key, stubKey)
+})
+
+test('exchange endpoint returns unprocessable content when device id is missing', async () => {
+ const res = await fetch(`${baseUrl}/exchange`)
+ assert.strictEqual(res.status, 422)
+})
+
+test('exchange endpoint returns not found when device does not exist', async () => {
+ const res = await fetch(`${baseUrl}/exchange?device=9999`)
+ assert.strictEqual(res.status, 404)
+})