fix: login with google is done
This commit is contained in:
parent
fab1cea611
commit
d63bf3e713
|
@ -9,3 +9,6 @@ app/**/*.pyo
|
||||||
.env
|
.env
|
||||||
|
|
||||||
.venv
|
.venv
|
||||||
|
|
||||||
|
|
||||||
|
logs/
|
||||||
|
|
|
@ -16,20 +16,39 @@ class LoggerConfig:
|
||||||
if not os.path.exists(LoggerConfig.LOG_DIR):
|
if not os.path.exists(LoggerConfig.LOG_DIR):
|
||||||
os.makedirs(LoggerConfig.LOG_DIR)
|
os.makedirs(LoggerConfig.LOG_DIR)
|
||||||
|
|
||||||
# Separate loggers for different levels
|
# Remove default handlers to prevent duplicate logging
|
||||||
LoggerConfig._setup_logger(app.logger, "info.log", logging.INFO)
|
for handler in app.logger.handlers[:]:
|
||||||
LoggerConfig._setup_logger(app.logger, "error.log", logging.ERROR)
|
app.logger.removeHandler(handler)
|
||||||
LoggerConfig._setup_logger(app.logger, "warning.log", logging.WARNING)
|
|
||||||
|
|
||||||
|
# Create separate loggers
|
||||||
|
info_logger = LoggerConfig._setup_logger(
|
||||||
|
"info_logger", "info.log", logging.INFO, logging.WARNING
|
||||||
|
)
|
||||||
|
error_logger = LoggerConfig._setup_logger(
|
||||||
|
"error_logger", "error.log", logging.ERROR, logging.CRITICAL
|
||||||
|
)
|
||||||
|
warning_logger = LoggerConfig._setup_logger(
|
||||||
|
"warning_logger", "warning.log", logging.WARNING, logging.WARNING
|
||||||
|
)
|
||||||
|
|
||||||
|
# Attach handlers to Flask app logger
|
||||||
|
app.logger.addHandler(info_logger)
|
||||||
|
app.logger.addHandler(error_logger)
|
||||||
|
app.logger.addHandler(warning_logger)
|
||||||
|
|
||||||
|
app.logger.setLevel(logging.DEBUG) # Set lowest level to capture all logs
|
||||||
app.logger.info("Logger has been initialized for Flask application.")
|
app.logger.info("Logger has been initialized for Flask application.")
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _setup_logger(logger, filename, level):
|
def _setup_logger(name, filename, level, max_level):
|
||||||
"""Helper method to configure loggers for specific levels."""
|
"""Helper method to configure loggers for specific levels."""
|
||||||
|
logger = logging.getLogger(name)
|
||||||
|
logger.setLevel(level)
|
||||||
log_file_path = os.path.join(LoggerConfig.LOG_DIR, filename)
|
log_file_path = os.path.join(LoggerConfig.LOG_DIR, filename)
|
||||||
log_handler = RotatingFileHandler(log_file_path, maxBytes=100000, backupCount=3)
|
log_handler = RotatingFileHandler(log_file_path, maxBytes=100000, backupCount=3)
|
||||||
log_handler.setLevel(level)
|
log_handler.setLevel(level)
|
||||||
log_formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
|
log_formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
|
||||||
log_handler.setFormatter(log_formatter)
|
log_handler.setFormatter(log_formatter)
|
||||||
|
log_handler.addFilter(lambda record: level <= record.levelno <= max_level)
|
||||||
logger.addHandler(log_handler)
|
logger.addHandler(log_handler)
|
||||||
|
return log_handler
|
||||||
|
|
|
@ -4,6 +4,7 @@ from schemas.basic_response_schema import ResponseSchema
|
||||||
from schemas.google_login_schema import GoogleLoginSchema
|
from schemas.google_login_schema import GoogleLoginSchema
|
||||||
from schemas import LoginSchema
|
from schemas import LoginSchema
|
||||||
from services import UserService, AuthService
|
from services import UserService, AuthService
|
||||||
|
from core import AuthException
|
||||||
|
|
||||||
|
|
||||||
class AuthController:
|
class AuthController:
|
||||||
|
@ -38,7 +39,6 @@ class AuthController:
|
||||||
)
|
)
|
||||||
return jsonify(response.model_dump()), 401
|
return jsonify(response.model_dump()), 401
|
||||||
|
|
||||||
# Jika berhasil, kembalikan data user tanpa meta
|
|
||||||
response = ResponseSchema(
|
response = ResponseSchema(
|
||||||
message="Login successful",
|
message="Login successful",
|
||||||
data=user_info,
|
data=user_info,
|
||||||
|
@ -51,6 +51,11 @@ class AuthController:
|
||||||
response = ResponseSchema(message="Invalid input", data=None, meta=None)
|
response = ResponseSchema(message="Invalid input", data=None, meta=None)
|
||||||
return jsonify(response.model_dump()), 400
|
return jsonify(response.model_dump()), 400
|
||||||
|
|
||||||
|
except AuthException as e:
|
||||||
|
current_app.logger.error(f"Auth error: {e}")
|
||||||
|
response = ResponseSchema(message=e, data=None, meta=None)
|
||||||
|
return jsonify(response.model_dump()), 400
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
current_app.logger.error(
|
current_app.logger.error(
|
||||||
f"Error during Google login: {str(e)}", exc_info=True
|
f"Error during Google login: {str(e)}", exc_info=True
|
||||||
|
|
|
@ -25,8 +25,9 @@ class UserRepository:
|
||||||
return user
|
return user
|
||||||
|
|
||||||
def get_by_google_id(self, google_id: str) -> Optional[UserEntity]:
|
def get_by_google_id(self, google_id: str) -> Optional[UserEntity]:
|
||||||
user = self.collection.find_one({"google_id": google_id})
|
user_data = self.collection.find_one({"google_id": google_id})
|
||||||
return user
|
|
||||||
|
return UserEntity(**user_data) if user_data else None
|
||||||
|
|
||||||
def insert_user(self, user_data: UserEntity) -> str:
|
def insert_user(self, user_data: UserEntity) -> str:
|
||||||
"""Menambahkan pengguna baru ke dalam database dan mengembalikan ID pengguna."""
|
"""Menambahkan pengguna baru ke dalam database dan mengembalikan ID pengguna."""
|
||||||
|
|
|
@ -5,6 +5,7 @@ from google.oauth2 import id_token
|
||||||
from google.auth.transport import requests
|
from google.auth.transport import requests
|
||||||
from configs import Config
|
from configs import Config
|
||||||
from core import AuthException
|
from core import AuthException
|
||||||
|
from flask import current_app
|
||||||
|
|
||||||
|
|
||||||
class AuthService:
|
class AuthService:
|
||||||
|
@ -26,6 +27,7 @@ class AuthService:
|
||||||
|
|
||||||
existing_user = self.user_repository.get_by_google_id(google_id)
|
existing_user = self.user_repository.get_by_google_id(google_id)
|
||||||
if existing_user:
|
if existing_user:
|
||||||
|
current_app.logger.info(f"User {existing_user.email} already exists ")
|
||||||
if existing_user.email == email:
|
if existing_user.email == email:
|
||||||
return existing_user
|
return existing_user
|
||||||
return AuthException("Email not match")
|
return AuthException("Email not match")
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
2025-03-19 11:48:56,950 - INFO - Logger has been initialized for Flask application.
|
|
||||||
2025-03-19 11:49:01,795 - INFO - Logger has been initialized for Flask application.
|
|
||||||
2025-03-19 11:49:06,664 - INFO - Logger has been initialized for Flask application.
|
|
Loading…
Reference in New Issue