openwebrx-clone/owrx/controllers/__init__.py

45 lines
1.7 KiB
Python
Raw Normal View History

from datetime import datetime, timezone
2020-02-23 18:29:17 +00:00
class Controller(object):
def __init__(self, handler, request, options):
self.handler = handler
self.request = request
self.options = options
2020-06-10 20:50:16 +00:00
def send_response(self, content, code=200, content_type="text/html", last_modified: datetime = None, max_age=None, headers=None):
self.handler.send_response(code)
2020-06-10 20:50:16 +00:00
if headers is None:
headers = {}
if content_type is not None:
2020-06-10 20:50:16 +00:00
headers["Content-Type"] = content_type
if last_modified is not None:
headers["Last-Modified"] = last_modified.astimezone(tz=timezone.utc).strftime("%a, %d %b %Y %H:%M:%S GMT")
if max_age is not None:
2020-09-04 12:46:27 +00:00
headers["Cache-Control"] = "max-age={0}".format(max_age)
2020-06-10 20:50:16 +00:00
for key, value in headers.items():
2020-07-09 19:32:57 +00:00
self.handler.send_header(key, value)
self.handler.end_headers()
if type(content) == str:
content = content.encode()
self.handler.wfile.write(content)
2020-02-23 20:39:12 +00:00
def send_redirect(self, location, code=303, cookies=None):
2020-02-23 18:23:18 +00:00
self.handler.send_response(code)
2020-02-23 20:39:12 +00:00
if cookies is not None:
self.handler.send_header("Set-Cookie", cookies.output(header=''))
2020-02-23 18:23:18 +00:00
self.handler.send_header("Location", location)
self.handler.end_headers()
2020-02-23 19:52:32 +00:00
def get_body(self):
if "Content-Length" not in self.handler.headers:
return None
length = int(self.handler.headers["Content-Length"])
return self.handler.rfile.read(length)
def handle_request(self):
action = "indexAction"
if "action" in self.options:
action = self.options["action"]
getattr(self, action)()