howler-api 2.11.0.dev240__tar.gz → 2.11.0.dev244__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-2.11.0.dev240 → howler_api-2.11.0.dev244}/PKG-INFO +1 -2
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/services/analytic_service.py +23 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/services/hit_service.py +17 -2
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/pyproject.toml +1 -2
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/README.md +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/__init__.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/actions/__init__.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/actions/add_label.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/actions/add_to_bundle.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/actions/change_field.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/actions/demote.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/actions/example_plugin.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/actions/prioritization.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/actions/promote.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/actions/remove_from_bundle.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/actions/remove_label.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/actions/transition.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/api/__init__.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/api/base.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/api/socket.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/api/v1/__init__.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/api/v1/action.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/api/v1/analytic.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/api/v1/auth.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/api/v1/borealis.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/api/v1/configs.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/api/v1/dossier.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/api/v1/help.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/api/v1/hit.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/api/v1/notebook.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/api/v1/overview.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/api/v1/search.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/api/v1/template.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/api/v1/tool.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/api/v1/user.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/api/v1/utils/__init__.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/api/v1/utils/etag.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/api/v1/view.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/app.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/common/README.md +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/common/__init__.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/common/classification.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/common/classification.yml +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/common/exceptions.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/common/hexdump.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/common/iprange.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/common/loader.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/common/logging/__init__.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/common/logging/audit.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/common/logging/format.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/common/net.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/common/net_static.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/common/random_user.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/common/swagger.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/config.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/cronjobs/__init__.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/cronjobs/retention.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/cronjobs/rules.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/datastore/README.md +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/datastore/__init__.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/datastore/bulk.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/datastore/collection.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/datastore/constants.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/datastore/exceptions.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/datastore/howler_store.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/datastore/migrations/fix_process.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/datastore/operations.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/datastore/schemas.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/datastore/store.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/datastore/support/__init__.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/datastore/support/build.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/datastore/support/schemas.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/datastore/types.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/error.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/external/__init__.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/external/generate_mitre.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/external/generate_sigma_rules.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/external/generate_tlds.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/external/reindex_data.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/external/wipe_databases.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/gunicorn_config.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/healthz.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/helper/__init__.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/helper/azure.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/helper/discover.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/helper/hit.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/helper/oauth.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/helper/search.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/helper/workflow.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/helper/ws.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/README.md +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/__init__.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/base.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/charter.txt +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/helper.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/howler_enum.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/__init__.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/action.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/analytic.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/assemblyline.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/aws.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/azure.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/cbs.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/config.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/dossier.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/__init__.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/agent.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/autonomous_system.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/client.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/cloud.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/code_signature.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/container.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/dns.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/egress.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/elf.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/email.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/error.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/event.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/faas.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/file.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/geo.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/group.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/hash.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/host.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/http.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/ingress.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/interface.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/network.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/observer.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/organization.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/os.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/pe.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/process.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/registry.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/related.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/rule.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/server.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/threat.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/tls.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/url.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/user.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/user_agent.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/vulnerability.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/gcp.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/hit.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/howler_data.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/lead.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/localized_label.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/overview.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/pivot.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/template.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/user.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/view.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/random_data.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/randomizer.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/patched.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/plugins/__init__.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/plugins/config.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/remote/__init__.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/remote/datatypes/README.md +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/remote/datatypes/__init__.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/remote/datatypes/counters.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/remote/datatypes/events.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/remote/datatypes/hash.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/remote/datatypes/lock.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/remote/datatypes/queues/__init__.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/remote/datatypes/queues/comms.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/remote/datatypes/queues/multi.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/remote/datatypes/queues/named.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/remote/datatypes/queues/priority.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/remote/datatypes/set.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/remote/datatypes/user_quota_tracker.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/security/__init__.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/security/socket.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/security/utils.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/services/__init__.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/services/action_service.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/services/auth_service.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/services/config_service.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/services/dossier_service.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/services/event_service.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/services/jwt_service.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/services/lucene_service.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/services/notebook_service.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/services/user_service.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/utils/__init__.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/utils/annotations.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/utils/chunk.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/utils/dict_utils.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/utils/isotime.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/utils/list_utils.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/utils/lucene.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/utils/path.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/utils/socket_utils.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/utils/str_utils.py +0 -0
- {howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/utils/uid.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: howler-api
|
|
3
|
-
Version: 2.11.0.
|
|
3
|
+
Version: 2.11.0.dev244
|
|
4
4
|
Summary: Howler - API server
|
|
5
5
|
License: MIT
|
|
6
6
|
Keywords: howler,alerting,gc,canada,cse-cst,cse,cst,cyber,cccs
|
|
@@ -33,7 +33,6 @@ Requires-Dist: gevent (==23.9.1)
|
|
|
33
33
|
Requires-Dist: gunicorn (==23.0.0)
|
|
34
34
|
Requires-Dist: luqum (>=1.0.0,<2.0.0)
|
|
35
35
|
Requires-Dist: mergedeep (>=1.3.4,<2.0.0)
|
|
36
|
-
Requires-Dist: netifaces (==0.11.0)
|
|
37
36
|
Requires-Dist: packaging (<25.0)
|
|
38
37
|
Requires-Dist: passlib (==1.7.4)
|
|
39
38
|
Requires-Dist: prometheus-client (==0.17.1)
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from typing import Any, Union
|
|
2
|
+
|
|
1
3
|
from howler.common.loader import datastore
|
|
2
4
|
from howler.common.logging import get_logger
|
|
3
5
|
from howler.datastore.operations import OdmUpdateOperation
|
|
@@ -36,6 +38,27 @@ def update_analytic(
|
|
|
36
38
|
return result
|
|
37
39
|
|
|
38
40
|
|
|
41
|
+
def get_matching_analytics(hits: Union[list[Hit], list[dict[str, Any]]]) -> list[Analytic]:
|
|
42
|
+
"""Get a list of matching analytics for the given list of hits.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
hits (Union[list[Hit], list[dict[str, Any]]]): A list of Hit objects or dictionaries representing hits.
|
|
46
|
+
Returns:
|
|
47
|
+
list[Analytic]: A list of Analytic objects that match the analytics referenced in the hits.
|
|
48
|
+
"""
|
|
49
|
+
storage = datastore()
|
|
50
|
+
|
|
51
|
+
analytic_names: set[str] = set()
|
|
52
|
+
for hit in hits:
|
|
53
|
+
analytic_names.add(f'"{sanitize_lucene_query(hit["howler"]["analytic"])}"')
|
|
54
|
+
|
|
55
|
+
existing_analytics: list[Analytic] = storage.analytic.search(f'name:({" OR ".join(analytic_names)})', as_obj=True)[
|
|
56
|
+
"items"
|
|
57
|
+
]
|
|
58
|
+
|
|
59
|
+
return existing_analytics
|
|
60
|
+
|
|
61
|
+
|
|
39
62
|
def save_from_hit(hit: Hit, user: User):
|
|
40
63
|
"""Save updates to an analytic based on a new hit that has been created
|
|
41
64
|
|
|
@@ -30,7 +30,7 @@ from howler.odm.models.ecs.event import Event
|
|
|
30
30
|
from howler.odm.models.hit import Hit
|
|
31
31
|
from howler.odm.models.howler_data import HitOperationType, HitStatus, HitStatusTransition, Log
|
|
32
32
|
from howler.odm.models.user import User
|
|
33
|
-
from howler.services import action_service, dossier_service
|
|
33
|
+
from howler.services import action_service, analytic_service, dossier_service
|
|
34
34
|
from howler.utils.dict_utils import extra_keys, flatten
|
|
35
35
|
from howler.utils.uid import get_random_id
|
|
36
36
|
|
|
@@ -821,7 +821,7 @@ def __match_metadata(candidates: list[dict[str, Any]], hit: dict[str, Any]) -> O
|
|
|
821
821
|
return sorted(matching_candidates, key=functools.cmp_to_key(__compare_metadata))[0]
|
|
822
822
|
|
|
823
823
|
|
|
824
|
-
def augment_metadata(data: list[dict[str, Any]] | dict[str, Any], metadata: list[str], user: dict[str, Any]):
|
|
824
|
+
def augment_metadata(data: list[dict[str, Any]] | dict[str, Any], metadata: list[str], user: dict[str, Any]): # noqa: C901
|
|
825
825
|
"""Augment hit search results with additional metadata.
|
|
826
826
|
|
|
827
827
|
This function enriches hit data by adding related information such as templates,
|
|
@@ -862,6 +862,21 @@ def augment_metadata(data: list[dict[str, Any]] | dict[str, Any], metadata: list
|
|
|
862
862
|
for hit in hits:
|
|
863
863
|
hit["__overview"] = __match_metadata(overview_candidates, hit)
|
|
864
864
|
|
|
865
|
+
if "analytic" in metadata:
|
|
866
|
+
matched_analytics = analytic_service.get_matching_analytics(hits)
|
|
867
|
+
|
|
868
|
+
for hit in hits:
|
|
869
|
+
matched_analytic = next(
|
|
870
|
+
(
|
|
871
|
+
analytic
|
|
872
|
+
for analytic in matched_analytics
|
|
873
|
+
if analytic.name.lower() == hit["howler"]["analytic"].lower()
|
|
874
|
+
),
|
|
875
|
+
None,
|
|
876
|
+
)
|
|
877
|
+
|
|
878
|
+
hit["__analytic"] = matched_analytic.as_primitives() if matched_analytic else None
|
|
879
|
+
|
|
865
880
|
if "dossiers" in metadata:
|
|
866
881
|
dossiers: list[dict[str, Any]] = datastore().dossier.search(
|
|
867
882
|
"dossier_id:*",
|
|
@@ -148,7 +148,7 @@ suppress-none-returning = true
|
|
|
148
148
|
[tool.poetry]
|
|
149
149
|
package-mode = true
|
|
150
150
|
name = "howler-api"
|
|
151
|
-
version = "2.11.0.
|
|
151
|
+
version = "2.11.0.dev244"
|
|
152
152
|
description = "Howler - API server"
|
|
153
153
|
authors = [
|
|
154
154
|
"Canadian Centre for Cyber Security <howler@cyber.gc.ca>",
|
|
@@ -203,7 +203,6 @@ flask = "2.2.5"
|
|
|
203
203
|
flask-caching = "2.0.2"
|
|
204
204
|
gevent = "23.9.1"
|
|
205
205
|
gunicorn = "23.0.0"
|
|
206
|
-
netifaces = "0.11.0"
|
|
207
206
|
packaging = "<25.0"
|
|
208
207
|
passlib = "1.7.4"
|
|
209
208
|
prometheus-client = "0.17.1"
|
|
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
|
|
File without changes
|
|
File without changes
|
{howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/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
|
{howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/external/generate_sigma_rules.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
|
{howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/autonomous_system.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/code_signature.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
|
{howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/odm/models/ecs/vulnerability.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
|
{howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/remote/datatypes/queues/__init__.py
RENAMED
|
File without changes
|
{howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/remote/datatypes/queues/comms.py
RENAMED
|
File without changes
|
{howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/remote/datatypes/queues/multi.py
RENAMED
|
File without changes
|
{howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/remote/datatypes/queues/named.py
RENAMED
|
File without changes
|
{howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/howler/remote/datatypes/queues/priority.py
RENAMED
|
File without changes
|
|
File without changes
|
{howler_api-2.11.0.dev240 → howler_api-2.11.0.dev244}/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
|