fix server

This commit is contained in:
bakatrouble 2025-07-31 03:14:05 +03:00
parent 1b3af70082
commit 973f432b53

View File

@ -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__':