Ejemplo n.º 1
0
async def get_current_user(token: str = Depends(oauth2_scheme),
                           db: Session = Depends(get_db)):
    credentials_exception = HTTPException(
        status_code=status.HTTP_401_UNAUTHORIZED,
        detail="Could not validate credentials",
        headers={"WWW-Authenticate": "Bearer"},
    )
    try:
        payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
        sub: str = payload.get("sub")
        jti: str = payload.get("jti")
        if sub is None or jti is None:
            raise credentials_exception
    except JWTError as e:
        raise credentials_exception
    user = crud.get_user(db, int(sub))
    if user is None:
        raise credentials_exception

    # get sessions and see if token is still valid
    session = (db.query(models.Session).filter(
        models.Session.session_id == int(jti),
        models.Session.valid_until > datetime.now(),
    ).first())

    if session is None:
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="Token expired",
            headers={"WWW-Authenticate": "Bearer"},
        )
    auth_user = AuthUser.from_orm(user)
    auth_user.session_id = jti

    return auth_user
Ejemplo n.º 2
0
def withdraw(transaction: schemas.Transaction, db: Session = Depends(get_db)):
    user = crud.get_user(db, transaction.user_id)
    if not user:
        raise HTTPException(status_code=404, detail="User not found")
    if user.fund < transaction.amount:
        raise HTTPException(status_code=400, detail="Insufficient funds")
    return crud.user_withdraw(db=db, user=user, amount=transaction.amount)
def login_user(user: schemas.UserLogIn) -> JSONResponse:
    """ Login user and Return Access Token"""
    db_user = get_active_user(email=user.email)
    if db_user is None:
        return JSONResponse(status_code=400,
                            content={"message": "Invalid Credentials"})
    else:
        is_password_correct = crud_login.check_username_password(
            email=user.email,
            password=user.password)
        if is_password_correct is False:
            return JSONResponse(status_code=400,
                                content={"message": "Invalid Credentials"})
        else:
            uid = str(uuid.uuid4().hex)
            crud_login.login_user(user=user, session_id=uid)
            access_token_expires = timedelta(
                minutes=ProjectSettings.ACCESS_TOKEN_EXPIRE_MINUTES)
            token = access_token.create_access_token(
                data={"sub": user.email},
                expires_delta=access_token_expires)
            return JSONResponse(status_code=200,
                                content={"access_token": token,
                                         "token_type": "Bearer",
                                         "session_id": uid,
                                         "user": jsonable_encoder(
                                             get_user(email=user.email))})
Ejemplo n.º 4
0
def read_user(user_id: int,
              db: Session = Depends(get_db),
              token: str = Depends(oauth2_scheme)):
    db_user = crud.get_user(db, user_id=user_id)
    if db_user is None:
        raise HTTPException(status_code=404, detail="User not found")
    return db_user
Ejemplo n.º 5
0
def delete_favorites(user_id: int,
                     db: Session = Depends(get_db),
                     fmid: int = Body(..., embed=True)):
    db_favorite = crud.delete_user_favorite(db,
                                            user_id=user_id,
                                            market_id=fmid)
    db_user = crud.get_user(db, user_id=user_id)
    return db_user
Ejemplo n.º 6
0
def update_user(user_id: int,
                user_in: schemas.UserUpdate,
                db: Session = Depends(get_db)):
    db_user = crud.get_user(db, user_id=user_id)
    if not db_user:
        raise HTTPException(status_code=404,
                            detail="This user doesn't exist in the system")
    user = crud.update_user(db, db_obj=db_user, obj_in=user_in)
    return user
Ejemplo n.º 7
0
def get_current_user(data: str = Depends(oauth2_scheme),
                     db: Session = Depends(get_db)):
    credentials_exception = HTTPException(
        status_code=status.HTTP_401_UNAUTHORIZED,
        detail="Could not validate credentials",
        headers={"WWW-Authenticate": "Bearer"})
    token_data = verify_token(data, credentials_exception)
    db_user = crud.get_user(db, user_id=token_data.id)
    return db_user
