44from src .db .models import User , RefreshToken
55from src .security import get_user , verify_password , generate_password_hash , generate_jwt_token , clear_auth_cookie , generate_session_id , invalidate_all_sessions
66from src .schemas import LoginRequestSchema , RegisterRequestSchema , LoginResponseSchema , UsernameUpdateSchema , EmailUpdateSchema , PasswordUpdateSchema
7- from src .utils import limiter
7+ from src .utils import limiter , get_user_ip
88from sqlalchemy .orm import Session
9+ from src .logger import logger
910
1011router = APIRouter ()
1112
1415def login (login : LoginRequestSchema , request : Request , response : Response , db : Session = Depends (get_db )):
1516 user = db .query (User ).filter (User .email == login .email ).first ()
1617 if not user :
18+ logger .warning (f"`/auth/login`: Tentativa de login com email inexistente\n ```Email: { login .email } \n IP: { get_user_ip (request )} | User-Agent: { request .headers .get ('User-Agent' )} ```" )
1719 raise HTTPException (status_code = 401 , detail = 'E-mail ou senha estão inválidos. Por favor, tente novamente.' )
1820
1921 if not verify_password (login .password , user .password ):
22+ logger .warning (f"`/auth/login`: Tentativa de login com senha inválida\n ```Email: { login .email } \n IP: { get_user_ip (request )} | User-Agent: { request .headers .get ('User-Agent' )} ```" )
2023 raise HTTPException (status_code = 401 , detail = 'E-mail ou senha estão inválidos. Por favor, tente novamente.' )
2124
2225 session_id = generate_session_id (response )
2326 token = generate_jwt_token (user .id , user .username , session_id , request , response , login .remember , db )
27+ logger .info (f"`/auth/login`: Login realizado com sucesso\n ```Email: { login .email } \n IP: { get_user_ip (request )} | User-Agent: { request .headers .get ('User-Agent' )} ```" )
2428 return {
2529 'access_token' : token ['access_token' ],
2630 'refresh_token' : token ['refresh_token' ],
@@ -35,12 +39,15 @@ def login(login: LoginRequestSchema, request: Request, response: Response, db: S
3539@limiter .limit ("3/minute;15/day" )
3640def register (register : RegisterRequestSchema , request : Request , response : Response , db : Session = Depends (get_db )):
3741 if register .password != register .confirm_password :
42+ logger .warning (f"`/auth/register`: Tentativa de registro com senhas diferentes\n ```Username: { register .username } - Email: { register .email } \n IP: { get_user_ip (request )} | User-Agent: { request .headers .get ('User-Agent' )} ```" )
3843 raise HTTPException (status_code = 400 , detail = 'As senhas não coincidem. Verifique se as senhas estão iguais.' )
3944
4045 if db .query (User ).filter (User .username == register .username ).first ():
46+ logger .warning (f"`/auth/register`: Tentativa de registro com username já existente\n ```Username: { register .username } - Email: { register .email } \n IP: { get_user_ip (request )} | User-Agent: { request .headers .get ('User-Agent' )} ```" )
4147 raise HTTPException (status_code = 409 , detail = 'Nome de usuário já registrado. Por favor, tente outro nome de usuário.' )
4248
4349 if db .query (User ).filter (User .email == register .email ).first ():
50+ logger .warning (f"`/auth/register`: Tentativa de registro com e-mail já existente\n ```Username: { register .username } - Email: { register .email } \n IP: { get_user_ip (request )} | User-Agent: { request .headers .get ('User-Agent' )} ```" )
4451 raise HTTPException (status_code = 409 , detail = 'E-mail já registrado. Por favor, tente outro e-mail.' )
4552
4653 user = User (username = register .username , email = register .email , password = generate_password_hash (register .password ))
@@ -50,6 +57,7 @@ def register(register: RegisterRequestSchema, request: Request, response: Respon
5057
5158 session_id = generate_session_id (response )
5259 token = generate_jwt_token (user .id , user .username , session_id , request , response , True , db )
60+ logger .info (f"`/auth/register`: Registro realizado com sucesso\n ```Username: { register .username } - Email: { register .email } \n IP: { get_user_ip (request )} | User-Agent: { request .headers .get ('User-Agent' )} ```" )
5361 return {
5462 'access_token' : token ['access_token' ],
5563 'refresh_token' : token ['refresh_token' ],
@@ -66,6 +74,7 @@ def logout(response: Response, request: Request, db: Session = Depends(get_db)):
6674 if session_id :
6775 db .query (RefreshToken ).filter (RefreshToken .session_id == session_id ).update ({'is_active' : False })
6876 db .commit ()
77+ logger .info (f"`/auth/logout`: Logout realizado com sucesso\n ```Session ID: { session_id } \n IP: { get_user_ip (request )} | User-Agent: { request .headers .get ('User-Agent' )} ```" )
6978
7079 clear_auth_cookie (response )
7180 return {'message' : 'Successfully logged out' }
@@ -82,6 +91,7 @@ def get_current_user(request: Request, response: Response, db: Session = Depends
8291def update_username (new : UsernameUpdateSchema , request : Request , response : Response , db : Session = Depends (get_db )):
8392 user = get_user (request , response , db )
8493 if not user :
94+ logger .warning (f"`/auth/me/username`: Tentativa com token inválido\n ```IP: { get_user_ip (request )} | User-Agent: { request .headers .get ('User-Agent' )} ```" )
8595 raise HTTPException (status_code = 401 , detail = 'Invalid token or user not found' )
8696
8797 if db .query (User ).filter (User .username == new .username ).first ():
@@ -90,13 +100,15 @@ def update_username(new: UsernameUpdateSchema, request: Request, response: Respo
90100 user_db = db .query (User ).filter (User .id == user ['id' ]).first ()
91101 user_db .username = new .username
92102 db .commit ()
103+ logger .info (f"`/auth/me/username`: Username atualizado com sucesso\n ```Username: { user ['username' ]} -> { new .username } \n Session ID: { request .cookies .get ('session_id' )} \n IP: { get_user_ip (request )} | User-Agent: { request .headers .get ('User-Agent' )} ```" )
93104 return {'message' : 'Username updated successfully' }
94105
95106@router .patch ('/me/email' )
96107@limiter .limit ("3/day" )
97108def update_email (new : EmailUpdateSchema , request : Request , response : Response , db : Session = Depends (get_db )):
98109 user = get_user (request , response , db )
99110 if not user :
111+ logger .warning (f"`/auth/me/email`: Tentativa com token inválido\n ```IP: { get_user_ip (request )} | User-Agent: { request .headers .get ('User-Agent' )} ```" )
100112 raise HTTPException (status_code = 401 , detail = 'Invalid token or user not found' )
101113
102114 if db .query (User ).filter (User .email == new .email ).first ():
@@ -106,13 +118,15 @@ def update_email(new: EmailUpdateSchema, request: Request, response: Response, d
106118 user_db .email = new .email
107119 db .commit ()
108120 invalidate_all_sessions (user ['id' ], request .cookies .get ('session_id' ), True , db )
121+ logger .info (f"`/auth/me/email`: E-mail atualizado com sucesso\n ```Email: { user ['email' ]} -> { new .email } \n Session ID: { request .cookies .get ('session_id' )} \n IP: { get_user_ip (request )} | User-Agent: { request .headers .get ('User-Agent' )} ```" )
109122 return {'message' : 'E-mail updated successfully' }
110123
111124@router .patch ('/me/password' )
112125@limiter .limit ("3/day" )
113126def update_password (new : PasswordUpdateSchema , request : Request , response : Response , db : Session = Depends (get_db )):
114127 user = get_user (request , response , db )
115128 if not user :
129+ logger .warning (f"`/auth/me/password`: Tentativa com token inválido\n ```IP: { get_user_ip (request )} | User-Agent: { request .headers .get ('User-Agent' )} ```" )
116130 raise HTTPException (status_code = 401 , detail = 'Invalid token or user not found' )
117131
118132 user_db = db .query (User ).filter (User .id == user ['id' ]).first ()
@@ -122,4 +136,5 @@ def update_password(new: PasswordUpdateSchema, request: Request, response: Respo
122136 user_db .password = generate_password_hash (new .password )
123137 db .commit ()
124138 invalidate_all_sessions (user ['id' ], request .cookies .get ('session_id' ), True , db )
139+ logger .info (f"`/auth/me/password`: Senha atualizada com sucesso\n ```Email: { user ['email' ]} - Session ID: { request .cookies .get ('session_id' )} \n IP: { get_user_ip (request )} | User-Agent: { request .headers .get ('User-Agent' )} ```" )
125140 return {'message' : 'Password updated successfully' }
0 commit comments