Esempio n. 1
0
async def event_search(request):
    query = prepare_search_query(request)
    if query is None:
        return raw_json_response('{"items": []}')

    json_str = await request['conn'].fetchval_b(search_sql,
                                                company=request['company_id'],
                                                query=query)
    return raw_json_response(json_str)
Esempio n. 2
0
async def guest_signin(request):
    model, siw_method = SIGNIN_MODELS[request.match_info['site']]
    m = await parse_request(request, model)
    details = await siw_method(m, app=request.app)

    company_id = request['company_id']
    user_id, status = await request['conn'].fetchrow_b(
        CREATE_USER_SQL,
        values=Values(
            company=company_id,
            role='guest',
            email=details['email'].lower(),
            first_name=details.get('first_name'),
            last_name=details.get('last_name'),
        ))
    if status == 'suspended':
        raise JsonErrors.HTTPBadRequest(message='user suspended')

    session = await new_session(request)
    session.update({
        'user_id': user_id,
        'user_role': 'guest',
        'last_active': int(time())
    })

    await record_action(request, user_id, ActionTypes.guest_signin)

    json_str = await request['conn'].fetchval(GET_USER_SQL, company_id,
                                              user_id)
    return raw_json_response(json_str)
Esempio n. 3
0
async def user_tickets(request):
    user_id = int(request.match_info['pk'])
    if request['session']['role'] != 'admin' and user_id != request['session']['user_id']:
        raise JsonErrors.HTTPForbidden(message='wrong user')

    json_str = await request['conn'].fetchval(user_tickets_sql, user_id)
    return raw_json_response(json_str)
Esempio n. 4
0
async def category_public(request):
    conn: BuildPgConnection = request['conn']
    company_id = request['company_id']
    category_slug = request.match_info['category']
    json_str = await conn.fetchval(CATEGORY_PUBLIC_SQL, company_id, category_slug)
    if not json_str:
        raise JsonErrors.HTTPNotFound(message='category not found')
    return raw_json_response(json_str)
Esempio n. 5
0
async def user_actions(request):
    json_str = await request['conn'].fetchval(
        user_actions_sql,
        int(request.match_info['pk']),
        request['company_id'],
        get_offset(request),
    )
    return raw_json_response(json_str)
Esempio n. 6
0
async def event_public(request):
    conn: BuildPgConnection = request['conn']
    company_id = request['company_id']
    category_slug = request.match_info['category']
    event_slug = request.match_info['event']
    json_str = await conn.fetchval(event_sql, company_id, category_slug, event_slug)
    if not json_str:
        raise JsonErrors.HTTPNotFound(message='event not found')
    return raw_json_response(json_str)
Esempio n. 7
0
async def event_tickets(request):
    event_id = int(request.match_info['id'])
    if request['session']['user_role'] == 'host':
        host_id = await request['conn'].fetchval('SELECT host FROM events WHERE id=$1', event_id)
        if host_id != request['session']['user_id']:
            raise JsonErrors.HTTPForbidden(message='use is not the host of this event')

    json_str = await request['conn'].fetchval(event_ticket_sql, event_id, request['company_id'])
    return raw_json_response(json_str)
Esempio n. 8
0
 async def browse(self) -> web.Response:
     json_str = await self.conn.fetchval_b(
         self.browse_sql,
         items_query=await self.browse_items_query(),
         count_query=await self.browse_count_query(),
         pagination=Var(str(self.browse_limit_value)),
         print_=self.print_queries,
     )
     return raw_json_response(json_str)
