wip refactoring: reactions, storages isolated

This commit is contained in:
2022-07-21 14:58:50 +03:00
parent edcefadeab
commit 6cb5061ce5
43 changed files with 1674 additions and 1779 deletions

View File

@@ -9,10 +9,11 @@ from starlette.authentication import AuthenticationBackend
from starlette.requests import HTTPConnection
from auth.credentials import AuthCredentials, AuthUser
from auth.token import Token
from auth.jwtcodec import JWTCodec
from auth.authorize import Authorize, TokenStorage
from exceptions import InvalidToken, OperationNotAllowed
from orm import User, UserStorage
from orm.user import User
from storages.users import UserStorage
from orm.base import local_session
from redis import redis
from settings import JWT_AUTH_HEADER, EMAIL_TOKEN_LIFE_SPAN
@@ -32,9 +33,9 @@ class _Authenticate:
token is of specified type
"""
try:
payload = Token.decode(token)
payload = JWTCodec.decode(token)
except ExpiredSignatureError:
payload = Token.decode(token, verify_exp=False)
payload = JWTCodec.decode(token, verify_exp=False)
if not await cls.exists(payload.user_id, token):
raise InvalidToken("Login expired, please login again")
if payload.device == "mobile": # noqa
@@ -109,14 +110,14 @@ class ResetPassword:
@staticmethod
async def get_reset_token(user):
exp = datetime.utcnow() + timedelta(seconds=EMAIL_TOKEN_LIFE_SPAN)
token = Token.encode(user, exp=exp, device="pc")
token = JWTCodec.encode(user, exp=exp, device="pc")
await TokenStorage.save(f"{user.id}-reset-{token}", EMAIL_TOKEN_LIFE_SPAN, True)
return token
@staticmethod
async def verify(token):
try:
payload = Token.decode(token)
payload = JWTCodec.decode(token)
except ExpiredSignatureError:
raise InvalidToken("Login expired, please login again")
except DecodeError as e:

View File

@@ -1,6 +1,6 @@
from datetime import datetime, timedelta
from auth.token import Token
from auth.jwtcodec import JWTCodec
from redis import redis
from settings import JWT_LIFE_SPAN
from auth.validations import User
@@ -22,14 +22,14 @@ class Authorize:
@staticmethod
async def authorize(user: User, device: str = "pc", life_span = JWT_LIFE_SPAN, auto_delete=True) -> str:
exp = datetime.utcnow() + timedelta(seconds=life_span)
token = Token.encode(user, exp=exp, device=device)
token = JWTCodec.encode(user, exp=exp, device=device)
await TokenStorage.save(f"{user.id}-{token}", life_span, auto_delete)
return token
@staticmethod
async def revoke(token: str) -> bool:
try:
payload = Token.decode(token)
payload = JWTCodec.decode(token)
except: # noqa
pass
else:

View File

@@ -19,7 +19,7 @@ def load_email_templates():
filename = "templates/%s.tmpl" % name
with open(filename) as f:
email_templates[name] = f.read()
print("[email.service] templates loaded")
print("[auth.email] templates loaded")
async def send_confirm_email(user):
text = email_templates["confirm_email"]

View File

@@ -1,12 +1,10 @@
from datetime import datetime
import jwt
from settings import JWT_ALGORITHM, JWT_SECRET_KEY
from auth.validations import PayLoad, User
class Token:
class JWTCodec:
@staticmethod
def encode(user: User, exp: datetime, device: str = "pc") -> str:
payload = {"user_id": user.id, "device": device, "exp": exp, "iat": datetime.utcnow()}