aboutsummaryrefslogtreecommitdiff
path: root/python/noop_server.py
blob: c4de8f97de6dbde9c570a1d8c990394b31fed651 (plain)
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
#!/usr/bin/python

from StringIO import StringIO
from SocketServer import TCPServer
from inform import InformSerializer
from ConfigParser import SafeConfigParser
from SimpleHTTPServer import  SimpleHTTPRequestHandler


class Handler(SimpleHTTPRequestHandler):

    def __init__(self, *args, **kwargs):
        SimpleHTTPRequestHandler.__init__(self, *args, **kwargs)
        self.parser = InformSerializer(key_bag=get_keys("inform.cfg"))

    def _get_keys(self, filename):
        cfg = SafeConfigParser()
        cfg.read(filename)

        return dict((sect, cfg.get(sect, "authkey"))
                for sect in cfg.sections())

    def do_POST(self):
        length = int(self.headers['content-length'])
        body = StringIO(self.rfile.read(length))
        packet = self.parser.parse(body)

        noop_packet = packet.response_copy()
        noop_packet.payload = { "_type": "noop", "interval": 10 }

        buffer = StringIO(self.parser.serialize(noop_packet))

        self.send_response(200)
        self.send_header("Content-type", "application/x-binary")
        self.send_header("Connection", "close")
        self.send_header("User-Agent", "Unifi Controller")
        self.send_header("Content-Length", buffer.len)
        self.end_headers()

        return buffer


httpd = TCPServer(("", 9966), Handler)
print "serving on 9966"
httpd.serve_forever()