Esempio n. 9
0
async def host_signup(request):
    signin_method = request.match_info['site']
    model, siw_method = SIGNUP_MODELS[signin_method]
    m: GrecaptchaModel = await parse_request(request, model)

    await check_grecaptcha(m, get_ip(request), app=request.app)
    details = await siw_method(m, app=request.app)

    company_id = request['company_id']
    conn = request['conn']
    r = await conn.fetchrow(
        'SELECT role, status FROM users WHERE email=$1 AND company=$2',
        details['email'], company_id)

    existing_role = None
    if r:
        existing_role, status = r
        if existing_role != 'guest':
            raise JsonErrors.HTTP470(status='existing-user')
        if status == 'suspended':
            raise JsonErrors.HTTP470(message='user suspended')

    user_id = await request['conn'].fetchval_b(
        """
        INSERT INTO users (:values__names) VALUES :values
        ON CONFLICT (company, email) DO UPDATE SET role=EXCLUDED.role
        RETURNING id
        """,
        values=Values(
            company=company_id,
            role='host',
            status='active'
            if signin_method in {'facebook', 'google'} else 'pending',
            email=details['email'].lower(),
            first_name=details.get('first_name'),
            last_name=details.get('last_name'),
        ))
    session = await new_session(request)
    session.update({
        'user_id': user_id,
        'user_role': 'host',
        'last_active': int(time())
    })

    await record_action(request,
                        user_id,
                        ActionTypes.host_signup,
                        existing_user=bool(existing_role),
                        signin_method=signin_method)

    await request.app['email_actor'].send_account_created(user_id)
    json_str = await request['conn'].fetchval(GET_USER_SQL, company_id,
                                              user_id)
    return raw_json_response(json_str)
Esempio n. 10
0
async def opt_donations(request):
    donation_opt_id = int(request.match_info['pk'])
    json_str = await request['conn'].fetchval(donations_sql, donation_opt_id, request['company_id'])
    return raw_json_response(json_str)
Esempio n. 11
0
async def donation_options(request):
    company_id = request['company_id']
    json_str = await request['conn'].fetchval(donation_options_sql, company_id, int(request.match_info['cat_id']))
    return raw_json_response(json_str)
Esempio n. 12
0
 async def _fetchval_response(self, sql, **kwargs):
     json_str = await self.conn.fetchval_b(sql, **kwargs)
     if not json_str:
         raise JsonErrors.HTTPNotFound(
             message=f'{self.meta["single_title"]} not found')
     return raw_json_response(json_str)
Esempio n. 13
0
async def index(request):
    company_id = request['company_id']
    user_id = request['session'].get('user_id', None)
    json_str = await request['conn'].fetchval(company_sql, company_id, user_id)
    return raw_json_response(json_str)
Esempio n. 14
0
async def event_updates_sent(request):
    event_id = await _check_event_permissions(request)
    json_str = await request['conn'].fetchval(event_updates_sent_sql, event_id)
    return raw_json_response(json_str)
Esempio n. 15
0
async def event_get(request):
    event_id = await check_event_sig(request)
    user_id = request['session'].get('user_id', 0)
    json_str = await request['conn'].fetchval(event_info_sql, event_id,
                                              user_id)
    return raw_json_response(json_str)
Esempio n. 16
0
async def donating_info(request):
    event_id = await check_event_sig(request)
    json_str = await request['conn'].fetchval(get_donation_ticket_types,
                                              event_id)
    return raw_json_response(json_str)
Esempio n. 17
0
async def event_get(request):
    event_id = await check_event_sig(request)
    json_str = await request['conn'].fetchval(event_info_sql, event_id)
    return raw_json_response(json_str)
Esempio n. 18
0
async def event_categories(request):
    conn: BuildPgConnection = request['conn']
    json_str = await conn.fetchval(category_sql, request['company_id'])
    return raw_json_response(json_str)
Esempio n. 19
0
async def category_public(request):
    company_id = request['company_id']
    category_slug = request.match_info['category']
    json_str = await request['conn'].fetchval(category_public_sql, company_id,
                                              category_slug)
    return raw_json_response(json_str)
Esempio n. 20
0
async def index(request):
    company_id = request['company_id']
    user_id = request['session'].get('user_id', None)
    # TODO could cache this in redis as it's called A LOT
    json_str = await request['conn'].fetchval(company_sql, company_id, user_id)
    return raw_json_response(json_str)