def get(self, request, project):
        """
        List a project's filters

        Retrieve a list of filters for a given project.

            {method} {path}

        """
        results = []
        for flt in inbound_filters.get_all_filter_specs():
            results.append({
                "id":
                flt.id,
                # 'active' will be either a boolean or list for the legacy browser filters
                # all other filters will be boolean
                "active":
                inbound_filters.get_filter_state(flt.id, project),
                "description":
                flt.description,
                "name":
                flt.name,
                "hello":
                flt.id + " - " + flt.name,
            })
        results.sort(key=lambda x: x["name"])
        return Response(results)
Ejemplo n.º 2
0
def get_filter_settings(project):
    filter_settings = {}

    for flt in get_all_filter_specs():
        filter_id = get_filter_key(flt)
        settings = _load_filter_settings(flt, project)
        filter_settings[filter_id] = settings

    invalid_releases = project.get_option(u"sentry:{}".format(FilterTypes.RELEASES))
    if invalid_releases:
        filter_settings["releases"] = {"releases": invalid_releases}

    blacklisted_ips = project.get_option("sentry:blacklisted_ips")
    if blacklisted_ips:
        filter_settings["clientIps"] = {"blacklistedIps": blacklisted_ips}

    error_messages = project.get_option(u"sentry:{}".format(FilterTypes.ERROR_MESSAGES))
    if error_messages:
        filter_settings["errorMessages"] = {"patterns": error_messages}

    csp_disallowed_sources = []
    if bool(project.get_option("sentry:csp_ignored_sources_defaults", True)):
        csp_disallowed_sources += DEFAULT_DISALLOWED_SOURCES
    csp_disallowed_sources += project.get_option("sentry:csp_ignored_sources", [])
    if csp_disallowed_sources:
        filter_settings["csp"] = {"disallowedSources": csp_disallowed_sources}

    return filter_settings
    def put(self, request: Request, project, filter_id) -> Response:
        """
        Update a filter

        Update a project's filter.

            {method} {path}

        """
        current_filter = None
        for flt in inbound_filters.get_all_filter_specs():
            if flt.id == filter_id:
                current_filter = flt
                break
        else:
            raise ResourceDoesNotExist  # could not find filter with the requested id

        serializer = current_filter.serializer_cls(data=request.data, partial=True)

        if not serializer.is_valid():
            return Response(serializer.errors, status=400)

        current_state = inbound_filters.get_filter_state(filter_id, project)

        new_state = inbound_filters.set_filter_state(filter_id, project, serializer.validated_data)
        audit_log_state = AuditLogEntryEvent.PROJECT_ENABLE

        returned_state = None
        if filter_id == "legacy-browsers":
            if isinstance(current_state, bool) or isinstance(new_state, bool):
                returned_state = new_state
                if not new_state:
                    audit_log_state = AuditLogEntryEvent.PROJECT_DISABLE

            elif current_state - new_state:
                returned_state = current_state - new_state
                audit_log_state = AuditLogEntryEvent.PROJECT_DISABLE

            elif new_state - current_state:
                returned_state = new_state - current_state

            elif new_state == current_state:
                returned_state = new_state

        if filter_id in ("browser-extensions", "localhost", "web-crawlers"):
            returned_state = filter_id
            removed = current_state - new_state

            if removed == 1:
                audit_log_state = AuditLogEntryEvent.PROJECT_DISABLE

        self.create_audit_entry(
            request=request,
            organization=project.organization,
            target_object=project.id,
            event=audit_log_state,
            data={"state": returned_state},
        )

        return Response(status=201)