Add unfinished website section

This commit is contained in:
Ske
2019-04-19 18:08:27 +02:00
parent d081be838a
commit 3d6fa86518
16 changed files with 3882 additions and 11 deletions

View File

@@ -43,6 +43,17 @@ async def auth_middleware(request, handler):
request["system"] = system
return await handler(request)
@web.middleware
async def cors_middleware(request, handler):
try:
resp = await handler(request)
except web.HTTPException as r:
resp = r
resp.headers["Access-Control-Allow-Origin"] = "*"
resp.headers["Access-Control-Allow-Methods"] = "GET, POST, PATCH"
resp.headers["Access-Control-Allow-Headers"] = "X-Token"
return resp
class Handlers:
@require_system
async def get_system(request):
@@ -52,14 +63,14 @@ class Handlers:
system_id = request.match_info.get("system")
system = await System.get_by_hid(request["conn"], system_id)
if not system:
raise web.HTTPNotFound()
raise web.HTTPNotFound(body="null")
return web.json_response(system.to_json())
async def get_system_members(request):
system_id = request.match_info.get("system")
system = await System.get_by_hid(request["conn"], system_id)
if not system:
raise web.HTTPNotFound()
raise web.HTTPNotFound(body="null")
members = await system.get_members(request["conn"])
return web.json_response([m.to_json() for m in members])
@@ -68,7 +79,7 @@ class Handlers:
system_id = request.match_info.get("system")
system = await System.get_by_hid(request["conn"], system_id)
if not system:
raise web.HTTPNotFound()
raise web.HTTPNotFound(body="null")
switches = await system.get_switches(request["conn"], 9999)
@@ -85,17 +96,17 @@ class Handlers:
system = await System.get_by_hid(request["conn"], system_id)
if not system:
raise web.HTTPNotFound()
raise web.HTTPNotFound(body="null")
members, stamp = await utils.get_fronters(request["conn"], system.id)
if not stamp:
# No switch has been registered at all
raise web.HTTPNotFound()
raise web.HTTPNotFound(body="null")
data = {
"timestamp": stamp.isoformat(),
"members": [member.to_json() for member in members]
}
}
return web.json_response(data)
@require_system
@@ -117,8 +128,11 @@ class Handlers:
member_id = request.match_info.get("member")
member = await Member.get_member_by_hid(request["conn"], None, member_id)
if not member:
raise web.HTTPNotFound()
return web.json_response(member.to_json())
raise web.HTTPNotFound(body="{}")
system = await System.get_by_id(request["conn"], member.system)
member_json = member.to_json()
member_json["system"] = system.to_json()
return web.json_response(member_json)
@require_system
async def post_member(request):
@@ -213,8 +227,9 @@ class Handlers:
return web.Response(text=await system.get_token(request["conn"]))
async def run():
app = web.Application(middlewares=[db_middleware, auth_middleware, error_middleware])
app = web.Application(middlewares=[cors_middleware, db_middleware, auth_middleware, error_middleware])
def cors_fallback(req):
return web.Response(headers={"Access-Control-Allow-Origin": "*", "Access-Control-Allow-Headers": "x-token", "Access-Control-Allow-Methods": "GET, POST, PATCH"}, status=404 if req.method != "OPTIONS" else 200)
app.add_routes([
web.get("/s", Handlers.get_system),
web.post("/s/switches", Handlers.post_switch),
@@ -227,7 +242,8 @@ async def run():
web.post("/m", Handlers.post_member),
web.patch("/m/{member}", Handlers.patch_member),
web.delete("/m/{member}", Handlers.delete_member),
web.post("/discord_oauth", Handlers.discord_oauth)
web.post("/discord_oauth", Handlers.discord_oauth),
web.route("*", "/{tail:.*}", cors_fallback)
])
app["pool"] = await db.connect(
os.environ["DATABASE_URI"]