Ejemplo n.º 1
0
async def users_login_get(request: Request) -> Response:
    session_maker = request.app['db_session_manager']
    log.debug(request.headers)
    if not request.headers['X-Login'] == request.match_info['login']:
        return HTTPForbidden()
    session: Session = session_maker()
    try:
        user = session.query(Users).filter_by(
            login=request.match_info['login']).first()

        if not user:
            return HTTPNotFound()

        params = request.rel_url.query.get('output')
        if params:
            output = [x.strip() for x in params.split(',')]
            user_serialized = UsersSchema(only=output).dump(user)
        else:
            user_serialized = UsersSchema().dump(user)

        return Response(body=json.dumps(user_serialized),
                        headers={'content-type': 'application/json'})

    finally:
        session.close()
Ejemplo n.º 2
0
async def users_put(request: Request) -> Response:
    session_maker = request.app['db_session_manager']
    if not request.headers['X-Login'] == request.match_info['login']:
        return HTTPForbidden()
    session: Session = session_maker()
    try:
        data = await request.json()

        if data:
            user = session.query(Users).filter_by(
                login=request.match_info['login']).first()
            if not user:
                return HTTPNotFound()

            user_put = UsersSchema().load(data, session=session, partial=True)

            user.first_name = user_put.first_name
            user.last_name = user_put.last_name
            user.email = user_put.email
            user.phone = user_put.phone

            session.commit()
            return HTTPNoContent(headers={'Location': f"/users/{user.login}"})
        else:
            session.close()
            return HTTPBadRequest()
    except Exception:
        session.rollback()
        raise
    finally:
        session.close()
Ejemplo n.º 3
0
async def users_post(request: Request) -> Response:
    session_maker = request.app['db_session_manager']
    session: Session = session_maker()
    try:
        data = await request.json()

        if data:
            user = session.query(Users).filter_by(login=data['login']).first()
            if user:
                return HTTPConflict()

            user = UsersSchema().load(data, session=session)

            session.add(user)
            session.commit()
            return HTTPCreated(headers={
                'Location': f"/users/{user.login}",
                'Content-Type': 'application/json'
            },
                               body=json.dumps({'id': user.id}))
        else:
            return HTTPBadRequest()
    except Exception:
        session.rollback()
        raise
    finally:
        session.close()
Ejemplo n.º 4
0
async def users_get(request: Request) -> Response:
    session_maker = request.app['db_session_manager']
    session: Session = session_maker()
    try:
        users = session.query(Users).all()
        params = request.rel_url.query.get('output')
        if params:
            output = [x.strip() for x in params.split(',')]
            users_serialized = UsersSchema(only=output, many=True).dump(users)
        else:
            users_serialized = UsersSchema(many=True).dump(users)
        return Response(body=json.dumps(users_serialized),
                        headers={'content-type': 'application/json'})

    finally:
        session.close()
Ejemplo n.º 5
0
async def session_post(request: Request):
    session_maker = request.app['db_session_manager']
    session: Session = session_maker()
    try:
        data = await request.json()

        if data:
            user = session.query(Users).filter_by(login=data['login']).first()
            if not user:
                return HTTPNotFound()

            user_id = user.id
            if UsersSchema.check_password_hash(data['password'], user.password):
                response = HTTPAccepted()
                await remember(request, response, json.dumps({'user_id': user_id, 'login': user.login}))
                return response
            else:
                response = HTTPUnauthorized()
                if user_id:
                    await forget(request, response)
                return response
        else:
            return HTTPBadRequest()
    except Exception:
        raise
    finally:
        session.close()
Ejemplo n.º 6
0
async def registration(request: Request):

    if 'X-UserId' in request.headers:
        return HTTPNotAcceptable()

    session_maker = request.app['db_session_manager']
    session: Session = session_maker()
    try:
        data = await request.json()

        if data:
            user_db = session.query(Users).filter_by(login=data['login']).first()
            if user_db:
                return HTTPConflict()

            data_without_password = dict(data)
            data_without_password.pop('password')

            data_for_auth = {'login': data['login'], 'password': data['password']}
            if 'account_manager' in request.app['config']['app']:
                url = request.app['config']['app']['account_manager']['url']
                async with aiohttp.ClientSession(raise_for_status=True) as http_client_session:
                    async with http_client_session.post(url, json=data_without_password) as \
                            resp:
                        account_manager_resp = await resp.json()
                data_for_auth['id'] = account_manager_resp['id']
                user_serializer = UsersSchema().load(data_for_auth, session=session)
            else:
                user_serializer = UsersSchema().load(data_for_auth, session=session)

            session.add(user_serializer)
            session.commit()
            return HTTPCreated(headers={'Location': f"/users/{user_serializer.login}"})
        else:
            return HTTPBadRequest()
    except InvalidURL as ex:
        raise Exception(f"""Invalid url account_manager:{str(ex)}""")
    except ClientResponseError:
        return HTTPConflict()
    except ClientError as ex:
        raise Exception(f"""Can't connect to account_manager:{str(ex)}""")
    except Exception:
        session.rollback()
        raise
    finally:
        session.close()