/
server.py
59 lines (49 loc) · 1.56 KB
/
server.py
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
from socketserver import ThreadingMixIn
from http.server import HTTPServer, BaseHTTPRequestHandler
import datetime
import ssl
import traceback
import threading
import json
import socket
from logger import getLogger
logger = getLogger(__name__)
class webHook(threading.Thread):
class ReqHandler(BaseHTTPRequestHandler):
def do_GET(self):
try:
self.send_response(200)
self.end_headers()
if self.path == '/' + self.token:
data = self.rfile.read(int(
self.headers['Content-Length'])).decode('utf-8')
data = json.loads(data)
logger.info('Received {}', data)
self.q.put(data)
except Exception as e:
logger.error('{} {}', e, datetime.datetime.now())
traceback.print_exc()
def do_POST(self):
self.do_GET()
class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
def get_request(self):
newsock, addr = self.socket.accept()
newsock = ssl.wrap_socket(
newsock,
certfile=self.certfile,
do_handshake_on_connect=False,
server_side=True)
timeout = newsock.gettimeout()
newsock.settimeout(2.)
newsock.do_handshake()
newsock.settimeout(timeout)
return newsock, addr
def __init__(self, conf, q):
threading.Thread.__init__(self)
self.ReqHandler.token = conf['bot']['token']
self.ReqHandler.q = q
httpd = self.ThreadedHTTPServer(('0.0.0.0', 8443), self.ReqHandler)
httpd.certfile = conf['web']['cert']
self.httpd = httpd
def run(self):
self.httpd.serve_forever()