def create_pessoa(db: Session, pessoa: schemas.PessoaCreate) -> schemas.Pessoa: ''' Cria pessoa Entrada: Esquema de Pessoa Saída: Esquema da Pessoa Criada Exceções: ''' password = get_password_hash(pessoa.senha) db_pessoa = models.Pessoa( nome=pessoa.nome, email=pessoa.email, telefone=pessoa.telefone, usuario=pessoa.usuario, ativo=pessoa.ativo, superusuario=pessoa.superusuario, senha=password, data_nascimento=pessoa.data_nascimento, foto_perfil=pessoa.foto_perfil, colaborador=pessoa.colaborador, aliado=pessoa.aliado, idealizador=pessoa.idealizador, ) db.add(db_pessoa) db.commit() db.refresh(db_pessoa) return db_pessoa
async def edit_pessoa(db: Session, pessoa_id: int, pessoa: schemas.PessoaEdit) -> schemas.Pessoa: ''' Edita pessoa já existente Entrada: ID, esquema de pessoa Saída: Esquema da Pessoa Editada Exceções: Pessoa não encontrada : Email já cadastrado ''' db_pessoa = get_pessoa_by_id(db, pessoa_id) update_data = pessoa.dict(exclude_unset=True) if "senha" in update_data.keys(): update_data["senha"] = get_password_hash(pessoa.senha) if "email" in update_data.keys(): filtro = get_pessoa_by_email(db, update_data["email"]) if filtro: raise HTTPException(status_code=409, detail="Email já cadastrado") await append_areas(update_data, db) await append_habilidades(update_data, db) for key, value in update_data.items(): setattr(db_pessoa, key, value) db.add(db_pessoa) db.commit() db.refresh(db_pessoa) return db_pessoa
def authenticate_facebook(db, pessoa: schemas.PessoaCreateFacebook): try: credentialsException = HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail=f"Não foi possível validar as credenciais", headers={"WWW-Authenticate": "Bearer"}, ) db_pessoa = get_pessoa_by_email(db, pessoa.email) db_pessoa = get_pessoa_by_username(db, pessoa.nome) password = passwords.get_password_hash(passwords.get_random_string()) if db_pessoa is None: # User not registered, creating a new account new_pessoa = create_pessoa( db, schemas.PessoaCreate( email=pessoa.email, nome=pessoa.nome, usuario=pessoa.nome, senha=password, ativo=True, superusuario=False, )) return new_pessoa else: # User is already registered, returning return db_pessoa except ValueError: raise credentialsException
def store_image(image, image_id): name = get_password_hash(image_id) + ".png" image_name = name.replace('/', '') try: pil_image = np.array(Image.open(BytesIO(image))) Image.fromarray(pil_image).save(path / f"{image_name}") return image_name except Exception as e: print(f'Exception from store_image {e}')
async def edit_pessoa(db: Session, pessoa_id: int, pessoa: schemas.PessoaEdit) -> schemas.Pessoa: """ Edits pessoa on database. Tries to find the person in the database, if it finds, updates each field that was send with new information to the database. Args: db: Database Local Session. sqlalchemy.orm.sessionmaker instance. pessoa_id: Integer representing the pessoa id. Integer. pessoa: New data to use on update of pessoa. Schema from PessoaEdit. Returns: A dict of pessoa with the updated values. For example: old_pessoa: { id: 1, nome: "Lucas" } db_pessoa: { id: 1, nome: "Luis" } Raises: HTTPException: No person corresponds to pessoa_id in the database. """ db_pessoa = get_pessoa(db, pessoa_id) if not db_pessoa: raise HTTPException(status.HTTP_404_NOT_FOUND, detail="pessoa não encontrada") update_data = pessoa.dict(exclude_unset=True) if "senha" in update_data.keys(): update_data["senha"] = get_password_hash(pessoa.senha) del update_data["senha"] if "email" in update_data.keys(): filtro = db.query(models.Pessoa)\ .filter(models.Pessoa.email == update_data["email"])\ .first() if filtro: raise HTTPException(status_code=409, detail="Email já cadastrado") await append_areas(update_data, db) await append_habilidades(update_data, db) for key, value in update_data.items(): setattr(db_pessoa, key, value) db.add(db_pessoa) db.commit() db.refresh(db_pessoa) return db_pessoa
def authenticate_google(db, token: str): try: credentialsException = HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail=f"Não foi possível validar as credenciais", headers={"WWW-Authenticate": "Bearer"}, ) GOOGLE_CLIENT_ID = os.getenv("GOOGLE_CLIENT_ID") # Specify the CLIENT_ID of the app that accesses the backend: idinfo = id_token.verify_oauth2_token(token, requests.Request(), GOOGLE_CLIENT_ID) issuers = ['accounts.google.com', 'https://accounts.google.com'] if idinfo['iss'] not in issuers: raise ValueError('Wrong issuer.') # Get user info email, name, picture = idinfo['email'], idinfo['name'], idinfo[ 'picture'] # Checking if the user is already in the system pessoa = get_pessoa_by_email(db, email) pessoa = get_pessoa_by_username(db, name) password = passwords.get_password_hash(passwords.get_random_string()) if pessoa is None: # User not registered, creating a new account while True: nome_usuario = pessoa.nome.replace(' ', '').lower() + str( int(time.time())) username_existe = get_pessoa_by_username(db, nome_usuario) if not username_existe: break new_pessoa = create_pessoa( db, schemas.PessoaCreate( email=email, nome=name, usuario=nome_usuario, senha=password, ativo=True, superusuario=False, )) return new_pessoa else: # User is already registered, returning return pessoa except ValueError: raise credentialsException
def create_pessoa(db: Session, pessoa: schemas.PessoaCreate) -> schemas.Pessoa: password = get_password_hash(pessoa.senha) db_pessoa = models.Pessoa( nome=pessoa.nome, email=pessoa.email, telefone=pessoa.telefone, usuario=pessoa.usuario, ativo=pessoa.ativo, superusuario=pessoa.superusuario, senha=password, data_nascimento=pessoa.data_nascimento, foto_perfil=pessoa.foto_perfil, ) db.add(db_pessoa) db.commit() db.refresh(db_pessoa) return db_pessoa
async def edit_senha_pessoa(db: Session, token: str, senha: str) -> schemas.Pessoa: db_pessoa = db.query(models.Pessoa)\ .filter(models.Pessoa.token_senha == token)\ .first() if not db_pessoa: raise HTTPException(status_code=404, detail="Token não encontrado") db_pessoa.senha = get_password_hash(senha) db_pessoa.token_senha = None db_pessoa.expiracao_token = None db.add(db_pessoa) db.commit() db.refresh(db_pessoa) return db_pessoa