howler-api 4.1.0.dev1502__tar.gz → 4.1.0.dev1552__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-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/PKG-INFO +1 -1
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/services/action_service.py +16 -8
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/pyproject.toml +1 -1
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/README.md +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/__init__.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/actions/__init__.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/actions/add_label.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/actions/add_to_bundle.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/actions/add_to_case.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/actions/change_field.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/actions/demote.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/actions/example_plugin.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/actions/prioritization.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/actions/promote.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/actions/remove_from_bundle.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/actions/remove_label.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/actions/transition.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/__init__.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/base.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/socket.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/v1/__init__.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/v1/action.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/v1/analytic.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/v1/auth.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/v1/clue.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/v1/configs.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/v1/dossier.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/v1/help.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/v1/hit.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/v1/notebook.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/v1/overview.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/v1/search.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/v1/template.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/v1/tool.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/v1/user.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/v1/utils/__init__.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/v1/utils/etag.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/v1/utils/params.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/v1/view.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/v2/__init__.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/v2/case.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/v2/fuzzy.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/v2/ingest.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/api/v2/search.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/app.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/common/README.md +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/common/__init__.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/common/classification.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/common/classification.yml +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/common/exceptions.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/common/loader.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/common/logging/__init__.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/common/logging/audit.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/common/logging/format.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/common/net.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/common/net_static.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/common/random_user.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/common/swagger.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/config.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/cronjobs/__init__.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/cronjobs/action_queue_worker.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/cronjobs/correlation.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/cronjobs/retention.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/cronjobs/view_cleanup.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/datastore/README.md +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/datastore/__init__.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/datastore/bulk.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/datastore/collection.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/datastore/constants.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/datastore/exceptions.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/datastore/howler_store.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/datastore/migrations/fix_process.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/datastore/operations.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/datastore/schemas.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/datastore/store.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/datastore/support/__init__.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/datastore/support/build.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/datastore/support/schemas.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/datastore/types.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/datastore/utils.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/error.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/external/README.md +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/external/__init__.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/external/check_duplicates.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/external/generate_mitre.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/external/generate_sigma_rules.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/external/generate_tlds.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/external/reindex_data.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/external/wipe_databases.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/gunicorn_config.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/healthz.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/helper/__init__.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/helper/azure.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/helper/discover.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/helper/hit.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/helper/oauth.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/helper/search.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/helper/workflow.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/helper/ws.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/README.md +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/__init__.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/base.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/charter.txt +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/constants.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/helper.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/howler_enum.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/mixins.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/__init__.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/action.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/analytic.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/assemblyline.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/aws.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/azure.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/case.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/cbs.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/clue.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/config.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/dossier.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/__init__.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/agent.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/autonomous_system.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/client.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/cloud.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/code_signature.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/container.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/dns.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/egress.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/elf.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/email.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/error.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/event.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/faas.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/file.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/geo.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/group.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/hash.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/host.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/http.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/ingress.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/interface.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/network.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/observer.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/organization.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/os.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/pe.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/process.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/registry.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/related.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/rule.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/server.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/threat.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/tls.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/url.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/user.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/user_agent.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/vulnerability.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/event.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/gcp.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/hit.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/howler_data.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/lead.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/localized_label.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/overview.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/pivot.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/record.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/template.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/user.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/view.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/random_data.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/randomizer.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/patched.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/plugins/__init__.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/plugins/config.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/remote/__init__.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/remote/datatypes/README.md +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/remote/datatypes/__init__.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/remote/datatypes/counters.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/remote/datatypes/events.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/remote/datatypes/hash.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/remote/datatypes/lock.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/remote/datatypes/queues/__init__.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/remote/datatypes/queues/comms.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/remote/datatypes/queues/multi.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/remote/datatypes/queues/named.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/remote/datatypes/queues/priority.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/remote/datatypes/set.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/remote/datatypes/user_quota_tracker.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/security/__init__.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/security/login.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/security/socket.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/security/utils.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/services/__init__.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/services/analytic_service.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/services/auth_service.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/services/bundle_compat_service.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/services/case_service.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/services/comms_service.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/services/config_service.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/services/correlation_service.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/services/docs_service.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/services/dossier_service.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/services/event_service.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/services/fuzzy_service.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/services/hit_service.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/services/jwt_service.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/services/lucene_service.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/services/notebook_service.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/services/overview_service.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/services/search_service.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/services/template_service.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/services/user_service.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/services/viewer_service.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/telemetry.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/utils/__init__.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/utils/annotations.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/utils/chunk.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/utils/compat.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/utils/constants.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/utils/dict_utils.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/utils/indexes.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/utils/isotime.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/utils/list_utils.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/utils/lucene.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/utils/net_utils.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/utils/path.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/utils/socket_utils.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/utils/str_utils.py +0 -0
- {howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/utils/uid.py +0 -0
|
@@ -3,6 +3,7 @@ from collections import defaultdict
|
|
|
3
3
|
from importlib.util import find_spec
|
|
4
4
|
from typing import Any, Optional, TypedDict
|
|
5
5
|
|
|
6
|
+
from cryptography.exceptions import InvalidTag
|
|
6
7
|
from flask import Response, has_request_context, request
|
|
7
8
|
|
|
8
9
|
from howler import actions
|
|
@@ -142,19 +143,26 @@ def process_action_batch(trigger: str, items: list[TriggeredAction]) -> None:
|
|
|
142
143
|
|
|
143
144
|
for item in items:
|
|
144
145
|
uname = item.get("uname")
|
|
145
|
-
|
|
146
|
-
auth_token = auth_service.decrypt_token(item.get("auth_token"))
|
|
147
|
-
except Exception:
|
|
148
|
-
logger.exception("Unable to decrypt queued authorization token for user=%s", uname)
|
|
149
|
-
auth_token = None
|
|
150
|
-
|
|
151
|
-
groups[(uname, auth_token)].extend(item["hit_ids"])
|
|
146
|
+
groups[(uname, item.get("auth_token"))].extend(item["hit_ids"])
|
|
152
147
|
|
|
153
|
-
for (uname,
|
|
148
|
+
for (uname, encrypted_auth_token), hit_ids in groups.items():
|
|
154
149
|
# Deduplicate IDs within a batch group
|
|
155
150
|
unique_ids = list(dict.fromkeys(hit_ids))
|
|
156
151
|
query = f"howler.id:({' OR '.join(sanitize_lucene_query(h) for h in unique_ids)})"
|
|
157
152
|
|
|
153
|
+
try:
|
|
154
|
+
auth_token = auth_service.decrypt_token(encrypted_auth_token)
|
|
155
|
+
except InvalidTag:
|
|
156
|
+
logger.error( # noqa: TRY400
|
|
157
|
+
"Queued authorization token for user=%s was encrypted with a different key. "
|
|
158
|
+
"Ensure all Howler instances sharing persistent Redis use the same system.encryption_key.",
|
|
159
|
+
uname,
|
|
160
|
+
)
|
|
161
|
+
auth_token = None
|
|
162
|
+
except Exception:
|
|
163
|
+
logger.exception("Unable to decrypt queued authorization token for user=%s", uname)
|
|
164
|
+
auth_token = None
|
|
165
|
+
|
|
158
166
|
try:
|
|
159
167
|
user = datastore().user.get(uname)
|
|
160
168
|
bulk_execute_on_query(query, trigger=trigger, user=user, auth_token=auth_token)
|
|
@@ -152,7 +152,7 @@ suppress-none-returning = true
|
|
|
152
152
|
[tool.poetry]
|
|
153
153
|
package-mode = true
|
|
154
154
|
name = "howler-api"
|
|
155
|
-
version = "4.1.0.
|
|
155
|
+
version = "4.1.0.dev1552"
|
|
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
|
{howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/cronjobs/action_queue_worker.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-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/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
|
{howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/odm/models/ecs/autonomous_system.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/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-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/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
|
|
File without changes
|
|
File without changes
|
{howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/remote/datatypes/queues/__init__.py
RENAMED
|
File without changes
|
{howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/remote/datatypes/queues/comms.py
RENAMED
|
File without changes
|
{howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/remote/datatypes/queues/multi.py
RENAMED
|
File without changes
|
{howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/remote/datatypes/queues/named.py
RENAMED
|
File without changes
|
{howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/remote/datatypes/queues/priority.py
RENAMED
|
File without changes
|
|
File without changes
|
{howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/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
|
{howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/services/bundle_compat_service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.1.0.dev1502 → howler_api-4.1.0.dev1552}/howler/services/correlation_service.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
|