TIF_E41211115_Genso_quiz_ba.../app/services/auth_service.py

60 lines
2.1 KiB
Python

import sys
from schemas import LoginSchema
from repositories import UserRepository
from models import ApiResponse
from google.oauth2 import id_token
from google.auth.transport import requests
from configs import Config
class AuthService:
def __init__(self, userRepository: UserRepository):
self.user_repository = userRepository
def verify_google_id_token(self, id_token_str):
try:
payload = id_token.verify_oauth2_token(
id_token_str, requests.Request(), Config.GOOGLE_CLIENT_ID
)
print(f"output verify {payload}", file=sys.stderr)
user_data = {
"_id": payload.get("sub"),
"email": payload.get("email"),
"name": payload.get("name"),
"picture": payload.get("picture"),
"given_name": payload.get("given_name"),
"family_name": payload.get("family_name"),
"locale": payload.get("locale"),
"email_verified": payload.get("email_verified", False),
"iat": payload.get("iat"),
"exp": payload.get("exp"),
}
return payload
except Exception as e:
print(f"issue on the verify {e}", file=sys.stderr)
return None
def login(self, data: LoginSchema):
try:
user_data = self.user_repository.get_user_by_email(data.email)
if user_data == None:
return ApiResponse(success=False, message="User not found", data=None)
if user_data["password"] == data.password:
del user_data["password"]
return ApiResponse(
success=True, message="Login success", data=user_data
)
return ApiResponse(success=False, message="Invalid password", data=None)
except Exception as e:
print(f"the issue is {e}")
return ApiResponse(
success=False, message="Internal server error", data=None
)