diff --git a/server.py b/server.py index cc89b6b..61e072a 100644 --- a/server.py +++ b/server.py @@ -5,7 +5,7 @@ from functools import wraps import dotenv import jwt -from sanic import Sanic, Unauthorized +from sanic import Sanic, Unauthorized, json as jsonr from sanic_ext import validate from sanic_ext.extensions.openapi import openapi from sanic_ext.extensions.openapi.definitions import RequestBody @@ -65,21 +65,21 @@ def protected(wrapped): }) ) @validate(json=LoginRequest) -async def login(request): - if not pbkdf2_sha256(10000, salt=b'salt').verify(request.json['password'], api_auth.get(request.json['username'])): +async def login(_, body: LoginRequest): + if not pbkdf2_sha256(10000, salt=b'salt').verify(body.password, api_auth.get(body.username)): return {'status': 'error', 'message': 'Invalid username or password'} - return { + return jsonr({ 'token': jwt.encode({}, api_secret, algorithm='HS256'), - } + }) @app.get('/api/subscriptions') @protected -async def get_subscriptions(request): +async def get_subscriptions(_): async with redis.conn as r: - return { + return jsonr({ 'subscriptions': await r.smembers(REDIS_SUBS_KEY), - } + }) @dataclass @@ -95,18 +95,17 @@ class UpdateSubscriptionRequest: ) @validate(json=UpdateSubscriptionRequest) @protected -async def delete_subscriptions(request): - data = request.json - requested_subs = {' '.join(sorted(sub.lower().split())) for sub in data['subs']} +async def delete_subscriptions(_, body: UpdateSubscriptionRequest): + requested_subs = {' '.join(sorted(sub.lower().split())) for sub in body.subs} async with redis.conn as r: subs = await get_subs(r) skipped = requested_subs - subs if skipped: - return {'status': 'error', 'message': 'Some subscriptions were not found', 'skipped': sorted(skipped)} + return jsonr({'status': 'error', 'message': 'Some subscriptions were not found', 'skipped': sorted(skipped)}) await r.srem(REDIS_SUBS_KEY, *requested_subs) - return {'status': 'ok', 'removed': sorted(requested_subs)} + return jsonr({'status': 'ok', 'removed': sorted(requested_subs)}) @app.post('/api/subscriptions') @@ -117,18 +116,17 @@ async def delete_subscriptions(request): ) @validate(json=UpdateSubscriptionRequest) @protected -async def add_subscriptions(request): - data = request.json - requested_subs = {' '.join(sorted(sub.lower().split())) for sub in data['subs']} +async def add_subscriptions(_, body: UpdateSubscriptionRequest): + requested_subs = {' '.join(sorted(sub.lower().split())) for sub in body.subs} async with redis.conn as r: subs = await get_subs(r) conflicts = requested_subs & subs if conflicts: - return {'status': 'error', 'message': 'Some subscriptions already exist', 'conflicts': sorted(conflicts)} - await r.sadd(REDIS_SUBS_KEY, *data['subs']) + return jsonr({'status': 'error', 'message': 'Some subscriptions already exist', 'conflicts': sorted(conflicts)}) + await r.sadd(REDIS_SUBS_KEY, *body.subs) - return {'status': 'ok', 'added': sorted(requested_subs)} + return jsonr({'status': 'ok', 'added': sorted(requested_subs)}) if __name__ == '__main__':