From e9e517533a7e03b9c0c0e5b2d392d00984fff8b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Sun, 11 Aug 2024 23:53:12 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E6=8C=82=E8=BD=BD=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/onebot/network/active-websocket.ts | 4 +++- src/onebot/network/passive-http.ts | 20 ++++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/onebot/network/active-websocket.ts b/src/onebot/network/active-websocket.ts index 54379854..a73b9f54 100644 --- a/src/onebot/network/active-websocket.ts +++ b/src/onebot/network/active-websocket.ts @@ -55,7 +55,9 @@ export class OB11ActiveWebSocketAdapter implements IOB11NetworkAdapter { close() { if (this.isClosed) { - throw new Error('Cannot close a closed WebSocket connection'); + this.logger.logDebug('Cannot close a closed WebSocket connection'); + return; + //throw new Error('Cannot close a closed WebSocket connection'); } this.isClosed = true; if (this.connection) { diff --git a/src/onebot/network/passive-http.ts b/src/onebot/network/passive-http.ts index 88e5be35..d554fb2c 100644 --- a/src/onebot/network/passive-http.ts +++ b/src/onebot/network/passive-http.ts @@ -12,7 +12,6 @@ export class OB11PassiveHttpAdapter implements IOB11NetworkAdapter { private app: Express | undefined; private server: http.Server | undefined; private isOpen: boolean = false; - private hasBeenClosed: boolean = false; private actionMap: Map> = new Map(); private port: number; @@ -36,8 +35,9 @@ export class OB11PassiveHttpAdapter implements IOB11NetworkAdapter { } open() { - if (this.hasBeenClosed) { + if (this.isOpen) { this.coreContext.context.logger.logError('Cannot open a closed HTTP server'); + return; } if (!this.isOpen) { this.initializeServer(); @@ -47,7 +47,6 @@ export class OB11PassiveHttpAdapter implements IOB11NetworkAdapter { async close() { this.isOpen = false; - this.hasBeenClosed = true; this.server?.close(); this.app = undefined; } @@ -58,13 +57,26 @@ export class OB11PassiveHttpAdapter implements IOB11NetworkAdapter { this.app.use(express.json()); this.app.use(express.urlencoded({ extended: false })); + this.app.use((req, res, next) => this.authorize(this.token, req, res, next)); this.app.use('/', (req, res) => this.handleRequest(req, res)); this.server.listen(this.port, () => { - this.coreContext.context.logger.log(`HTTP server listening on port ${this.port}`); + this.coreContext.context.logger.log(`[OneBot] [HTTP Adapter] Start On Port ${this.port}`); }); } + private authorize(token: string | undefined, req: Request, res: Response, next: any) { + if (!token || token.length == 0) return;//客户端未设置密钥 + const HeaderClientToken = req.headers.authorization?.split('Bearer ').pop() || ''; + const QueryClientToken = req.query.access_token; + const ClientToken = typeof (QueryClientToken) === 'string' && QueryClientToken !== '' ? QueryClientToken : HeaderClientToken; + if (ClientToken === token) { + next(); + } else { + res.status(403).send(JSON.stringify({ message: 'token verify failed!' })); + } + } + private async handleRequest(req: Request, res: Response) { if (!this.isOpen) { res.status(503).send('Server is closed');