Ejemplo n.º 8
0
def read_user(user_id: int, db: Session = Depends(deps.get_db)):
    """
    Read the data for a specific user.

    Requires superuser permissions.
    """
    db_user = crud.get_user(db, user_id=user_id)
    if db_user is None:
        raise HTTPException(status_code=404, detail="User not found")
    return db_user
Ejemplo n.º 9
0
def update_users(id: int, user: schemas.UserUpdate):
    """
    Supporte la mise a jour partiel. C'est a dire que vous n'etes pas obligé de renseigner tout les champs.
    Mettez a jour juste les données a modifier et ignorer les autres va parfaitement marcher
    """
    stored_data = jsonable_encoder(crud.get_user(id))
    if stored_data is None:
        raise HTTPException(status_code=404, detail="User not found")
    sotred_model = schemas.UserUpdate(**stored_data["__data__"])
    updated_data = user.dict(exclude_unset=True,
                             exclude_none=True,
                             exclude_defaults=True)
    updated_user = sotred_model.copy(update=updated_data)
    return crud.update_user(id, updated_user)
Ejemplo n.º 10
0
def create_users():
    """
    create test users:

        - username: admin, password: admin, isadmin: "true"

        - username: user2, password: user2pass, isadmin: "false"
    """
    if not crud.get_user(db=database.SessionLocal(),
                         username="******") and not crud.get_admins(
                             db=database.SessionLocal()):
        user = schemas.UserCreate(**{
            "username": "******",
            "password": "******",
            "isadmin": "true"
        })
        crud.create_user(db=database.SessionLocal(), user=user)
    if not crud.get_user(db=database.SessionLocal(), username="******"):
        user = schemas.UserCreate(**{
            "username": "******",
            "password": "******",
            "isadmin": "false"
        })
        crud.create_user(db=database.SessionLocal(), user=user)
Ejemplo n.º 11
0
def buy_stock(invest: schemas.Invest, db: Session = Depends(get_db)):
    user = crud.get_user(db, invest.user_id)
    if not user:
        raise HTTPException(status_code=404, detail="User not found")
    stock = crud.get_stock(db, invest.stock_id)
    if not stock:
        raise HTTPException(status_code=404, detail="Stock not found")
    # if stock price is out of boundaries user should try again with new boundaries
    if stock.price > invest.upper_bound or stock.price < invest.lower_bound:
        raise HTTPException(status_code=400,
                            detail="Stock price is out of boundaries")
    if stock.availability < invest.total:
        raise HTTPException(status_code=400,
                            detail="Requested stocks are not available")
    if user.fund < invest.total * stock.price:
        raise HTTPException(status_code=400, detail="Insufficient funds")
    return crud.user_buy(db=db, user=user, stock=stock, total=invest.total)
Ejemplo n.º 12
0
def get_current_user(
    db: Session = Depends(get_db), token: str = Depends(reusable_oauth2)
) -> models.User:
    try:
        payload = jwt.decode(
            token, settings.SECRET_KEY, algorithms=[ALGORITHM]
        )
        token_data = schemas.TokenPayload(**payload)
    except (jwt.JWTError, ValidationError):
        raise HTTPException(
            status_code=status.HTTP_403_FORBIDDEN,
            detail="Could not validate credentials"
        )
    user = crud.get_user(db, user_id=token_data.sub)
    if not user:
        raise HTTPException(status_code=404, detail="User not found")
    return user
Ejemplo n.º 13
0
def favorite_a_market(user_id: int,
                      fmid: int = Body(..., embed=True),
                      db: Session = Depends(get_db)):
    db_market = crud.get_market_by_fmid(db, fmid=fmid)
    if db_market is None:
        market_in = schemas.MarketCreate(market_id=fmid)
        db_market = crud.create_market(db, market=market_in)
    elif db_market:
        db_fav = crud.get_favorite(db, user_id=user_id, market_id=fmid)
        if db_fav:
            raise HTTPException(status_code=400,
                                detail="That market is already favorited!")
    favorite_in = schemas.FavoriteCreate(user_id=user_id,
                                         market_id=db_market.id)
    favorite = crud.favorite_market(db, favorite=favorite_in)
    user = crud.get_user(db, user_id=user_id)
    return user
