Exemplo n.º 1
0
async def list_transactions(request):
    group_id: int = int(request.match_info["group_id"])
    min_last_changed = request.query.get("min_last_changed")

    if min_last_changed:
        try:
            min_last_changed = datetime.fromisoformat(min_last_changed)
        except ValueError:
            raise web.HTTPBadRequest(
                reason=
                "Invalid query param 'min_last_changed', must be a valid ISO timestamp."
            )

    forced_transaction_ids = request.query.get("transaction_ids")
    if forced_transaction_ids:
        try:
            forced_transaction_ids = [
                int(x) for x in forced_transaction_ids.split(",")
            ]
        except ValueError:
            raise web.HTTPBadRequest(
                reason=
                "Invalid query param 'transaction_ids', must be a comma separated list of integers"
            )

    transactions = await request.app["transaction_service"].list_transactions(
        user_id=request["user"]["user_id"],
        group_id=group_id,
        min_last_changed=min_last_changed,
        additional_transactions=forced_transaction_ids,
    )

    serializer = TransactionSchema()
    return json_response(data=serializer.dump(transactions, many=True))
Exemplo n.º 2
0
async def _account_response(request, account_id: int) -> web.Response:
    account = await request.app["account_service"].get_account(
        user_id=request["user"]["user_id"], account_id=account_id
    )

    serializer = AccountSchema()
    return json_response(data=serializer.dump(account))
Exemplo n.º 3
0
async def profile(request):
    user = await request.app["user_service"].get_user(
        user_id=request["user"]["user_id"])

    serializer = UserSchema()

    return json_response(data=serializer.dump(user))
Exemplo n.º 4
0
async def get_transaction(request: Request):
    transaction = await request.app["transaction_service"].get_transaction(
        user_id=request["user"]["user_id"],
        transaction_id=int(request.match_info["transaction_id"]),
    )

    serializer = TransactionSchema()
    return json_response(data=serializer.dump(transaction))
Exemplo n.º 5
0
async def rename_session(request):
    data = request["json"]
    await request.app["user_service"].rename_session(
        user_id=request["user"]["user_id"],
        session_id=data["session_id"],
        name=data["name"],
    )

    return json_response(status=web.HTTPNoContent.status_code)
Exemplo n.º 6
0
async def confirm_password_recovery(request):
    data = request["json"]
    try:
        await request.app["user_service"].confirm_password_recovery(
            token=data["token"], new_password=data["new_password"])
    except PermissionError as e:
        raise web.HTTPBadRequest(reason=str(e))

    return json_response(status=web.HTTPNoContent.status_code)
Exemplo n.º 7
0
async def recover_password(request):
    data = request["json"]
    try:
        await request.app["user_service"].request_password_recovery(
            email=data["email"], )
    except InvalidPassword as e:
        raise web.HTTPBadRequest(reason=str(e))

    return json_response(status=web.HTTPNoContent.status_code)
Exemplo n.º 8
0
async def confirm_registration(request):
    data = request["json"]
    try:
        await request.app["user_service"].confirm_registration(
            token=data["token"])
    except (PermissionError, InvalidCommand) as e:
        raise web.HTTPBadRequest(reason=str(e))

    return json_response(status=web.HTTPNoContent.status_code)
Exemplo n.º 9
0
async def list_accounts(request):
    try:
        accounts = await request.app["account_service"].list_accounts(
            user_id=request["user"]["user_id"],
            group_id=int(request.match_info["group_id"]),
        )
    except PermissionError:
        raise web.HTTPForbidden(reason="permission denied")

    serializer = AccountSchema()
    return json_response(data=serializer.dump(accounts, many=True))
Exemplo n.º 10
0
async def change_email(request):
    data = request["json"]
    try:
        await request.app["user_service"].request_email_change(
            user_id=request["user"]["user_id"],
            email=data["email"],
            password=data["password"],
        )
    except InvalidPassword as e:
        raise web.HTTPBadRequest(reason=str(e))

    return json_response(status=web.HTTPNoContent.status_code)
Exemplo n.º 11
0
async def change_password(request):
    data = request["json"]
    try:
        await request.app["user_service"].change_password(
            user_id=request["user"]["user_id"],
            new_password=data["new_password"],
            old_password=data["old_password"],
        )
    except InvalidPassword as e:
        raise web.HTTPBadRequest(reason=str(e))

    return json_response(status=web.HTTPNoContent.status_code)
Exemplo n.º 12
0
async def register(request):
    data = request["json"]

    if request.app["config"]["demo"]["enabled"]:
        user_id = await request.app["user_service"].demo_register_user(
            username=data["username"],
            password=data["password"],
            email=data["email"],
        )
    else:
        user_id = await request.app["user_service"].register_user(
            username=data["username"],
            password=data["password"],
            email=data["email"],
        )

    return json_response(data={"user_id": str(user_id)})
Exemplo n.º 13
0
async def fetch_access_token(request):
    data = request["json"]
    row = await request.app["user_service"].is_session_token_valid(
        token=data["token"])
    if row is None:
        raise web.HTTPBadRequest(reason="invalid session token")

    user_id, session_id = row

    token = token_for_user(user_id=user_id,
                           session_id=session_id,
                           secret_key=request.app["secret_key"])

    return json_response(data={
        "user_id": user_id,
        "access_token": token,
    })
Exemplo n.º 14
0
async def login(request):
    data = request["json"]
    user_id, session_id, session_token = await request.app[
        "user_service"].login_user(
            username=data["username"],
            password=data["password"],
            session_name=data["session_name"],
        )

    token = token_for_user(user_id=user_id,
                           session_id=session_id,
                           secret_key=request.app["secret_key"])

    return json_response(
        data={
            "user_id": user_id,
            "access_token": token,
            "session_token": session_token,
        })
Exemplo n.º 15
0
async def _transaction_response(request, transaction_id: int) -> web.Response:
    transaction = await request.app["transaction_service"].get_transaction(
        user_id=request["user"]["user_id"], transaction_id=transaction_id)

    serializer = TransactionSchema()
    return json_response(data=serializer.dump(transaction))
Exemplo n.º 16
0
async def confirm_email_change(request):
    data = request["json"]
    await request.app["user_service"].confirm_email_change(token=data["token"])

    return json_response(status=web.HTTPNoContent.status_code)