auth status coded

This commit is contained in:
tonyrewin 2022-09-05 19:12:49 +03:00
parent 10960ede1c
commit 9519876d05
2 changed files with 17 additions and 11 deletions

View File

@ -1,5 +1,5 @@
from auth.password import Password from auth.password import Password
from base.exceptions import InvalidPassword, ObjectNotExist from base.exceptions import InvalidPassword
from orm import User as OrmUser from orm import User as OrmUser
from base.orm import local_session from base.orm import local_session
from auth.validations import User from auth.validations import User
@ -11,8 +11,8 @@ class Identity:
@staticmethod @staticmethod
def identity(orm_user: OrmUser, password: str) -> User: def identity(orm_user: OrmUser, password: str) -> User:
user = User(**orm_user.dict()) user = User(**orm_user.dict())
if user.password is None: if not user.password:
raise InvalidPassword("Wrong user password") raise InvalidPassword("User password is empty")
if not Password.verify(password, user.password): if not Password.verify(password, user.password):
raise InvalidPassword("Wrong user password") raise InvalidPassword("Wrong user password")
return user return user

View File

@ -10,7 +10,7 @@ from orm import User, Role
from base.orm import local_session from base.orm import local_session
from base.resolvers import mutation, query from base.resolvers import mutation, query
from resolvers.profile import get_user_info from resolvers.profile import get_user_info
from base.exceptions import InvalidPassword, InvalidToken from base.exceptions import InvalidPassword, InvalidToken, ObjectNotExist, OperationNotAllowed
from settings import JWT_AUTH_HEADER from settings import JWT_AUTH_HEADER
@ -23,6 +23,7 @@ async def confirm(*_, confirm_token):
user.save() user.save()
return {"token": auth_token, "user": user} return {"token": auth_token, "user": user}
else: else:
# not an error, warns user
return {"error": "email not confirmed"} return {"error": "email not confirmed"}
@ -32,7 +33,8 @@ async def register(*_, email: str, password: str = ""):
with local_session() as session: with local_session() as session:
user = session.query(User).filter(User.email == email).first() user = session.query(User).filter(User.email == email).first()
if user: if user:
return {"error": "user already exist"} raise OperationNotAllowed("User already exist")
# return {"error": "user already exist"}
user_dict = {"email": email} user_dict = {"email": email}
username = email.split("@")[0] username = email.split("@")[0]
@ -59,7 +61,7 @@ async def auth_forget(_, info, email):
with local_session() as session: with local_session() as session:
user = session.query(User).filter(User.email == email).first() user = session.query(User).filter(User.email == email).first()
if not user: if not user:
return {"error": "user not exist"} raise ObjectNotExist("User not found")
await send_reset_password_email(user) await send_reset_password_email(user)
@ -72,12 +74,13 @@ async def auth_reset(_, info, password, resetToken):
try: try:
user_id = await ResetPassword.verify(resetToken) user_id = await ResetPassword.verify(resetToken)
except InvalidToken as e: except InvalidToken as e:
return {"error": e.message} raise InvalidToken(e.message)
# return {"error": e.message}
with local_session() as session: with local_session() as session:
user = session.query(User).filter_by(id=user_id).first() user = session.query(User).filter_by(id=user_id).first()
if not user: if not user:
return {"error": "user not exist"} raise ObjectNotExist("User not found")
user.password = Password.encode(password) user.password = Password.encode(password)
session.commit() session.commit()
@ -91,14 +94,16 @@ async def login(_, info: GraphQLResolveInfo, email: str, password: str = ""):
orm_user = session.query(User).filter(User.email == email).first() orm_user = session.query(User).filter(User.email == email).first()
if orm_user is None: if orm_user is None:
print(f"signIn {email}: email not found") print(f"signIn {email}: email not found")
return {"error": "email not found"} # return {"error": "email not found"}
raise ObjectNotExist("User not found")
if not password: if not password:
print(f"signIn {email}: send auth email") print(f"signIn {email}: send auth email")
await send_auth_email(orm_user) await send_auth_email(orm_user)
return {} return {""}
if not orm_user.emailConfirmed: if not orm_user.emailConfirmed:
# not an error, warns users
return {"error": "email not confirmed"} return {"error": "email not confirmed"}
try: try:
@ -111,7 +116,8 @@ async def login(_, info: GraphQLResolveInfo, email: str, password: str = ""):
user = Identity.identity(orm_user, password) user = Identity.identity(orm_user, password)
except InvalidPassword: except InvalidPassword:
print(f"signIn {email}: invalid password") print(f"signIn {email}: invalid password")
return {"error": "invalid password"} raise InvalidPassword("invalid passoword")
# return {"error": "invalid password"}
token = await Authorize.authorize(user, device=device, auto_delete=auto_delete) token = await Authorize.authorize(user, device=device, auto_delete=auto_delete)
print(f"signIn {email}: OK") print(f"signIn {email}: OK")