Beispiel #1
0
 def wrapper(request, *args, **kw):
     status = 200
     try:
         result = decorated(request, *args, **kw)
     except UserException as user_exception:
         log("User exception in mock: %s" % user_exception.message,
             request=request,
             exc_info=True)
         status = 500
         result = {
             'success': False,
             'result': {
                 'message': user_exception.message
             }
         }
     except json.JSONDecodeError:
         log(ERROR_INVALID_JSON, request=request, exc_info=True)
         status = 500
         result = {
             'success': False,
             'result': {
                 'message': ERROR_INVALID_JSON
             }
         }
     except Exception:
         log("Exception in mock", request=request, exc_info=True)
         status = 500
         result = {'success': False, 'result': {'message': ERROR_TEXT}}
     if 'success' not in result:
         result = {'success': True, 'result': result}
     return jsonify(result,
                    status=status,
                    headers=generate_cors_headers(request))
Beispiel #2
0
async def _before_request(request):
    """Respond to preflight CORS requests and load parameters."""
    if request.method == "OPTIONS":
        return textify("ok", headers=generate_cors_headers(request))
    request['args'] = {}
    if request.form:
        for key in request.form:
            key_lower = key.lower()
            if key_lower in _MUST_BE_GET_PARAM and not request.path.startswith(URL_BASE + '/email/'):
                raise UserException(CANNOT_BE_POST_PARAM % key)
            request['args'][key_lower] = request.form[key][0]
    elif request.json:
        slack_message = ('type' in request.json and request.json['type'] in _SLACK_TYPES)
        for key in request.json:
            key_lower = key.lower()
            if slack_message:
                request['args'][key_lower] = request.json[key]
            else:
                if key_lower in _MUST_BE_GET_PARAM and not request.path.startswith('/hangouts/'):
                    raise UserException(CANNOT_BE_POST_PARAM % key)
                # Make all url parameters strings
                if isinstance(request.json[key], dict):
                    request['args'][key_lower] = json.dumps(request.json[key])
                elif isinstance(request.json[key], list):
                    request['args'][key_lower] = json.dumps(request.json[key])
                else:
                    request['args'][key_lower] = str(request.json[key])
    # Take all Get parameters
    for key, value in list(request.raw_args.items()):
        key_lower = key.lower()
        if key_lower in _MUST_BE_POST_PARAM:
            raise UserException(CANNOT_BE_GET_PARAM % key)
        request['args'][key_lower] = value
Beispiel #3
0
async def _preflight_cors(request):
    """Respond to preflight CORS requests and load parameters."""
    if request.method == "OPTIONS":
        return textify("ok", headers=generate_cors_headers(request))
    request['args'] = {}
    if request.form:
        for key in request.form:
            key_lower = key.lower()
            if key_lower in _MUST_BE_GET_PARAM:
                raise UserException(CANNOT_BE_POST_PARAM % key)
            request['args'][key_lower] = request.form[key][0]
    elif request.json:
        for key in request.json:
            key_lower = key.lower()
            if key_lower in _MUST_BE_GET_PARAM:
                raise UserException(CANNOT_BE_POST_PARAM % key)
            # Make all url parameters strings
            if isinstance(request.json[key], list):
                request['args'][key_lower] = json.dumps(request.json[key])
            else:
                request['args'][key_lower] = str(request.json[key])
    # Take all Get parameters
    for key, value in list(request.raw_args.items()):
        key_lower = key.lower()
        if key_lower in _MUST_BE_POST_PARAM:
            raise UserException(CANNOT_BE_GET_PARAM % key)
        request['args'][key_lower] = value
async def _version(request):
    return jsonify(
        {
            'version': version.VERSION,
            'name': version.NAME,
            'hostname': cape_frontend_settings.HOSTNAME,
            'port': cape_frontend_settings.CONFIG_SERVER['port'],
        },
        headers=generate_cors_headers(request))
def _timeout(request, exception):
    return jsonify({
        'success': False,
        'result': {
            'message': TIMEOUT_TEXT
        }
    },
                   status=500,
                   headers=generate_cors_headers(request))
def _404(request, exception):
    return jsonify({
        'success': False,
        'result': {
            'message': NOT_FOUND_TEXT
        }
    },
                   status=500,
                   headers=generate_cors_headers(request))
Beispiel #7
0
def _500(request, exception):
    log('500', request=request, exc_info=True)
    if exception.__class__ is UserException:
        log("User exception: %s" % exception.message,
            request=request,
            exc_info=True)
        message = exception.message
        return jsonify({
            'success': False,
            'result': {
                'message': message
            }
        },
                       status=500,
                       headers=generate_cors_headers(request))
    return redirect('/500.html')
def _500(request, exception):
    error_id = secrets.token_urlsafe(32)
    if exception.__class__ is UserException:
        debug("User exception: %s" % exception.message, exc_info=True)
        message = exception.message
    elif exception.__class__ is json.JSONDecodeError:
        debug(ERROR_INVALID_JSON, exc_info=True, error_id=error_id)
        message = ERROR_INVALID_JSON
    elif exception.__class__ is InvalidUsage:
        debug(ERROR_INVALID_USAGE, exc_info=True)
        message = ERROR_INVALID_USAGE
    else:
        warning("Exception in API", exc_info=True)
        message = ERROR_TEXT
    return jsonify(
        {
            'success': False,
            'result': {
                'message': message,
                'errorId': error_id
            }
        },
        status=500,
        headers=generate_cors_headers(request))
Beispiel #9
0
async def _version(request):
    return jsonify(status(request), headers=generate_cors_headers(request))
Beispiel #10
0
 def wrapper(request, *args, **kw):
     status = 200
     result = decorated(request, *args, **kw)
     return textify(result, status=status, headers=generate_cors_headers(request))
Beispiel #11
0
 def wrapper(request, *args, **kw):
     status = 200
     result = decorated(request, *args, **kw)
     if 'success' not in result:
         result = {'success': True, 'result': result}
     return jsonify(result, status=status, headers=generate_cors_headers(request))