diff --git a/Dockerfile b/Dockerfile index 2fd4124..31e17af 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,6 @@ ADD bun.lockb bun.lockb ADD package.json package.json ADD tsconfig.json tsconfig.json - # install all deps RUN bun install diff --git a/bun.lockb b/bun.lockb index 4a20bbf..25f0a21 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/docker-compose.yml b/docker-compose.yml index 3942417..646677f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,12 +1,12 @@ version: "3" services: - lnurl_db: - container_name: lnurl-db - image: gitea.chromart.dynv6.net/martin/lnurl-db:latest + doorman: + container_name: doorman + image: gitea.chromart.dedyn.io/martin/doorman:latest environment: - CHALLENGE_EXPIRE_MS=105000 - - BASE_DOMAIN=chromart.dynv6.net + - BASE_DOMAIN=gitea.chromart.dedyn.io - REDIS_CONNECT_URL=redis://@redis:6379 depends_on: - redis diff --git a/package.json b/package.json index 741e73f..9c2e5bf 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "lnurl-db", + "name": "doorman", "module": "index.ts", "type": "module", "workspaces": ["packages/*"], diff --git a/packages/client/package.json b/packages/client/package.json index 7f9f6f9..94ac5fc 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,5 +1,5 @@ { - "name": "lnurl-db-client", + "name": "doorman-client", "version": "0.1.0", "private": true, "dependencies": { diff --git a/packages/server/package.json b/packages/server/package.json index 6b27ff7..289a56e 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,5 +1,5 @@ { - "name": "lnurl-db-server", + "name": "doorman-server", "version": "1.0.0", "main": "index.js", "license": "MIT", diff --git a/packages/server/src/clients/db/RedisDbClient.ts b/packages/server/src/clients/db/RedisDbClient.ts index 165d6f5..d82fc5a 100644 --- a/packages/server/src/clients/db/RedisDbClient.ts +++ b/packages/server/src/clients/db/RedisDbClient.ts @@ -79,4 +79,8 @@ export class RedisDbClient { return this.client.getDel(key); } + + public getClient() { + return this.client; + } } \ No newline at end of file diff --git a/packages/server/src/routers/DoorRouter.ts b/packages/server/src/routers/DoorRouter.ts new file mode 100644 index 0000000..5c3d9d0 --- /dev/null +++ b/packages/server/src/routers/DoorRouter.ts @@ -0,0 +1,30 @@ +import express from "express"; +import { getRedisClient } from "../clients/db/RedisDbProvider"; +import { IDoor } from "../types/IDoor"; +import { RedisKeys, concatKeys } from "../types/RedisKeys"; + +const router = express.Router(); +const client = await getRedisClient(); + +router.post('/:id', async(req, res) => { + const door: IDoor = req.body; + + await client.getClient().hSet(concatKeys(RedisKeys.DOORS, req.params.id), { + ...door + }); + + res.status(200).json(door); +}); + +router.get('/:id/status', async(req, res) => { + const isOpen = await client.getClient().exists(concatKeys(RedisKeys.DOORS, req.params.id, 'open')); + + if (isOpen) { + res.status(200).json({ status: 'open' }); + return; + } + + res.status(401).json({ status: 'closed' }); +}); + +export default router; \ No newline at end of file diff --git a/packages/server/src/server.ts b/packages/server/src/server.ts index ceacfb9..50a8802 100644 --- a/packages/server/src/server.ts +++ b/packages/server/src/server.ts @@ -3,6 +3,7 @@ import fileUpload from "express-fileupload"; import { challengeLimiter, uploadDownloadLimiter } from "./util/RateLimits"; import LnurlRouter from "./routers/LnurlRouter"; import ActionRouter from "./routers/ActionRouter"; +import DoorRouter from "./routers/DoorRouter"; const app = express(); @@ -21,6 +22,7 @@ app.use(express.static("dist")); // use routers app.use('/api/lnurl', LnurlRouter); app.use('/api/actions', ActionRouter); +app.use('/api/door', DoorRouter); app.listen(5000, async () => { console.log("listening on port 5000"); diff --git a/packages/server/src/types/IDoor.ts b/packages/server/src/types/IDoor.ts new file mode 100644 index 0000000..824e1aa --- /dev/null +++ b/packages/server/src/types/IDoor.ts @@ -0,0 +1,4 @@ +export interface IDoor { + id: string; + open?: string; +} \ No newline at end of file diff --git a/packages/server/src/types/RedisKeys.ts b/packages/server/src/types/RedisKeys.ts index 9606849..eb6b1a9 100644 --- a/packages/server/src/types/RedisKeys.ts +++ b/packages/server/src/types/RedisKeys.ts @@ -1,3 +1,8 @@ export enum RedisKeys { CHALLENGES = "challenges", + DOORS = "doors" +} + +export function concatKeys(...keys: String[]) { + return keys.join(':'); } \ No newline at end of file