Пример #1
0
    async def find_user(self, username: str):
        try:
            session = Session()
            user = session.query(Users).filter_by(
                username=username).one_or_none()
            session.commit()
        except exc.SQLAlchemyError:
            return JSONResponse({
                "message": "Database failure",
                "code": "1"
            },
                                status_code=404)

        return user
Пример #2
0
async def add_friends(request):
    data = await request.json()
    year, month, day = data["birthdate"].split('-')
    birthdate = date(int(year), int(month), int(day))
    newFriend = Friends(
        name=data["name"],
        genre=data["genre"],
        birthdate=birthdate,
        idUser=request.user.id,
    )

    try:
        session = Session()
        session.add(newFriend)
        session.commit()
    except exc.SQLAlchemyError:
        return JSONResponse({
            "message": "name already used",
            "code": "1"
        },
                            status_code=409)

    return JSONResponse({
        "id": newFriend.id,
        "name": newFriend.name,
        "genre": newFriend.genre,
        "birthdate":
        data["birthdate"],  #newFriend.birthdate.format("%y-%m-%d"),
        "idUser": newFriend.idUser,
    })
Пример #3
0
    async def authenticate(self, request):
        #print (request.cookies) #.get("token")
        inputToken = request.cookies.get("token")
        if inputToken is None:
            return None

        try:
            session = Session()
            token = session.query(Tokens).filter_by(
                token=inputToken).one_or_none()
            session.commit()
        except exc.SQLAlchemyError:
            return JSONResponse({
                "message": "Database failure",
                "code": "1"
            },
                                status_code=404)

        if token is None:
            return None

        return AuthCredentials(["authenticated"]), token.user
Пример #4
0
async def delete_user(request):
    try:
        session = Session()
        session.query(Users).filter_by(id=request.user.id).delete()
        session.commit()
    except exc.SQLAlchemyError:
        return JSONResponse({
            "message": "Database failure",
            "code": "1"
        },
                            status_code=404)

    return JSONResponse({"message": "success"}, status_code=201)
Пример #5
0
async def logout_user(request):
    response = JSONResponse({"message": "success"}, status_code=200)
    response.delete_cookie(key="token", path="/")

    try:
        session = Session()
        session.query(Tokens).filter_by(idUser=request.user.id).delete()
        session.commit()
    except exc.SQLAlchemyError:
        return JSONResponse({
            "message": "Failed to logout",
            "code": "1"
        },
                            status_code=404)

    return response
Пример #6
0
async def del_friends(request):
    #for myFriend in request.user.friends:
    #    if myFriend.name == request.path_params['name']:
    #        del myFriend # ORM should clean up the database but it does not work as intended.
    #        return JSONResponse({"message": "delete completed", "code": "0"})
    #return JSONResponse({"message": "friend not found", "code": "1"}, status_code=404)
    try:
        session = Session()
        session.query(Friends).filter_by(
            idUser=request.user.id, name=request.path_params['name']).delete()
        session.commit()
    except exc.SQLAlchemyError:
        return JSONResponse({
            "message": "friend does not exist",
            "code": "1"
        },
                            status_code=404)

    return JSONResponse({"message": "delete completed", "code": "0"})
Пример #7
0
async def register_user(request):
    credentials = await request.json()
    user = Users(username=credentials["username"],
                 username_canonical=credentials["username"].lower(),
                 email=credentials["email"],
                 email_canonical=credentials["email"].lower(),
                 enabled=1,
                 password=await hasher.make(credentials["password"]),
                 last_login=datetime.now())

    try:
        session = Session()
        session.add(user)
        session.commit()
    except exc.SQLAlchemyError:
        return JSONResponse(
            {
                "message": "username or email already used",
                "code": "1"
            },
            status_code=409)

    return JSONResponse({"username": user.username}, status_code=201)
Пример #8
0
async def login_user(request):
    # TODO: oauth2-jwt: https://fastapi.tiangolo.com/tutorial/security/oauth2-jwt/
    #                   Is data signed?
    try:
        session = Session()
        token = session.query(Tokens).filter_by(
            idUser=request.user.id).one_or_none()
        session.commit()
    except exc.SQLAlchemyError:
        return JSONResponse({
            "message": "Database failure",
            "code": "1"
        },
                            status_code=404)

    if not token:
        try:
            session = Session()
            token = Tokens(idUser=request.user.id, )
            session.add(token)
            session.commit()
        except exc.SQLAlchemyError:
            return JSONResponse(
                {
                    "message": "Failed to generate token",
                    "code": "1"
                },
                status_code=409)

    response = JSONResponse({"message": "success"}, status_code=201)
    response.set_cookie(
        key="token",
        value=token.token,
        max_age=300,
        path="/",
        secure=True,  # assert it's only valid through SSL/HTTPS
        samesite="strict",
    )
    return response