mirror of
https://github.com/aljazceru/enclava.git
synced 2025-12-17 07:24:34 +01:00
@@ -61,9 +61,16 @@ class UserRegisterRequest(BaseModel):
|
|||||||
|
|
||||||
|
|
||||||
class UserLoginRequest(BaseModel):
|
class UserLoginRequest(BaseModel):
|
||||||
email: EmailStr
|
email: Optional[EmailStr] = None
|
||||||
|
username: Optional[str] = None
|
||||||
password: str
|
password: str
|
||||||
|
|
||||||
|
@validator('email')
|
||||||
|
def validate_email_or_username(cls, v, values):
|
||||||
|
if v is None and not values.get('username'):
|
||||||
|
raise ValueError('Either email or username must be provided')
|
||||||
|
return v
|
||||||
|
|
||||||
|
|
||||||
class TokenResponse(BaseModel):
|
class TokenResponse(BaseModel):
|
||||||
access_token: str
|
access_token: str
|
||||||
@@ -161,10 +168,12 @@ async def login(
|
|||||||
):
|
):
|
||||||
"""Login user and return access tokens"""
|
"""Login user and return access tokens"""
|
||||||
|
|
||||||
|
# Determine identifier for logging and user lookup
|
||||||
|
identifier = user_data.email if user_data.email else user_data.username
|
||||||
logger.info(
|
logger.info(
|
||||||
"LOGIN_DEBUG_START",
|
"LOGIN_DEBUG_START",
|
||||||
request_time=datetime.utcnow().isoformat(),
|
request_time=datetime.utcnow().isoformat(),
|
||||||
email=user_data.email,
|
identifier=identifier,
|
||||||
database_url="SET" if settings.DATABASE_URL else "NOT SET",
|
database_url="SET" if settings.DATABASE_URL else "NOT SET",
|
||||||
jwt_secret="SET" if settings.JWT_SECRET else "NOT SET",
|
jwt_secret="SET" if settings.JWT_SECRET else "NOT SET",
|
||||||
admin_email=settings.ADMIN_EMAIL,
|
admin_email=settings.ADMIN_EMAIL,
|
||||||
@@ -173,10 +182,15 @@ async def login(
|
|||||||
|
|
||||||
start_time = datetime.utcnow()
|
start_time = datetime.utcnow()
|
||||||
|
|
||||||
# Get user by email
|
# Get user by email or username
|
||||||
logger.info("LOGIN_USER_QUERY_START")
|
logger.info("LOGIN_USER_QUERY_START")
|
||||||
query_start = datetime.utcnow()
|
query_start = datetime.utcnow()
|
||||||
|
|
||||||
|
if user_data.email:
|
||||||
stmt = select(User).where(User.email == user_data.email)
|
stmt = select(User).where(User.email == user_data.email)
|
||||||
|
else:
|
||||||
|
stmt = select(User).where(User.username == user_data.username)
|
||||||
|
|
||||||
result = await db.execute(stmt)
|
result = await db.execute(stmt)
|
||||||
query_end = datetime.utcnow()
|
query_end = datetime.utcnow()
|
||||||
logger.info(
|
logger.info(
|
||||||
@@ -187,7 +201,7 @@ async def login(
|
|||||||
user = result.scalar_one_or_none()
|
user = result.scalar_one_or_none()
|
||||||
|
|
||||||
if not user:
|
if not user:
|
||||||
logger.warning("LOGIN_USER_NOT_FOUND", email=user_data.email)
|
logger.warning("LOGIN_USER_NOT_FOUND", identifier=identifier)
|
||||||
# List available users for debugging
|
# List available users for debugging
|
||||||
try:
|
try:
|
||||||
all_users_stmt = select(User).limit(5)
|
all_users_stmt = select(User).limit(5)
|
||||||
|
|||||||
Reference in New Issue
Block a user