60 lines
2.1 KiB
Python
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
|
|
)
|