Ejemplo n.º 14
0
def add_user_to_group(
    user_id: int,
    group_id: int,
    admin: bool = False,
    db: Session = Depends(get_db)) -> models.UserGroupLink:
    db_group = crud.get_group(db, group_id=group_id)
    if db_group is None:
        raise HTTPException(status_code=404, detail="group not found")
    db_user = crud.get_user(db, user_id=user_id)
    if db_user is None:
        raise HTTPException(status_code=404, detail="user not found")

    userInGroup = (db.query(models.UserGroupLink).filter(
        models.UserGroupLink.user_id == user_id
        and models.UserGroupLink.group_id == group_id).first())
    if not userInGroup:
        return crud.add_user_to_group(db, db_user, db_group, admin)
    raise HTTPException(status_code=400, detail="User is already in group")
Ejemplo n.º 15
0
def get_current_user(
    db: Session = Depends(get_db), token: str = Depends(reusable_oauth2)
):
    try:
        payload = jwt.decode(
            token, settings.secret_key, algorithms=[security.ALGORITHM]
        )
        token_data = schemas.auth.TokenPayload(**payload)
        token_user_id = int(token_data.sub.replace("user:"******""))
    except (jwt.JWTError, ValidationError, ValueError):
        raise HTTPException(
            status_code=status.HTTP_403_FORBIDDEN,
            detail="Could not validate credentials",
        )

    user = crud.get_user(db, user_id=token_user_id)
    if not user:
        raise HTTPException(status_code=404, detail="User not found")
    return user
Ejemplo n.º 16
0
def sell_stock(invest: schemas.Invest, db: Session = Depends(get_db)):
    user = crud.get_user(db, invest.user_id)
    if not user:
        raise HTTPException(status_code=404, detail="User not found")
    stock = crud.get_stock(db, invest.stock_id)
    if not stock:
        raise HTTPException(status_code=404, detail="Stock not found")
    # if stock price is out of boundaries user should try again with new boundaries
    if stock.price > invest.upper_bound or stock.price < invest.lower_bound:
        raise HTTPException(status_code=400,
                            detail="Stock price is out of boundaries")
    try:
        ownership = next(s for s in user.stocks if s.stock_id == stock.id)
        if ownership.own < invest.total:
            raise HTTPException(status_code=400,
                                detail="User don't own enough stocks")
        return crud.user_sell(db=db,
                              user=user,
                              stock=stock,
                              ownership=ownership,
                              total=invest.total)
    except StopIteration:
        raise HTTPException(status_code=400,
                            detail="User don't own this stock")
Ejemplo n.º 17
0
def me(db: Session = Depends(get_db)):
    db_user = crud.get_user(db, )
Ejemplo n.º 18
0
def get_user(user_id: int, db: Session = Depends(get_db)):
    return crud.get_user(db, user_id=user_id)
Ejemplo n.º 19
0
def read_user(user_id: int, db: Session = Depends(get_db)) -> models.User:
    db_user = crud.get_user(db, user_id=user_id)
    if db_user is None:
        raise HTTPException(status_code=404, detail="User not found")
    return db_user
Ejemplo n.º 20
0
def deposit(transaction: schemas.Transaction, db: Session = Depends(get_db)):
    user = crud.get_user(db, transaction.user_id)
    if not user:
        raise HTTPException(status_code=404, detail="User not found")
    return crud.user_deposit(db=db, user=user, amount=transaction.amount)
Ejemplo n.º 21
0
def get_user(user_id: int, db: Session = Depends(deps.get_db)):
    #try to get user
    db_user = crud.get_user(db, user_id)
    if db_user is None:
        raise HTTPException(404, detail="User not found")
    return db_user
Ejemplo n.º 22
0
def read_user(user_id: int):
    db_user = crud.get_user(user_id=user_id)
    if db_user is None:
        raise HTTPException(status_code=404, detail="User not found")
    return db_user
Ejemplo n.º 23
0
def get_user(user_id: int, db: Session = Depends(get_db)):
    user = crud.get_user(db, user_id)
    if not user:
        raise HTTPException(status_code=404, detail="User not found")
    return user
Ejemplo n.º 24
0
def get_favorites(user_id: int, db: Session = Depends(get_db)):
    db_user = crud.get_user(db, user_id=user_id)
    return db_user