Esempio n. 1
0
def post_notification(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse:
    """ Sing in current user to pushup notifications

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Returns:
        Response - result of request
        None; Only http answer
    """

    user_obj = get_user_by_response(cookie)
    if user_obj is None:
        return http.wrong_cookie(env['HTTP_HOST'])

    key_obj = get_json_by_response(env)
    registration_id = key_obj['token']

    sess = sql.get_session(cookie.get('sessid', ''))  # Get session object
    hash_ = hash(sess['user_agent'] + sess['last_ip'])  # TODO: save hash

    sql.set_notification(user_obj['id'], registration_id)  # TODO: check status

    message_title = "Uber update"
    message_body = f"Hi {user_obj['name']}, your customized news for today is ready"
    result = push_service.notify_single_device(registration_id=registration_id, message_title=message_title,
                                               message_body=message_body)

    print('!!!!!!result!!!!!!!', result)

    return http.ok(env['HTTP_HOST'])
Esempio n. 2
0
def get_feedback(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse:
    """ Account data HTTP request
    Got day num and return day event for feedback
    # TODO: Get data if feedback already exist

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Returns:
        Response - result of request
    """

    day = query['date']  # TODO: Check dd.mm of day_id

    # Safety get user_obj
    user_obj = get_user_by_response(cookie)
    if user_obj is None:
        return http.wrong_cookie(host=env['HTTP_HOST'])

    feedback_template, feedback_data = sql.get_feedback(user_obj['id'], day)
    top_object = sql.get_top(user_obj['id'], day)

    data = {'template': feedback_template, 'data': feedback_data, 'top': top_object}
    return http.ok(json_dict=data)
Esempio n. 3
0
def post_deenroll_project(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse:
    """ De Enroll current user to project HTTP request

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Note:
        Send:
            200 Ok: if all are ok
            401 Unauthorized: if wrong session id
            405 Method Not Allowed: already got it

    Returns:
        Response - result of request
    """

    # Safety get user_obj
    user_obj = get_user_by_response(cookie)
    if user_obj is None:
        return http.wrong_cookie(host=env['HTTP_HOST'])

    # Check current user can edit
    if user_obj['project_id'] == 0:
        return http.conflict()

    sql.deenroll_project(user_obj['id'])

    return http.ok(host=env['HTTP_HOST'])
Esempio n. 4
0
def change_password(env: TEnvironment, query: TQuery,
                    cookie: TCookie) -> TResponse:
    """

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Returns:
        TODO: add description
    """

    data = get_json_by_response(env)

    if 'user_id' not in data or 'pass' not in data:
        return http.bad_request(host=env['HTTP_HOST'])

    logger('change_password()',
           f'Change password for {data["user_id"]}.',
           type_='LOG')

    if sql.change_password(data['user_id'], data['pass']):
        return http.ok(host=env['HTTP_HOST'])
    else:
        return http.bad_request(host=env['HTTP_HOST'])
Esempio n. 5
0
def post_edit_project(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse:
    """ Post edit project HTTP request
    Edit project signed by cookie

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Note:
        Send:
            200 Ok: if all are ok
            401 Unauthorized: if wrong session id
            405 Method Not Allowed: already got it

    Returns:
        Response - result of request
    """

    # Get json from response
    project_obj = get_json_by_response(env)

    # Safety get user_obj
    user_obj = get_user_by_response(cookie)
    if user_obj is None:
        return http.wrong_cookie(host=env['HTTP_HOST'])

    # Check current user can edit
    if user_obj['user_type'] == 0 and user_obj['project_id'] != project_obj['id']:
        return http.not_allowed()

    sql.update_in_table(project_obj, 'projects')

    return http.ok(host=env['HTTP_HOST'])
Esempio n. 6
0
def send_data(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse:
    """

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Returns:
        TODO: add description
    """
    table_name = query['table']
    # Get json from response
    obj = get_json_by_response(env)

    if table_name in sql.table_fields.keys():
        if 'id' not in obj.keys() or obj['id'] == '':
            sql.insert_to_table(obj, table_name)
        else:
            sql.update_in_table(obj, table_name)

        if table_name == 'events':
            config.add_place(obj['place'])

    return http.ok(host=env['HTTP_HOST'])
Esempio n. 7
0
def post_config(env: TEnvironment, query: TQuery,
                cookie: TCookie) -> TResponse:
    """ Config data HTTP request

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Note:
        Send:
            200 Ok: if user exist and session created correctly
                    and send cookie with sess id

    Returns:
        Response - result of request
        None
    """

    config_raw = get_json_by_response(env)

    config_dict = {}  # type: tp.Dict[str, tp.Any]
    config_dict['CREDITS_TOTAL'] = config_raw['total']
    config_dict['CREDITS_MASTER'] = config_raw['master']
    config_dict['CREDITS_LECTURE'] = config_raw['lecture']
    config_dict['CREDITS_ADDITIONAL'] = config_raw['additional']
    config_dict['NUMBER_TEAMS'] = config_raw['groups']

    config.set_config(config_dict)

    return http.ok(host=env['HTTP_HOST'])
Esempio n. 8
0
def get_credits(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse:
    """ Credits data HTTP request
    Get credits data for chart according to user

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Returns:
        Response - result of request
    """

    # Safety get user_obj
    user_obj = get_user_by_response(cookie)
    if user_obj is None:
        return http.wrong_cookie(host=env['HTTP_HOST'])

    user_id = user_obj['id']

    if 'id' in query:  # Request other's user credits
        if user_obj['user_type'] > 0:  # Check admin rights
            user_id = query['id']
        else:
            return http.forbidden()

    data = sql.get_credits_by_user_id(user_id)
    return http.ok(host=env['HTTP_HOST'], json_dict=data)
Esempio n. 9
0
def users():
    if request.method == 'GET':
        users = get_users(request)
        return ok(users)

    if request.method == 'POST':
        body = request.get_json()
        user = create_user(db, body)
        return created(user)
Esempio n. 10
0
def get_names(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse:
    """ Send names data HTTP request
    Will check session id and return data according to user

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Returns:
        Response - result of request
    """

    data = sql.get_names()
    return http.ok(json_dict=data)
Esempio n. 11
0
def get_credits(env: TEnvironment, query: TQuery,
                cookie: TCookie) -> TResponse:
    """

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Returns:
        TODO: add description
    """

    data = sql.get_credits_short()
    # Send req data tables
    return http.ok(host=env['HTTP_HOST'], json_dict=data)
Esempio n. 12
0
def user(id):
    user_exists = User.query.get(id)
    if user_exists is None:
        return not_found('user')

    if request.method == 'GET':
        return ok(user_exists)

    if request.method == 'PUT':
        body = request.get_json()
        update_user(db, user_exists, body)
        return no_content()

    if request.method == 'DELETE':
        delete_user(db, user_exists)
        return no_content()
Esempio n. 13
0
def get_places(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse:
    """ Places HTTP request

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Returns:
        Response - result of request
    """

    places = config.get_places()
    data = places

    return http.ok(host=env['HTTP_HOST'], json_dict=data)
Esempio n. 14
0
def get_event(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse:
    """ Event data HTTP request
    Get event description by event id

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Returns:
        Response - result of request
    """

    data = sql.get_in_table(query['id'], 'events')

    # Json event data
    return http.ok(host=env['HTTP_HOST'], json_dict=data)
Esempio n. 15
0
def get_projects(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse:
    """ Projects HTTP request
    Send list of projects in json format

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Returns:
        Response - result of request
    """

    data = sql.get_table('projects')
    data = [obj for obj in data if obj['id'] != 0]

    return http.ok(json_dict=data)
Esempio n. 16
0
def get_class(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse:
    """ Class data HTTP request
    Get class description by class id

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Returns:
        Response - result of request
    """

    data = sql.get_in_table(query['id'], 'classes')

    # Json event data
    return http.ok(json_dict=data)
Esempio n. 17
0
def get_days(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse:
    """ Days data HTTP request

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Returns:
        Response - result of request
    """

    days = sql.get_table('days')
    days = [obj for obj in days if obj['id'] != 0]

    data = {'days': days, 'today': get_date_str()}

    return http.ok(json_dict=data)
Esempio n. 18
0
def get_project(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse:
    """ Get  Project HTTP request by id
    Send project description in json format

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Returns:
        Response - result of request
    """

    project_id = query['id']

    data = sql.get_in_table(project_id, 'projects')

    return http.ok(json_dict=data)
Esempio n. 19
0
def post_places(env: TEnvironment, query: TQuery,
                cookie: TCookie) -> TResponse:
    """ Places HTTP request

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Returns:
        Response - result of request
        None
    """

    places_raw = get_json_by_response(env)
    config.set_places(places_raw)

    return http.ok(host=env['HTTP_HOST'])
Esempio n. 20
0
def post_mark_enrolls(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse:
    """ Sing in at lecture  HTTP request (by student )
    By cookie add credits to user

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Note:
        Send:
            200 Ok: if all are ok
            401 Unauthorized: if wrong session id
            405 Method Not Allowed: already got it or timeout

    Returns:
        Response - result of request
        None; Only http answer
    """

    # Safety get user_obj
    user_obj = get_user_by_response(cookie)
    if user_obj is None:
        return http.wrong_cookie(host=env['HTTP_HOST'])

    enrolls = get_json_by_response(env)
    config_dict = config.get_config()

    if enrolls is not None:

        # TODO: check do better
        for enroll in enrolls:
            sql.update_in_table(enroll, 'enrolls')

            if enroll['attendance'] in (True, 'true'):
                sql.pay_credit(enroll['user_id'], enroll['class_id'],
                               config_dict['CREDITS_MASTER'] + min(config_dict['CREDITS_ADDITIONAL'], enroll['bonus']),
                               get_datetime_str())
                # TODO: CREDITS_MASTER CREDITS_LECTURE check

        return http.ok(host=env['HTTP_HOST'])

    else:
        return http.not_allowed()
Esempio n. 21
0
def post_credits(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse:
    """ Sing in at lecture  HTTP request (by student )
    By cookie add credits to user

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Note:
        Send:
            200 Ok: if all are ok
            401 Unauthorized: if wrong session id
            405 Method Not Allowed: already got it or timeout

    Returns:
        Response - result of request
        None; Only http answer
    """

    # TODO: CREDITS

    # Event code
    # code = query['code']
    # print('Credits code: ', code)

    event_id = 42  # TODO: Get event id from code

    # Safety get user_obj
    user_obj = get_user_by_response(cookie)
    if user_obj is None:
        return http.wrong_cookie(env['HTTP_HOST'])

    event_obj = sql.get_event(event_id)
    if event_obj is not None:
        # gsheets.save_credits(user_obj, event_obj)
        sql.checkin_user(user_obj, event_obj)
        logger('post_credits()', f'Checkin user {user_obj} to {event_obj}', type_='LOG')

        return http.ok(env['HTTP_HOST'])

    else:
        return http.not_allowed()
Esempio n. 22
0
def codes(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse:
    """

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Returns:
        TODO: add description
    """

    codes = generate_codes(20)

    for code in codes:
        data = {'code': code, 'type': 0, 'used': False}
        sql.insert_to_table(data, 'codes')

    return http.ok(host=env['HTTP_HOST'])
Esempio n. 23
0
def post_remove_enroll(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse:
    """ Remove  HTTP request (by student )
    By cookie add credits to user

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Note:
        Send:
            200 Ok: if all are ok
            401 Unauthorized: if wrong session id
            405 Method Not Allowed: already got it or timeout

    Returns:
        Response - result of request
        None; Only http answer
    """

    # Safety get user_obj
    user_obj = get_user_by_response(cookie)
    if user_obj is None:
        return http.wrong_cookie(host=env['HTTP_HOST'])

    enroll_id = query['id']
    enroll = sql.get_in_table(enroll_id, 'enrolls')

    if enroll is not None and (
            user_obj['user_type'] == 0 and enroll['user_id'] == user_obj['id'] or user_obj['user_type'] >= 1):
        # Check admin or user remove himself

        event = sql.get_event_with_date(enroll['class_id'])

        if not check_enroll_time(event['date'], event['time']):  # Close for 15 min
            return http.gone()

        sql.remove_enroll(enroll_id)

        return http.ok(host=env['HTTP_HOST'])

    else:
        return http.not_allowed()
Esempio n. 24
0
def get_user(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse:
    """ User data HTTP request
    Will check session id and return data according to user

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Returns:
        Response - result of request
    """

    # Safety get user_obj
    user_obj = get_user_by_response(cookie)
    if user_obj is None:
        return http.wrong_cookie(host=env['HTTP_HOST'])

    if 'id' in query:  # Request other's user boi
        if user_obj['user_type'] > 0:  # Check admin rights
            user_obj = sql.get_user_by_id(query['id'])
        else:
            return http.forbidden(host=env['HTTP_HOST'])

    # Json account data
    data = user_obj
    del data['pass']

    data['enrolls'] = [{'class_id': enroll['class_id'], 'attendance': enroll['attendance'], 'bonus': enroll['bonus']} for enroll in sql.get_enrolls_by_user_id(user_obj['id'])]  # TODO: Think do it that way ot not

    data['calendar'] = True
    data['feedback'] = False  # TODO: Notifacation
    data['projects'] = user_obj['project_id'] == 0 or user_obj['project_id'] == '0'

    data['total'] = config.get_config()['CREDITS_TOTAL']
    data['today'] = get_date_str()  # TODO: remove. Only for debug???

    database_update_time = sql.get_update_times()

    data['update_time'] = database_update_time

    return http.ok(host=env['HTTP_HOST'], json_dict=data)
Esempio n. 25
0
def remove_data(env: TEnvironment, query: TQuery,
                cookie: TCookie) -> TResponse:
    """

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Returns:
        TODO: add description
    """

    table_name = query['table']
    obj_id = query['id']

    if table_name in sql.table_fields.keys():
        sql.remove_in_table(obj_id, table_name)

    return http.ok(host=env['HTTP_HOST'])
Esempio n. 26
0
def post_create_enroll(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse:
    """ Create  HTTP request (by student )
    By cookie add enroll to user

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Note:
        Send:
            200 Ok: if all are ok
            401 Unauthorized: if wrong session id
            405 Method Not Allowed: already got it or timeout

    Returns:
        Response - result of request
        None; Only http answer
    """

    # Safety get user_obj
    user_obj = get_user_by_response(cookie)
    if user_obj is None:
        return http.wrong_cookie(host=env['HTTP_HOST'])

    event_id = query['event_id']

    event = sql.get_event_with_date(event_id)

    if event is None:
        return http.not_allowed()

    if not check_enroll_time(event['date'], event['time']):  # Close for 15 min
        return http.gone()

    if sql.enroll_user(event_id, user_obj['id'], event['date'], get_datetime_str()):

        return http.ok(host=env['HTTP_HOST'])

    else:
        return http.not_allowed()
Esempio n. 27
0
def get_day(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse:
    """ Day schedule data HTTP request
    Get day num and return html

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Note:
        Cached by TIMEOUT
        return day html by req from query string (if none return today)

    Returns:
        Response - result of request

        html data: day schedule
    """

    # format is "dd.mm"
    try:
        day = query['day']
    except KeyError:
        day = get_date_str()  # Get for today day

    if day not in ['Template', '05.06', '06.06', '07.06', '08.06', '09.06', '10.06', '11.06', '12.06',
                   '13.06', '14.06', '15.06', '16.06', '17.06', '18.06']:
        # print('day overflow, falling back to the last day available')  # TODO: Remove or check in sql
        logger('get_day()', 'day overflow, falling back to the last day available', type_='ERROR')
        day = '05.06'

    # print('get data days for ', day)

    data = sql.get_day(day)

    data = sorted(data, key=lambda x: x['time'])
    groups = groupby(data, key=lambda x: x['time'])

    data = [{'time': time_, 'events': [event for event in group_]} for time_, group_ in groups]

    return http.ok(json_dict=data)
Esempio n. 28
0
def post_feedback(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse:
    """ Login HTTP request
    By cookie create feedback for day

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Note:
        Send:
            200 Ok: if all are ok
            401 Unauthorized: if wrong session id
            405 Method Not Allowed: already got it

    Returns:
        Response - result of request
        None; Only http answer
    """

    date = query['date']

    # Safety get user_obj
    user_obj = get_user_by_response(cookie)
    if user_obj is None:
        return http.wrong_cookie(env['HTTP_HOST'])

    # Get json from response
    feedback_obj = get_json_by_response(env)
    users = feedback_obj['users']
    events = feedback_obj['events']

    print('EVENTS', events)
    print('USERS', users)

    # TODO: check
    if sql.post_feedback(user_obj['id'], events) or sql.post_top(user_obj['id'], date, users):
        return http.ok(env['HTTP_HOST'])
    else:
        return http.not_allowed()
Esempio n. 29
0
def clear_table(env: TEnvironment, query: TQuery,
                cookie: TCookie) -> TResponse:
    """

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Returns:
        TODO: add description
    """

    table_name = query['table']

    if table_name in sql.table_fields.keys():
        sql.clear_table(table_name)
    else:
        logger('admin_panel()', '400 Bad Request by admin', type_='ERROR')
        return http.bad_request(host=env['HTTP_HOST'])

    return http.ok(host=env['HTTP_HOST'])
Esempio n. 30
0
def get_enrolls(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse:
    """ Enrolls data HTTP request
    Get enrolls list by event id or user id

    Args:
        env: HTTP request environment
        query: url query parameters
        cookie: http cookie parameters (may be empty)

    Returns:
        Response - result of request
    """

    data = []
    if 'event_id' in query.keys():
        data = sql.get_enrolls_by_event_id(query['event_id'])
        # print('enrolls by event_id ', data)
    elif 'user_id' in query.keys():
        data = sql.get_enrolls_by_user_id(query['user_id'])
        # print('enrolls by user_id ', data)

    return http.ok(json_dict=data)