def delete_subscribe():
    class PostData(TypedDict):
        endpoint: str
        channel: str

    if not current_user.is_role('admin'):
        return api_utils.response_unauthorized()

    post_data: PostData = request.get_json()
    endpoint = post_data['endpoint']
    channel = post_data['channel']

    if channel == 'administration':
        if not current_user.is_authenticated:
            return login.unauthorized()

        current_user.remove_subscription(endpoint)

        db.session.commit()

        return api_utils.response_ok()
    else:
        # FIXME: This code is not really done, but until we can send out daily menus in a consistent manner it'll
        #        have to be this way

        return api_utils.response_bad_request()
def post_learning():
    class PostData(TypedDict):
        id: str
        course_name_correct: bool
        course_type: int
        course_sub_type: int
        price_students_correct: bool
        price_staff_correct: bool

    if not current_user.is_role('learner'):
        return api_utils.response_unauthorized()

    post_data: PostData = request.get_json()

    datapoint = LearningDatapoint.find_by_id(int(post_data['id']))

    datapoint.user_submit(
        current_user, {
            'course_name_correct': post_data['course_name_correct'],
            'course_type': post_data['course_type'],
            'course_sub_type': post_data['course_sub_type'],
            'price_students_correct': post_data['price_students_correct'],
            'price_staff_correct': post_data['price_staff_correct']
        })

    db.session.commit()

    return jsonify({'status': 200, 'message': HTTP_STATUS_CODES[200]}), 200
def get_learning():
    if not current_user.is_role('learner'):
        return api_utils.response_unauthorized()

    datapoint = LearningDatapoint.get_random(current_user)

    if datapoint is None:
        return jsonify({
            'status': 200,
            'message': HTTP_STATUS_CODES[200],
            'data': None
        }), 200

    processed = json.loads(datapoint.processed_data)

    result = {
        'id': str(datapoint.id),
        'screenshot': datapoint.screenshot,
        'course_name': processed['name']['nl'],
        'course_type': models.CourseType[processed['course_type']].value,
        'course_sub_type':
        models.CourseSubType[processed['course_sub_type']].value,
        'price_students': processed['price_students'],
        'price_staff': processed['price_staff'],
    }

    return jsonify({
        'status': 200,
        'message': HTTP_STATUS_CODES[200],
        'data': result
    }), 200
def post_trigger():
    class PostData(TypedDict):
        trigger: str

    if not current_user.is_role('admin'):
        return api_utils.response_unauthorized()

    post_data: PostData = request.get_json()
    trigger = post_data['trigger']

    if trigger == 'notification_test_error':
        try:
            raise RuntimeError('Test exception')
        except RuntimeError as e:
            notify_admins(messages.ExceptionMessage(triggers.Trigger(), e))

        return api_utils.response_ok()
    elif trigger == 'notification_test_text':
        notify_admins(
            messages.TextMessage(triggers.Trigger(), 'Test notification'))

        return api_utils.response_ok()
    elif trigger == 'menu_update':
        from komidabot.komidabot import update_menus

        update_menus()

        return api_utils.response_ok()
    else:
        return api_utils.response_bad_request()
def put_subscribe():
    class PostData(TypedDict):
        old_endpoint: str
        endpoint: str
        keys: Dict[str, str]

    if not current_user.is_role('admin'):
        return api_utils.response_unauthorized()

    post_data: PostData = request.get_json()
    old_endpoint = post_data['old_endpoint']
    endpoint = post_data['endpoint']
    keys = post_data['keys']

    app = get_app()
    user: WebUser = app.user_manager.get_user(
        UserId(old_endpoint, web_constants.PROVIDER_ID))

    # FIXME: Change internal ID of user and keys
    # FIXME: Change admin subscriptions as well? Need to verify this

    # FIXME: This code is not really done, but until we can send out daily menus in a consistent manner it'll
    #        have to be this way

    return api_utils.response_bad_request()
Esempio n. 6
0
def unauthorized_handler():
    return api_utils.response_unauthorized()