diff --git a/src/controller/authController.py b/src/controller/authController.py index fa5073a..88ba68a 100644 --- a/src/controller/authController.py +++ b/src/controller/authController.py @@ -152,15 +152,19 @@ async def update_user_password(data: authSchema.ResetPasswordUpdate, db: Session if not user: raise HTTPException(status_code=404, detail=errorMessages.USER_NOT_FOUND) + # Valida a senha informada if data.password and not security.validate_password(data.password): raise HTTPException(status_code=400, detail=errorMessages.INVALID_PASSWORD) + # Verifica se o usuario possui um reset code. Se não possuir, a solicitação é invalida e deve ser bloqueada if not user.password_reset_code: raise HTTPException(status_code=401, detail=errorMessages.INVALID_REQUEST) - + + # Verifica se o código corresponde if data.code != user.password_reset_code: raise HTTPException(status_code=400, detail=errorMessages.INVALID_RESET_PASSWORD_CODE) + # Faz procedimento de hash da senha e atualiza usuario hashed_password = security.get_password_hash(data.password) updated_user = userRepository.update_password(db, user, hashed_password) diff --git a/src/controller/userController.py b/src/controller/userController.py index 21756b9..da27673 100644 --- a/src/controller/userController.py +++ b/src/controller/userController.py @@ -71,6 +71,8 @@ async def delete_user(user_id: int, db: Session = Depends(get_db), token: dict = @user.patch("/role/{user_id}", response_model=userSchema.User) def update_role(user_id: int, db: Session = Depends(get_db), token: dict = Depends(security.verify_token)): + # Obtem email do usuario a partir de token. + # Verifica se o usuário é ADMIN user = userRepository.get_user_by_email(db, email=token['email']) if user.role != enumeration.UserRole.ADMIN.value: raise HTTPException(status_code=401, detail=errorMessages.NO_PERMISSION) @@ -81,6 +83,7 @@ def update_role(user_id: int, db: Session = Depends(get_db), token: dict = Depen if not user: raise HTTPException(status_code=404, detail=errorMessages.USER_NOT_FOUND) + # Obtem o valor da outra role e atribui a outra role para o usuario. Caso ele seja um USER => ADMIN, caso seja ADMIN => USER new_role = enumeration.UserRole.ADMIN.value if user.role == enumeration.UserRole.USER.value else enumeration.UserRole.USER.value user = userRepository.update_user_role(db, db_user=user, role=new_role) diff --git a/src/repository/userRepository.py b/src/repository/userRepository.py index b6313d9..7422d77 100644 --- a/src/repository/userRepository.py +++ b/src/repository/userRepository.py @@ -7,12 +7,25 @@ from domain import userSchema from model import userModel +# Obtem usuario a partir do seu ID def get_user(db: Session, user_id: int): return db.query(userModel.User).filter(userModel.User.id == user_id).first() +# Obtem usuario a partir do Email def get_user_by_email(db: Session, email: str): return db.query(userModel.User).filter(userModel.User.email == email).first() +''' +Obtem lista de usuarios. Possui filtragem: +Filtros: +name: filtrar por nome do usuario +email: filtrar por email do usuario +name_or_email: filtragem que aceita tanto nome quanto email (OR) +connection: filtragem pelo vinculo do usuario + +Também aceita offset e limit. Para offset pula a quantidade informada, +para o limit, controla a quantidade de usuarios retornada +''' def get_users(db: Session, users_filter: userSchema.UserListFilter): query = db.query(userModel.User) @@ -26,15 +39,20 @@ def get_users(db: Session, users_filter: userSchema.UserListFilter): if (users_filter.connection): query = query.filter(userModel.User.connection == users_filter.connection) + # Realiza o count para retornar para o front para realizar paginação total_count = query.count() + # Ordena a lista de usuarios por ordem alfabetica pelo nome query = query.order_by(userModel.User.name.asc()) + # Realiza a delimitação por offset if (users_filter.offset): query = query.offset(users_filter.offset) + # Realiza a limitação por quantidade retornada if (users_filter.limit): query = query.limit(users_filter.limit) + # Retorna todos os usuarios filtrados, dentro de eventuais limitações (offset ou limit) e o total (geral) return { "users": query.all(), "total": total_count } def create_user(db: Session, name, connection, email, password, activation_code): @@ -44,6 +62,7 @@ def create_user(db: Session, name, connection, email, password, activation_code) db.refresh(db_user) return db_user +# Cria um usuario por login social. Essa criação é especial pois o usuario criado por rede social não possui SENHA def create_user_social(db: Session, name, email): db_user = userModel.User( name=name,