diff --git a/auth/authenticate.py b/auth/authenticate.py index 3e587225..d01cefc3 100644 --- a/auth/authenticate.py +++ b/auth/authenticate.py @@ -12,7 +12,7 @@ from orm.user import User, Role from settings import SESSION_TOKEN_HEADER from auth.tokenstorage import SessionToken -from base.exceptions import InvalidToken, Unauthorized, OperationNotAllowed +from base.exceptions import InvalidToken, OperationNotAllowed class JWTAuthenticate(AuthenticationBackend): @@ -77,7 +77,10 @@ def login_required(func): auth: AuthCredentials = info.context["request"].auth # print(auth) if not auth or not auth.logged_in: - raise Unauthorized(auth.error_message or "Please login") + # raise Unauthorized(auth.error_message or "Please login") + return { + "error": "Please login first" + } return await func(parent, info, *args, **kwargs) return wrap diff --git a/auth/credentials.py b/auth/credentials.py index 2096450b..951769e8 100644 --- a/auth/credentials.py +++ b/auth/credentials.py @@ -2,7 +2,7 @@ from typing import List, Optional, Text from pydantic import BaseModel -from base.exceptions import Unauthorized +# from base.exceptions import Unauthorized class Permission(BaseModel): @@ -22,7 +22,10 @@ class AuthCredentials(BaseModel): async def permissions(self) -> List[Permission]: if self.user_id is None: - raise Unauthorized("Please login first") + # raise Unauthorized("Please login first") + return { + "error": "Please login first" + } else: # TODO: implement permissions logix print(self.user_id) diff --git a/auth/identity.py b/auth/identity.py index efcec0ec..bd343e6e 100644 --- a/auth/identity.py +++ b/auth/identity.py @@ -7,7 +7,7 @@ from sqlalchemy import or_ from auth.jwtcodec import JWTCodec from auth.tokenstorage import TokenStorage -from base.exceptions import InvalidPassword, InvalidToken +# from base.exceptions import InvalidPassword, InvalidToken from base.orm import local_session from orm import User from validations.auth import AuthInput @@ -56,9 +56,15 @@ class Identity: def password(orm_user: User, password: str) -> User: user = User(**orm_user.dict()) if not user.password: - raise InvalidPassword("User password is empty") + # raise InvalidPassword("User password is empty") + return { + "error": "User password is empty" + } if not Password.verify(password, user.password): - raise InvalidPassword("Wrong user password") + # raise InvalidPassword("Wrong user password") + return { + "error": "Wrong user password" + } return user @staticmethod @@ -84,15 +90,27 @@ class Identity: print('[auth.identity] using one time token') payload = JWTCodec.decode(token) if not await TokenStorage.exist(f"{payload.user_id}-{token}"): - raise InvalidToken("Login token has expired, please login again") + # raise InvalidToken("Login token has expired, please login again") + return { + "error": "Token has expired" + } except ExpiredSignatureError: - raise InvalidToken("Login token has expired, please try again") - except DecodeError as e: - raise InvalidToken("token format error") from e + # raise InvalidToken("Login token has expired, please try again") + return { + "error": "Token has expired" + } + except DecodeError: + # raise InvalidToken("token format error") from e + return { + "error": "Token format error" + } with local_session() as session: user = session.query(User).filter_by(id=payload.user_id).first() if not user: - raise Exception("user not exist") + # raise Exception("user not exist") + return { + "error": "User does not exist" + } if not user.emailConfirmed: user.emailConfirmed = True session.commit() diff --git a/services/inbox/presence.py b/services/inbox/presence.py index 84f76674..2815c998 100644 --- a/services/inbox/presence.py +++ b/services/inbox/presence.py @@ -1,4 +1,4 @@ -from base.exceptions import Unauthorized +# from base.exceptions import Unauthorized from auth.tokenstorage import SessionToken from base.redis import redis @@ -17,7 +17,10 @@ async def on_connect(req, params): return token = params.get('token') if not token: - raise Unauthorized("Please login") + # raise Unauthorized("Please login") + return { + "error": "Please login first" + } else: payload = await SessionToken.verify(token) if payload and payload.user_id: diff --git a/services/inbox/sse.py b/services/inbox/sse.py index f939d049..a73af840 100644 --- a/services/inbox/sse.py +++ b/services/inbox/sse.py @@ -2,7 +2,7 @@ from sse_starlette.sse import EventSourceResponse from starlette.requests import Request from graphql.type import GraphQLResolveInfo from resolvers.inbox.messages import message_generator -from base.exceptions import Unauthorized +# from base.exceptions import Unauthorized # https://github.com/enisdenjo/graphql-sse/blob/master/PROTOCOL.md @@ -16,4 +16,7 @@ async def sse_messages(request: Request): event_generator = await message_generator(None, info) return EventSourceResponse(event_generator) else: - raise Unauthorized("Please login") + # raise Unauthorized("Please login") + return { + "error": "Please login first" + }