diff --git a/bun.lockb b/bun.lockb index 25f0a21..2c8eb1f 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index 9c2e5bf..7fd2300 100644 --- a/package.json +++ b/package.json @@ -8,5 +8,8 @@ }, "peerDependencies": { "typescript": "^5.0.0" + }, + "dependencies": { + "express-fingerprint": "^1.2.2" } } diff --git a/packages/server/src/routers/DoorRouter.ts b/packages/server/src/routers/DoorRouter.ts index 0e33489..a4241be 100644 --- a/packages/server/src/routers/DoorRouter.ts +++ b/packages/server/src/routers/DoorRouter.ts @@ -17,10 +17,15 @@ router.get('/:id/status', async(req, res) => { res.status(401).json({ status: 'closed' }); }); +router.delete('/:id/status', async(req, res) => { + await client.remove(doorStatusKey(req.params.id)); + res.status(200).json({ msg: 'Cleared status' }); +}); + router.all('/:id/auth', ValidQueryParamAuth, async(req, res) => { const statusKey = doorStatusKey(req.params.id); - await client.put(statusKey, 'true'); + await client.put(statusKey, JSON.stringify((req as any).fingerprint)); await client.getClient().expire(statusKey, Bun.env.DOOR_OPEN_TIMEOUT); res.status(200).json({ msg: `Opened the door "${req.params.id}" for ${Bun.env.DOOR_OPEN_TIMEOUT}s` }); }); diff --git a/packages/server/src/server.ts b/packages/server/src/server.ts index a39f684..92121ed 100644 --- a/packages/server/src/server.ts +++ b/packages/server/src/server.ts @@ -1,27 +1,24 @@ import express from "express"; -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 Fingerprint = require('express-fingerprint'); + const app = express(); app.set('trust proxy', 1); -app.use('/api/actions/download', uploadDownloadLimiter); -app.use('/api/actions/upload', uploadDownloadLimiter); -app.use('/api/lnurl/login', challengeLimiter); + +Fingerprint.default + +app.use(Fingerprint({ + parameters: [ + Fingerprint.useragent, + Fingerprint.geoip + ] +})); app.use(express.json()); -app.use(fileUpload({ - limits: { fileSize: 5 * 1024 * 1024 } -})); 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 () => {