diff options
Diffstat (limited to 'python/noop_server.py')
-rw-r--r-- | python/noop_server.py | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/python/noop_server.py b/python/noop_server.py new file mode 100644 index 0000000..ebe3bda --- /dev/null +++ b/python/noop_server.py | |||
@@ -0,0 +1,45 @@ | |||
1 | #!/usr/bin/python | ||
2 | |||
3 | from StringIO import StringIO | ||
4 | from SocketServer import TCPServer | ||
5 | from inform import InformSerializer | ||
6 | from ConfigParser import SafeConfigParser | ||
7 | from SimpleHTTPServer import SimpleHTTPRequestHandler | ||
8 | |||
9 | |||
10 | class Handler(SimpleHTTPRequestHandler): | ||
11 | |||
12 | def __init__(self, *args, **kwargs): | ||
13 | super(SimpleHTTPServer, self).__init__(*args, **kwargs) | ||
14 | self.parser = InformSerializer(key_bag=get_keys("inform.cfg")) | ||
15 | |||
16 | def _get_keys(self, filename): | ||
17 | cfg = SafeConfigParser() | ||
18 | cfg.read(filename) | ||
19 | |||
20 | return dict((sect, cfg.get(sect, "authkey")) | ||
21 | for sect in cfg.sections()) | ||
22 | |||
23 | def do_POST(self): | ||
24 | length = int(self.headers['content-length']) | ||
25 | body = StringIO(self.rfile.read(length)) | ||
26 | packet = self.parser.parse(body) | ||
27 | |||
28 | noop_packet = packet.response_copy() | ||
29 | noop_packet.payload = { "_type": "noop", "interval": 10 } | ||
30 | |||
31 | buffer = StringIO(self.parser.serialize(noop_packet)) | ||
32 | |||
33 | self.send_response(200) | ||
34 | self.send_header("Content-type", "application/x-binary") | ||
35 | self.send_header("Connection", "close") | ||
36 | self.send_header("User-Agent", "Unifi Controller") | ||
37 | self.send_header("Content-Length", buffer.len) | ||
38 | self.end_headers() | ||
39 | |||
40 | return buffer | ||
41 | |||
42 | |||
43 | httpd = TCPServer(("", 9966), Handler) | ||
44 | print "serving on 9966" | ||
45 | httpd.serve_forever() | ||