82 lines
1.4 KiB
TypeScript
82 lines
1.4 KiB
TypeScript
|
|
import { Hono } from "jsr:@hono/hono";
|
||
|
|
import { Database } from "jsr:@db/sqlite";
|
||
|
|
|
||
|
|
const db = new Database("./db/test.sqlite");
|
||
|
|
|
||
|
|
db.prepare(
|
||
|
|
`
|
||
|
|
CREATE TABLE IF NOT EXISTS Public_Keys (
|
||
|
|
deviceID INTEGER PRIMARY KEY,
|
||
|
|
public_key_pem TEXT NOT NULL
|
||
|
|
);
|
||
|
|
`
|
||
|
|
).run()
|
||
|
|
|
||
|
|
function getFromDB(deviceID: number) {
|
||
|
|
return db.prepare(
|
||
|
|
`
|
||
|
|
SELECT public_key_pem
|
||
|
|
FROM Public_Keys
|
||
|
|
WHERE deviceID=(?);
|
||
|
|
`
|
||
|
|
).all(deviceID)
|
||
|
|
}
|
||
|
|
|
||
|
|
function getSingleFromDB(deviceID: number) {
|
||
|
|
const values = getFromDB(deviceID)
|
||
|
|
|
||
|
|
if (!values) {
|
||
|
|
return null
|
||
|
|
}
|
||
|
|
|
||
|
|
return values[0]
|
||
|
|
}
|
||
|
|
|
||
|
|
function insertIntoDB(deviceID: number, publicKey: string) {
|
||
|
|
db.prepare(
|
||
|
|
`
|
||
|
|
INSERT INTO Public_Keys (deviceID, public_key_pem) VALUES (?, ?);
|
||
|
|
`
|
||
|
|
).run(deviceID, publicKey)
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
const app = new Hono();
|
||
|
|
|
||
|
|
app.get("/", (c) => {
|
||
|
|
return c.text("Hello Deno!");
|
||
|
|
});
|
||
|
|
|
||
|
|
app.get("/key/:deviceID", async (context) => {
|
||
|
|
|
||
|
|
const deviceID: number = parseInt(context.req.param("deviceID"))
|
||
|
|
|
||
|
|
let key: any = getSingleFromDB(deviceID)
|
||
|
|
|
||
|
|
if (!key) {
|
||
|
|
return context.body(null, {
|
||
|
|
status: 404
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
return context.json({
|
||
|
|
publicKey: key.public_key_pem
|
||
|
|
})
|
||
|
|
|
||
|
|
|
||
|
|
})
|
||
|
|
|
||
|
|
app.post("/key", async (context) => {
|
||
|
|
|
||
|
|
const reqBody = await context.req.json()
|
||
|
|
|
||
|
|
// UGLY: Considering always a positive response
|
||
|
|
insertIntoDB(reqBody.deviceID, reqBody.publicKey)
|
||
|
|
|
||
|
|
return context.body(null, {
|
||
|
|
status: 201
|
||
|
|
})
|
||
|
|
|
||
|
|
})
|
||
|
|
|
||
|
|
Deno.serve({ port: 80 }, app.fetch);
|