Example #1
0
async def login_basic(auth: BasicAuth = Depends(basic_auth)):
    if not auth:
        response = Response(headers={"WWW-Authenticate": "Basic"},
                            status_code=401)
        return response

    try:
        decoded = base64.b64decode(auth).decode("ascii")
        username, _, password = decoded.partition(":")
        user = authenticate_user(users_db, username, password)
        if not user:
            raise HTTPException(status_code=400,
                                detail="Incorrect email or password")

        access_token_expires = timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)
        access_token = create_access_token(data={"sub": username},
                                           expires_delta=access_token_expires)

        token = jsonable_encoder(access_token)

        response = RedirectResponse(url="/docs")
        response.set_cookie(
            "Authorization",
            value=f"Bearer {token}",
            domain=getenv("WEB_HOSTNAME"),
            httponly=True,
            max_age=1800,
            expires=1800,
        )
        return response

    except Exception:
        response = Response(headers={"WWW-Authenticate": "Basic"},
                            status_code=401)
        return response
Example #2
0
def test_debtitem_list(api, ponydb, monkeypatch):
    def patched_auto_created(self):
        self.created = datetime.datetime(2019, 2, 7, 18, 22)

    def tomorrow_date():
        return (datetime.datetime.now() + datetime.timedelta(days=1)).date()

    user = ponydb.User(name='test', email='*****@*****.**', password='******')

    monkeypatch.setattr(ponydb.DebtItem, 'before_insert', patched_auto_created)

    ponydb.DebtItem(kind='debt',
                    due_date=tomorrow_date(),
                    who="Marcin",
                    what="Kniga",
                    user=user)
    commit()

    token = create_access_token(data={"username": user.name}).decode()

    r = api.get("/api/items", headers={'Authorization': f'Bearer {token}'})

    expected = [{
        "kind": 'debt',
        "created": "2019-02-07T18:22:00",
        "due_date": "2019-04-14",
        "who": "Marcin",
        "what": "Kniga",
        "resolved": False
    }]

    assert r.status_code == 200, r.json()

    assert r.json() == expected
Example #3
0
def create_refresh_token(user_id: UUID) -> dict:
    access_token, _ = create_access_token(
        data={
            "sub": user_id,
            "refr": True
        },
        expires_delta=timedelta(minutes=conf.REFRESH_TOKEN_EXP_MINUTES))
    return access_token
Example #4
0
async def register_user(user_data: UserRegister,
                        db: Session = Depends(get_db)):
    try:
        user = await create_user(db, user_data)
    except IntegrityError:
        raise HTTPException(status_code=400, detail="Username already exists")
    access_token_expires = timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)
    access_token = create_access_token(data={"sub": user.username},
                                       expires_delta=access_token_expires)
    return {"access_token": access_token, "token_type": "bearer"}
Example #5
0
async def route_login_access_token(
        form_data: OAuth2PasswordRequestForm = Depends()):
    user = authenticate_user(users_db, form_data.username, form_data.password)
    if not user:
        raise HTTPException(status_code=400,
                            detail="Incorrect username or password")
    access_token_expires = timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)
    access_token = create_access_token(data={"sub": user.username},
                                       expires_delta=access_token_expires)
    return {"access_token": access_token, "token_type": "bearer"}
Example #6
0
async def user_signin(credentials: SignIn = Depends(),
                      db: Session = Depends(db_session)) -> Token:
    """Authenticate user using specified credentials."""
    user = authenticate_user(db, credentials.username, credentials.password)
    if not user:
        raise HTTPException(status_code=400,
                            detail="Incorrect name or password")
    access_token_expires = timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)
    access_token = create_access_token(data={"login": user.email},
                                       expires_delta=access_token_expires)
    return Token(access_token=access_token, token_type="bearer")
Example #7
0
def create_access_token(*args, **kwargs):
    print("*** Creating a new access token ***")

    name = input("Enter a name for the access token: ")

    token = auth.create_access_token(name)

    print("Access token created.")
    print(
        "\nWARNING: Save this token now. It is the only time it will be shown:"
    )
    print(f"\n{token}\n")
Example #8
0
def login_for_access_token(form_data: OAuth2PasswordRequestForm = Depends()):
    user = authenticate_user(form_data.username, form_data.password)
    if not user:
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="Incorrect username or password",
            headers={"WWW-Authenticate": "Bearer"},
        )
    access_token_expires = timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)
    access_token = create_access_token(
        data={"sub": user.email}, expires_delta=access_token_expires
    )
    return {"access_token": access_token, "token_type": "bearer"}
Example #9
0
async def login_for_access_token(
        form_data: OAuth2PasswordRequestForm = Depends(),
        db: Session = Depends(get_db)):
    user = methods.authenticate_user(db, form_data.username,
                                     form_data.password)
    if not user:
        raise auth.credentials_exception
    access_token = auth.create_access_token(
        data={
            "sub": user.username,
            "type": user.type
        },
        expires_delta=auth.access_token_expires)
    return {"access_token": access_token, "token_type": "bearer"}
Example #10
0
async def login_for_access_token(
        form_data: OAuth2PasswordRequestForm = Depends(),
        db: Session = Depends(get_db)):
    try:
        user = await authenticate_user(db, form_data.username,
                                       form_data.password)
        access_token_expires = timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)
        access_token = create_access_token(data={"sub": user.username},
                                           expires_delta=access_token_expires)
        return {"access_token": access_token, "token_type": "bearer"}
    except Exception as error:
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail=error.__str__(),
            headers={"WWW-Authenticate": "Bearer"},
        )
Example #11
0
def create_token(user_id: Union[UUID, str]) -> dict:
    access_token_expires = timedelta(minutes=conf.TOKEN_EXP_MINUTES)
    access_token, expires = create_access_token(
        data={
            "sub": user_id,
            "refr": False,
            "https://hasura.io/jwt/claims": {
                "x-hasura-default-role": "volunteer",
                "x-hasura-role": "volunteer",
                "x-hasura-user-id": user_id,
                "x-hasura-allowed-roles": ["volunteer"]
            }
        },
        expires_delta=access_token_expires)
    return {
        "access_token": access_token,
        "token_type": "bearer",
        "jwt_token_expiry": expires
    }
Example #12
0
async def route_login_access_token(form_data: OAuth2PasswordRequestForm = Depends()):
    user = authenticate_user(db, form_data.username, form_data.password)
    if not user:
        raise HTTPException(status_code=400, detail="Incorrect email or password")
    access_token = create_access_token(data={"username": form_data.username})
    return {"id": user.id, "access_token": access_token, "token_type": "bearer"}