howler-api 3.2.0.dev475__tar.gz → 3.2.0.dev490__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/PKG-INFO +1 -1
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/api/v1/search.py +37 -1
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/pyproject.toml +1 -1
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/README.md +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/__init__.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/actions/__init__.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/actions/add_label.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/actions/add_to_bundle.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/actions/change_field.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/actions/demote.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/actions/example_plugin.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/actions/prioritization.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/actions/promote.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/actions/remove_from_bundle.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/actions/remove_label.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/actions/transition.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/api/__init__.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/api/base.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/api/socket.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/api/v1/__init__.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/api/v1/action.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/api/v1/analytic.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/api/v1/auth.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/api/v1/clue.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/api/v1/configs.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/api/v1/dossier.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/api/v1/help.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/api/v1/hit.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/api/v1/notebook.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/api/v1/overview.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/api/v1/template.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/api/v1/tool.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/api/v1/user.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/api/v1/utils/__init__.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/api/v1/utils/etag.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/api/v1/view.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/app.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/common/README.md +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/common/__init__.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/common/classification.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/common/classification.yml +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/common/exceptions.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/common/loader.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/common/logging/__init__.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/common/logging/audit.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/common/logging/format.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/common/net.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/common/net_static.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/common/random_user.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/common/swagger.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/config.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/cronjobs/__init__.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/cronjobs/retention.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/cronjobs/rules.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/cronjobs/view_cleanup.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/datastore/README.md +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/datastore/__init__.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/datastore/bulk.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/datastore/collection.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/datastore/constants.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/datastore/exceptions.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/datastore/howler_store.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/datastore/migrations/fix_process.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/datastore/operations.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/datastore/schemas.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/datastore/store.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/datastore/support/__init__.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/datastore/support/build.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/datastore/support/schemas.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/datastore/types.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/error.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/external/__init__.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/external/generate_mitre.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/external/generate_sigma_rules.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/external/generate_tlds.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/external/reindex_data.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/external/wipe_databases.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/gunicorn_config.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/healthz.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/helper/__init__.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/helper/azure.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/helper/discover.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/helper/hit.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/helper/oauth.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/helper/search.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/helper/workflow.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/helper/ws.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/README.md +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/__init__.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/base.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/charter.txt +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/helper.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/howler_enum.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/__init__.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/action.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/analytic.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/assemblyline.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/aws.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/azure.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/cbs.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/clue.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/config.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/dossier.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/__init__.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/agent.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/autonomous_system.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/client.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/cloud.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/code_signature.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/container.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/dns.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/egress.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/elf.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/email.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/error.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/event.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/faas.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/file.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/geo.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/group.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/hash.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/host.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/http.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/ingress.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/interface.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/network.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/observer.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/organization.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/os.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/pe.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/process.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/registry.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/related.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/rule.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/server.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/threat.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/tls.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/url.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/user.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/user_agent.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/vulnerability.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/gcp.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/hit.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/howler_data.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/lead.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/localized_label.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/overview.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/pivot.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/template.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/user.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/view.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/random_data.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/randomizer.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/patched.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/plugins/__init__.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/plugins/config.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/remote/__init__.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/remote/datatypes/README.md +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/remote/datatypes/__init__.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/remote/datatypes/counters.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/remote/datatypes/events.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/remote/datatypes/hash.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/remote/datatypes/lock.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/remote/datatypes/queues/__init__.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/remote/datatypes/queues/comms.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/remote/datatypes/queues/multi.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/remote/datatypes/queues/named.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/remote/datatypes/queues/priority.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/remote/datatypes/set.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/remote/datatypes/user_quota_tracker.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/security/__init__.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/security/socket.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/security/utils.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/services/__init__.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/services/action_service.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/services/analytic_service.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/services/auth_service.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/services/config_service.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/services/dossier_service.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/services/event_service.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/services/hit_service.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/services/jwt_service.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/services/lucene_service.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/services/notebook_service.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/services/overview_service.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/services/template_service.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/services/user_service.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/utils/__init__.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/utils/annotations.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/utils/chunk.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/utils/dict_utils.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/utils/isotime.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/utils/list_utils.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/utils/lucene.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/utils/path.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/utils/socket_utils.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/utils/str_utils.py +0 -0
- {howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/utils/uid.py +0 -0
|
@@ -10,7 +10,7 @@ from sigma.rule import SigmaRule
|
|
|
10
10
|
from werkzeug.exceptions import BadRequest
|
|
11
11
|
from yaml.scanner import ScannerError
|
|
12
12
|
|
|
13
|
-
from howler.api import bad_request, make_subapi_blueprint, ok
|
|
13
|
+
from howler.api import bad_request, forbidden, make_subapi_blueprint, ok
|
|
14
14
|
from howler.common.loader import datastore
|
|
15
15
|
from howler.common.logging import get_logger
|
|
16
16
|
from howler.common.swagger import generate_swagger_docs
|
|
@@ -25,6 +25,8 @@ search_api._doc = "Perform search queries" # type: ignore
|
|
|
25
25
|
|
|
26
26
|
logger = get_logger(__file__)
|
|
27
27
|
|
|
28
|
+
SENSITIVE_USER_FIELDS = ["password", "apikeys", "*"]
|
|
29
|
+
|
|
28
30
|
|
|
29
31
|
def generate_params(request: Request, fields: list[str], multi_fields: list[str], params: dict[str, Any] | None = None):
|
|
30
32
|
"""Generate a list of parameters, combining the request data and the query arguments"""
|
|
@@ -136,6 +138,13 @@ def search(index, **kwargs):
|
|
|
136
138
|
if not query:
|
|
137
139
|
return bad_request(err="There was no search query.")
|
|
138
140
|
|
|
141
|
+
if (
|
|
142
|
+
"fl" in params
|
|
143
|
+
and index == "user"
|
|
144
|
+
and any(sensitive_field in params["fl"] for sensitive_field in SENSITIVE_USER_FIELDS)
|
|
145
|
+
):
|
|
146
|
+
return forbidden(err="Invalid fields to retrieve.")
|
|
147
|
+
|
|
139
148
|
try:
|
|
140
149
|
metadata = params.pop("metadata", [])
|
|
141
150
|
result = collection().search(query, as_obj=False, **params)
|
|
@@ -276,6 +285,13 @@ def eql_search(index, **kwargs):
|
|
|
276
285
|
if not eql_query:
|
|
277
286
|
return bad_request(err="There was no EQL search query.")
|
|
278
287
|
|
|
288
|
+
if (
|
|
289
|
+
"fl" in params
|
|
290
|
+
and index == "user"
|
|
291
|
+
and any(sensitive_field in params["fl"] for sensitive_field in SENSITIVE_USER_FIELDS)
|
|
292
|
+
):
|
|
293
|
+
return forbidden(err="Invalid fields to retrieve.")
|
|
294
|
+
|
|
279
295
|
try:
|
|
280
296
|
return ok(collection().raw_eql_search(**params))
|
|
281
297
|
except (SearchException, BadRequestError) as e:
|
|
@@ -364,6 +380,13 @@ def sigma_search(index, **kwargs):
|
|
|
364
380
|
|
|
365
381
|
lucene_queries = LuceneBackend(index_names=[es_collection.index_name]).convert_rule(rule)
|
|
366
382
|
|
|
383
|
+
if (
|
|
384
|
+
"fl" in params
|
|
385
|
+
and index == "user"
|
|
386
|
+
and any(sensitive_field in params["fl"] for sensitive_field in SENSITIVE_USER_FIELDS)
|
|
387
|
+
):
|
|
388
|
+
return forbidden(err="Invalid fields to retrieve.")
|
|
389
|
+
|
|
367
390
|
try:
|
|
368
391
|
return ok(es_collection.search("*:*", **params, filters=[*params.get("filters", []), *lucene_queries]))
|
|
369
392
|
except (SearchException, BadRequestError) as e:
|
|
@@ -432,6 +455,13 @@ def group_search(index, group_field, **kwargs):
|
|
|
432
455
|
if not group_field:
|
|
433
456
|
return bad_request(err="The field to group on was not specified.")
|
|
434
457
|
|
|
458
|
+
if (
|
|
459
|
+
"fl" in params
|
|
460
|
+
and index == "user"
|
|
461
|
+
and any(sensitive_field in params["fl"] for sensitive_field in SENSITIVE_USER_FIELDS)
|
|
462
|
+
):
|
|
463
|
+
return forbidden(err="Invalid fields to retrieve.")
|
|
464
|
+
|
|
435
465
|
try:
|
|
436
466
|
return ok(collection().grouped_search(group_field, **params))
|
|
437
467
|
except (SearchException, BadRequestError) as e:
|
|
@@ -592,6 +622,9 @@ def facet(index, **kwargs):
|
|
|
592
622
|
logger.warning("Invalid field %s requested for faceting, skipping", field)
|
|
593
623
|
continue
|
|
594
624
|
|
|
625
|
+
if index == "user" and any(sensitive_field in field for sensitive_field in SENSITIVE_USER_FIELDS):
|
|
626
|
+
return forbidden(err="Invalid fields to facet on.")
|
|
627
|
+
|
|
595
628
|
facet_result[field] = collection().facet(field, **params)
|
|
596
629
|
|
|
597
630
|
return ok(facet_result)
|
|
@@ -642,6 +675,9 @@ def facet_field(index, field, **kwargs):
|
|
|
642
675
|
if field_info is None:
|
|
643
676
|
return bad_request(err=f"Field '{field}' is not a valid field in index: {index}")
|
|
644
677
|
|
|
678
|
+
if index == "user" and any(sensitive_field in field for sensitive_field in SENSITIVE_USER_FIELDS):
|
|
679
|
+
return forbidden(err="Invalid field to facet on.")
|
|
680
|
+
|
|
645
681
|
fields = ["query", "mincount", "rows"]
|
|
646
682
|
multi_fields = ["filters"]
|
|
647
683
|
|
|
@@ -152,7 +152,7 @@ suppress-none-returning = true
|
|
|
152
152
|
[tool.poetry]
|
|
153
153
|
package-mode = true
|
|
154
154
|
name = "howler-api"
|
|
155
|
-
version = "3.2.0.
|
|
155
|
+
version = "3.2.0.dev490"
|
|
156
156
|
description = "Howler - API server"
|
|
157
157
|
authors = [
|
|
158
158
|
"Canadian Centre for Cyber Security <howler@cyber.gc.ca>",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/datastore/migrations/fix_process.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/odm/models/ecs/autonomous_system.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/remote/datatypes/queues/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/remote/datatypes/queues/priority.py
RENAMED
|
File without changes
|
|
File without changes
|
{howler_api-3.2.0.dev475 → howler_api-3.2.0.dev490}/howler/remote/datatypes/user_quota_tracker.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|