1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
import BaseHTTPServer import time
from jwcrypto import jwk, jwe from jwcrypto.common import json_encode, json_decode
HOST_NAME = 'localhost' PORT_NUMBER = 8000 PSK_TABLE = {'0':jwk.JWK.from_json('{"kty":"oct","k":"MDEyMzQ1Njc4OWFiY2RlZg"}')}
class Webhook(BaseHTTPServer.BaseHTTPRequestHandler): def do_GET(self): self.send_response(404)
def do_POST(self): content_length = int(self.headers['Content-Length']) req_body = self.rfile.read(content_length) jwetoken = jwe.JWE() jwetoken.deserialize(req_body) kid = jwetoken.jose_header["kid"] key = PSK_TABLE[kid] print time.asctime(), "Req head %s" % json_encode(jwetoken.jose_header) jwetoken.decrypt(key) print time.asctime(), "Req json %s" % jwetoken.payload.decode("unicode_escape") req = json_decode(jwetoken.payload) if req["srcid"] == "123": res = {"status":0,"msg":""} res["data"] = { "item_list":[{"title":"故宫博物院"}], "jump_url":"/path/to/page3" } else: res = {"status":2,"msg":"Invalid srcid"} payload = json_encode(res) print time.asctime(), "Res json %s" % payload.decode("unicode_escape") jwetoken = jwe.JWE(plaintext=payload, protected=json_encode(jwetoken.jose_header), recipient=key) res_body = jwetoken.serialize(compact=True) self.send_response(200) self.end_headers() self.wfile.write(res_body)
if __name__ == '__main__': httpd = BaseHTTPServer.HTTPServer((HOST_NAME, PORT_NUMBER), Webhook) print time.asctime(), "Webhook Starts - http://%s:%s" % (HOST_NAME, PORT_NUMBER) try: httpd.serve_forever() except KeyboardInterrupt: pass httpd.server_close() print time.asctime(), "Webhook Stops - http://%s:%s" % (HOST_NAME, PORT_NUMBER)
|