Exemple #1
0
    def package_writer(self, package_id):

        validator(validate_uuid, package_id)

        if request.method == "PUT":
            req_json = self.get_request_json_or_abort()
            if 'id' in req_json:
                if req_json['id'] != package_id:
                    abort(
                        400,
                        "Payload 'id' must match that in the URL: got {}, expected {}"
                        .format(req_json['id'], package_id))
                req_json.pop('id')

            package = parse_resp_timestamps(req_json)
            validator(validate_package, package)

            updated_package = package_collection.update_or_404(
                package_id, package)
            resp = (200, updated_package)

        if request.method == "DELETE":
            package_collection.remove_or_404(package_id)
            resp = (204, '')

        return resp
Exemple #2
0
 def __init__(self, rql_str):
     try:
         q = convert_to_mongo(rql_str)
     except UnparseError:
         abort(501)
     except ParserError as e:
         abort(400, e.message)
     super(RQLQuery, self).__init__(q)
Exemple #3
0
 def resource_list(self, api_version, resource_type):
     if api_version not in NODE_APIVERSIONS:
         abort(404)
     if resource_type == "self":
         return self.registry.list_self(api_version=api_version)
     elif resource_type not in RESOURCE_TYPES:
         abort(404)
     return self.registry.list_resource(resource_type.rstrip("s"), api_version=api_version).values()
Exemple #4
0
    def group_get(self, group_id):

        validator(validate_uuid, group_id)

        if request.method == "GET":
            group = group_collection.get_or_404(group_id)
            if group.get(API_VERSION_KEY, 0) < self.api_version:
                abort(404)
            resp = (200, group)

        return resp
Exemple #5
0
 def oauth(self):
     """Redirect to Auth Server's authorization endpoint"""
     redirect_uri = url_for('_authorization',
                            _external=True,
                            _scheme=PROTOCOL)
     if self.auth_registry.client_name:
         self.auth_client = getattr(self.auth_registry,
                                    self.auth_registry.client_name)
         return self.auth_client.authorize_redirect(redirect_uri)
     else:
         abort(400, "Client not registered with Auth Server")
    def _insert_package(version, req_json):
        resp = req_json.copy()
        req_json[API_VERSION_KEY] = version

        try:
            resource_id = db_mongo.insert_package(req_json)
        except ChildNotFound as e:
            abort(400, e.message)

        resp["id"] = resource_id
        resp = marshal.marshal(
            resp)  # TODO: could be safer to wrap make_response to marshal
        response = make_response(jsonify(resp), 201)
        response.autocorrect_location_header = False
        response.headers['Location'] = '{}/{}/'.format(request.path,
                                                       resource_id)
        return response
Exemple #7
0
    def group_writer(self, group_id):

        validator(validate_uuid, group_id)

        if request.method == "PUT":
            req_json = self.get_request_json_or_abort()
            if 'id' in req_json:
                if req_json['id'] != group_id:
                    abort(
                        400,
                        "Payload 'id' must match that in the URL: got {}, expected {}"
                        .format(req_json['id'], group_id))
                req_json.pop('id')

            validator(validate_group, req_json)

            updated_group = group_collection.update_or_404(group_id, req_json)
            resp = (200, updated_group)

        if request.method == "DELETE":
            db_mongo.remove_group_or_404(group_id)
            resp = (204, '')

        return resp
Exemple #8
0
 def resource_id(self, api_version, resource_type, resource_id):
     if api_version not in NODE_APIVERSIONS:
         abort(404)
     if resource_type not in RESOURCE_TYPES:
         abort(404)
     resources = self.registry.list_resource(resource_type.rstrip("s"), api_version=api_version)
     if resource_id in resources:
         return resources[resource_id]
     else:
         abort(404)
def validator(validation_func, obj):
    try:
        validation_func(obj)
    except ValidationError as e:
        abort(400, e.message)
    return obj
Exemple #10
0
 def get_request_json_or_abort():
     ret = request.get_json()
     if ret is None:
         abort(400, "Only accepts context-type: application/json")
     return ret
Exemple #11
0
 def _or_404(self, func, *args, **kwargs):
     item = func(*args, **kwargs)
     return marshall(item) if item else abort(404)
Exemple #12
0
 def _error(self):
     abort(400, "some error")
Exemple #13
0
 def versionroot(self, api_version):
     if api_version not in NODE_APIVERSIONS:
         abort(404)
     return [
         "self/", "sources/", "flows/", "devices/", "senders/", "receivers/"
     ]
Exemple #14
0
    def receiver_id_subscription(self, api_version, receiver_id):
        if api_version not in NODE_APIVERSIONS:
            abort(404)

        receiver_service = self.registry.find_service("receiver", receiver_id)
        if receiver_service is None:
            abort(404)

        receiver_service_href = self.registry.get_service_href(
            receiver_service)

        if receiver_service_href is None:
            # Service doesn't specify an href
            return {}
        if str(receiver_service_href).isdigit():
            # Service doesn't exist
            abort(404)
        receiver_subs_href = "receivers/" + receiver_id + "/target"
        href = urljoin(receiver_service_href, receiver_subs_href) + "/"
        # TODO Handle all request types
        # TODO Move into proxy class?

        headers = dict(request.headers)
        headers['Accept'] = 'application/json'
        del headers['Host']

        print(
            "Sending {} request to '{}' with headers={} and data='{}'".format(
                request.method, href, headers, request.data))

        try:
            resp = requests.request(request.method,
                                    href,
                                    params=request.args,
                                    data=request.data,
                                    headers=headers,
                                    allow_redirects=True,
                                    timeout=30)
        except Exception:
            abort(500)

        if not resp:
            abort(503)

        print(resp)

        if resp.status_code // 100 != 2:
            abort(resp.status_code)

        data = {}
        if len(resp.text) > 0:
            data = resp.json()
        else:
            return (204, '')
        if resp.status_code == 200:
            return (data)
        else:
            return (resp.status_code, data)