From 3e6cc69660723180f268b94b878c7b42b304a263 Mon Sep 17 00:00:00 2001 From: klmmlk Date: Fri, 17 Dec 2021 16:24:51 +0800 Subject: [PATCH 1/2] add fastapi view --- werobot/contrib/fastApiView.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 werobot/contrib/fastApiView.py diff --git a/werobot/contrib/fastApiView.py b/werobot/contrib/fastApiView.py new file mode 100644 index 00000000..31da147a --- /dev/null +++ b/werobot/contrib/fastApiView.py @@ -0,0 +1,34 @@ +#!/usr/bin/python3.8 +# -*- coding: utf-8 -*- +import asyncio +from fastapi import Request,Response +from fastapi.responses import HTMLResponse +import html + +def make_view(robot): + """ + 为一个 BaseRoBot 生成 fastapi view。 + :param robot: + :return: + """ + def werobot_view(request: Request): + timestamp = request.query_params.get('timestamp') + nonce = request.query_params.get('nonce') + signature = request.query_params.get('signature') + if not robot.check_signature( + timestamp, + nonce, + signature, + ): + return HTMLResponse(robot.make_error_page(html.escape(request.url.hostname)), 403) + message = robot.parse_message( + asyncio.run(request.body()), + timestamp=timestamp, + nonce=nonce, + msg_signature=request.query_params.get('msg_signature', '') + ) + response = Response(robot.get_encrypted_reply(message)) + response.headers['content_type'] = 'application/xml' + return response + + return werobot_view From e12225e9574c5762ccb6a3e1654765f7f147c597 Mon Sep 17 00:00:00 2001 From: klmmlk Date: Fri, 17 Dec 2021 16:27:14 +0800 Subject: [PATCH 2/2] Update fastApiView.py --- werobot/contrib/fastApiView.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/werobot/contrib/fastApiView.py b/werobot/contrib/fastApiView.py index 31da147a..75356e84 100644 --- a/werobot/contrib/fastApiView.py +++ b/werobot/contrib/fastApiView.py @@ -8,6 +8,9 @@ def make_view(robot): """ 为一个 BaseRoBot 生成 fastapi view。 + 用法: + app = FastAPI() + app.add_route('/werobot', make_view(robot), ['post']) :param robot: :return: """