Пример #1
0
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
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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}')
Пример #5
0
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
Пример #6
0
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
Пример #7
0
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
Пример #8
0
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