fully implemented project
This commit is contained in:
63
app/handler.py
Normal file
63
app/handler.py
Normal file
@@ -0,0 +1,63 @@
|
||||
from http.server import BaseHTTPRequestHandler
|
||||
import urllib.parse as urllib
|
||||
import logger
|
||||
|
||||
def generate_class(response_callback):
|
||||
class Handler(BaseHTTPRequestHandler):
|
||||
def _send_error(self, code: int, message: str):
|
||||
self.send_response(code)
|
||||
self.send_header("Content-Type", "text/plain")
|
||||
self.end_headers()
|
||||
self.wfile.write(message.encode("utf-8"))
|
||||
|
||||
def _handle_request(self):
|
||||
host = self.client_address[0]
|
||||
method = self.command
|
||||
url = urllib.urlparse(self.path)
|
||||
path = url.path
|
||||
query = urllib.parse_qs(url.query)
|
||||
|
||||
if method != "GET" or path != "/calendar.ics":
|
||||
logger.info("Invalid " + method + " request on " + path + " from " + host)
|
||||
self._send_error(404, "Invalid endpoint")
|
||||
return
|
||||
|
||||
logger.info("Received calendar request from " + host)
|
||||
|
||||
td_group = (query.get("td") or ["all"])[0]
|
||||
sh_group = (query.get("sh") or ["all"])[0]
|
||||
|
||||
response = response_callback(td_group, sh_group)
|
||||
if not response:
|
||||
self._send_error(500, "Unable to generate calendar")
|
||||
return
|
||||
|
||||
logger.info("Generated calendar for " + host)
|
||||
|
||||
self.send_response(200)
|
||||
self.send_header("Content-Type", "text/calendar")
|
||||
self.end_headers()
|
||||
self.wfile.write(response.encode("utf-8"))
|
||||
|
||||
def do_GET(self):
|
||||
self._handle_request()
|
||||
|
||||
def do_POST(self):
|
||||
self._handle_request()
|
||||
|
||||
def do_PUT(self):
|
||||
self._handle_request()
|
||||
|
||||
def do_DELETE(self):
|
||||
self._handle_request()
|
||||
|
||||
def do_PATCH(self):
|
||||
self._handle_request()
|
||||
|
||||
def do_OPTIONS(self):
|
||||
self._handle_request()
|
||||
|
||||
def log_message(self, fmt, *args):
|
||||
return
|
||||
|
||||
return Handler
|
||||
Reference in New Issue
Block a user