howler-api 4.0.0.dev1258__tar.gz → 4.0.0.dev1279__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.0.0.dev1258 → howler_api-4.0.0.dev1279}/PKG-INFO +2 -2
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/datastore/howler_store.py +9 -1
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/config.py +3 -2
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/related.py +27 -1
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/pyproject.toml +3 -3
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/README.md +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/__init__.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/actions/__init__.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/actions/add_label.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/actions/add_to_bundle.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/actions/add_to_case.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/actions/change_field.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/actions/demote.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/actions/example_plugin.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/actions/prioritization.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/actions/promote.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/actions/remove_from_bundle.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/actions/remove_label.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/actions/transition.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/__init__.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/base.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/socket.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/v1/__init__.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/v1/action.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/v1/analytic.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/v1/auth.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/v1/clue.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/v1/configs.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/v1/dossier.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/v1/help.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/v1/hit.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/v1/notebook.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/v1/overview.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/v1/search.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/v1/template.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/v1/tool.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/v1/user.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/v1/utils/__init__.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/v1/utils/etag.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/v1/utils/params.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/v1/view.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/v2/__init__.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/v2/case.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/v2/fuzzy.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/v2/ingest.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/api/v2/search.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/app.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/common/README.md +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/common/__init__.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/common/classification.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/common/classification.yml +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/common/exceptions.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/common/loader.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/common/logging/__init__.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/common/logging/audit.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/common/logging/format.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/common/net.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/common/net_static.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/common/random_user.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/common/swagger.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/config.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/cronjobs/__init__.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/cronjobs/action_queue_worker.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/cronjobs/correlation.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/cronjobs/retention.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/cronjobs/view_cleanup.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/datastore/README.md +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/datastore/__init__.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/datastore/bulk.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/datastore/collection.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/datastore/constants.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/datastore/exceptions.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/datastore/migrations/fix_process.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/datastore/operations.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/datastore/schemas.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/datastore/store.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/datastore/support/__init__.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/datastore/support/build.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/datastore/support/schemas.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/datastore/types.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/error.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/external/README.md +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/external/__init__.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/external/generate_mitre.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/external/generate_sigma_rules.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/external/generate_tlds.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/external/reindex_data.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/external/wipe_databases.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/gunicorn_config.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/healthz.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/helper/__init__.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/helper/azure.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/helper/discover.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/helper/hit.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/helper/oauth.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/helper/search.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/helper/workflow.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/helper/ws.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/README.md +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/__init__.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/base.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/charter.txt +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/constants.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/helper.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/howler_enum.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/mixins.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/__init__.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/action.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/analytic.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/assemblyline.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/aws.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/azure.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/case.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/cbs.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/clue.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/dossier.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/__init__.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/agent.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/autonomous_system.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/client.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/cloud.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/code_signature.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/container.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/dns.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/egress.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/elf.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/email.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/error.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/event.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/faas.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/file.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/geo.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/group.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/hash.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/host.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/http.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/ingress.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/interface.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/network.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/observer.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/organization.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/os.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/pe.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/process.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/registry.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/rule.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/server.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/threat.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/tls.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/url.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/user.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/user_agent.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/vulnerability.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/event.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/gcp.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/hit.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/howler_data.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/lead.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/localized_label.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/overview.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/pivot.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/record.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/template.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/user.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/view.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/random_data.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/randomizer.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/patched.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/plugins/__init__.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/plugins/config.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/remote/__init__.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/remote/datatypes/README.md +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/remote/datatypes/__init__.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/remote/datatypes/counters.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/remote/datatypes/events.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/remote/datatypes/hash.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/remote/datatypes/lock.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/remote/datatypes/queues/__init__.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/remote/datatypes/queues/comms.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/remote/datatypes/queues/multi.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/remote/datatypes/queues/named.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/remote/datatypes/queues/priority.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/remote/datatypes/set.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/remote/datatypes/user_quota_tracker.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/security/__init__.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/security/socket.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/security/utils.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/services/__init__.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/services/action_service.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/services/analytic_service.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/services/auth_service.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/services/bundle_compat_service.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/services/case_service.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/services/comms_service.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/services/config_service.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/services/correlation_service.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/services/docs_service.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/services/dossier_service.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/services/event_service.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/services/fuzzy_service.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/services/hit_service.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/services/jwt_service.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/services/lucene_service.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/services/notebook_service.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/services/overview_service.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/services/search_service.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/services/template_service.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/services/user_service.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/services/viewer_service.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/telemetry.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/utils/__init__.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/utils/annotations.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/utils/chunk.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/utils/compat.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/utils/constants.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/utils/dict_utils.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/utils/isotime.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/utils/list_utils.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/utils/lucene.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/utils/net_utils.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/utils/path.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/utils/socket_utils.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/utils/str_utils.py +0 -0
- {howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/utils/uid.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: howler-api
|
|
3
|
-
Version: 4.0.0.
|
|
3
|
+
Version: 4.0.0.dev1279
|
|
4
4
|
Summary: Howler - API server
|
|
5
5
|
License: MIT
|
|
6
6
|
Keywords: howler,alerting,gc,canada,cse-cst,cse,cst,cyber,cccs
|
|
@@ -28,7 +28,7 @@ Requires-Dist: chevron (==0.14.0)
|
|
|
28
28
|
Requires-Dist: elasticsearch (==8.19.3)
|
|
29
29
|
Requires-Dist: flasgger (>=0.9.7.1,<0.10.0.0)
|
|
30
30
|
Requires-Dist: flask (==3.1.3)
|
|
31
|
-
Requires-Dist: flask-caching (==2.4.
|
|
31
|
+
Requires-Dist: flask-caching (==2.4.1)
|
|
32
32
|
Requires-Dist: gevent (>=25.9.1,<26.0.0)
|
|
33
33
|
Requires-Dist: gunicorn (==23.0.0)
|
|
34
34
|
Requires-Dist: luqum (>=1.0.0,<2.0.0)
|
|
@@ -8,6 +8,7 @@ from howler.odm.models.action import Action
|
|
|
8
8
|
from howler.odm.models.analytic import Analytic
|
|
9
9
|
from howler.odm.models.case import Case
|
|
10
10
|
from howler.odm.models.clue import Clue
|
|
11
|
+
from howler.odm.models.config import ILMIndexConfig
|
|
11
12
|
from howler.odm.models.dossier import Dossier
|
|
12
13
|
from howler.odm.models.event import Event
|
|
13
14
|
from howler.odm.models.hit import Hit
|
|
@@ -34,6 +35,8 @@ INDEXES = {
|
|
|
34
35
|
"user_avatar": None,
|
|
35
36
|
}
|
|
36
37
|
|
|
38
|
+
ILM_ENABLED_INDEXES = {"hit", "event", "case"}
|
|
39
|
+
|
|
37
40
|
|
|
38
41
|
class HowlerDatastore(object):
|
|
39
42
|
def __init__(self, datastore_object: "ESStore"):
|
|
@@ -55,7 +58,12 @@ class HowlerDatastore(object):
|
|
|
55
58
|
)
|
|
56
59
|
|
|
57
60
|
for _index, _odm in INDEXES.items():
|
|
58
|
-
ilm_index_config = config.datastore.ilm.indices.get(_index)
|
|
61
|
+
ilm_index_config = config.datastore.ilm.indices.get(_index)
|
|
62
|
+
if ilm_index_config is None:
|
|
63
|
+
ilm_index_config = ILMIndexConfig(enabled=_index in ILM_ENABLED_INDEXES)
|
|
64
|
+
if not (config.datastore.ilm.enabled and ilm_index_config.enabled):
|
|
65
|
+
ilm_index_config = None
|
|
66
|
+
|
|
59
67
|
self.ds.register(_index, _odm, ilm_config=ilm_index_config)
|
|
60
68
|
|
|
61
69
|
def __enter__(self):
|
|
@@ -97,10 +97,11 @@ class Host(BaseModel):
|
|
|
97
97
|
class ILMIndexConfig(BaseModel):
|
|
98
98
|
"""Per-index ILM phase configuration.
|
|
99
99
|
|
|
100
|
-
Controls
|
|
100
|
+
Controls whether an index uses ILM and when it transitions to warm and cold phases.
|
|
101
101
|
Values are Elasticsearch age strings (e.g. "30d", "90d").
|
|
102
102
|
"""
|
|
103
103
|
|
|
104
|
+
enabled: bool = Field(default=True, description="Enable ILM for this index")
|
|
104
105
|
warm: Optional[str] = Field(
|
|
105
106
|
default=None,
|
|
106
107
|
description="Min age before the index enters the warm phase (e.g. '30d'). None to skip.",
|
|
@@ -135,7 +136,7 @@ class ILMConfig(BaseModel):
|
|
|
135
136
|
description="Maximum primary shard size before rollover (e.g. '50gb')",
|
|
136
137
|
)
|
|
137
138
|
indices: dict[str, ILMIndexConfig] = Field(
|
|
138
|
-
|
|
139
|
+
default_factory=dict,
|
|
139
140
|
description="Per-index ILM configuration, keyed by collection name (e.g. 'hit')",
|
|
140
141
|
)
|
|
141
142
|
|
|
@@ -33,7 +33,13 @@ class Related(odm.Model):
|
|
|
33
33
|
)
|
|
34
34
|
|
|
35
35
|
# Extra fields not defined in ECS but added for outline purposes
|
|
36
|
-
id = odm.Optional(
|
|
36
|
+
id = odm.Optional(
|
|
37
|
+
odm.Keyword(
|
|
38
|
+
description="The id related to the event.",
|
|
39
|
+
deprecated=True,
|
|
40
|
+
deprecated_description="related.ids should be used instead of related.id.",
|
|
41
|
+
)
|
|
42
|
+
)
|
|
37
43
|
|
|
38
44
|
uri = odm.Optional(odm.List(odm.URI(), description="All of the URIs related to the event."))
|
|
39
45
|
|
|
@@ -43,3 +49,23 @@ class Related(odm.Model):
|
|
|
43
49
|
description="All the signatures/rules that were triggered by the event.",
|
|
44
50
|
)
|
|
45
51
|
)
|
|
52
|
+
|
|
53
|
+
def __init__(self, data: dict = None, *args, **kwargs):
|
|
54
|
+
if data is not None and data.get("id") is not None:
|
|
55
|
+
# Avoid mutating the caller-provided dict
|
|
56
|
+
data = dict(data)
|
|
57
|
+
|
|
58
|
+
existing_ids = data.get("ids")
|
|
59
|
+
if isinstance(existing_ids, (list, tuple)):
|
|
60
|
+
merged_ids = list(existing_ids)
|
|
61
|
+
elif existing_ids is None:
|
|
62
|
+
merged_ids = []
|
|
63
|
+
else:
|
|
64
|
+
merged_ids = [existing_ids]
|
|
65
|
+
|
|
66
|
+
if data["id"] not in merged_ids:
|
|
67
|
+
merged_ids.append(data["id"])
|
|
68
|
+
|
|
69
|
+
data["ids"] = merged_ids
|
|
70
|
+
|
|
71
|
+
super().__init__(data, *args, **kwargs)
|
|
@@ -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.0.0.
|
|
155
|
+
version = "4.0.0.dev1279"
|
|
156
156
|
description = "Howler - API server"
|
|
157
157
|
authors = [
|
|
158
158
|
"Canadian Centre for Cyber Security <howler@cyber.gc.ca>",
|
|
@@ -203,7 +203,7 @@ chardet = "5.2.0"
|
|
|
203
203
|
elasticsearch = "8.19.3"
|
|
204
204
|
flask = "3.1.3"
|
|
205
205
|
gevent = "^25.9.1"
|
|
206
|
-
flask-caching = "2.4.
|
|
206
|
+
flask-caching = "2.4.1"
|
|
207
207
|
packaging = "<25.0"
|
|
208
208
|
passlib = "1.7.4"
|
|
209
209
|
prometheus-client = "0.25.0"
|
|
@@ -256,7 +256,7 @@ types-PyYAML = "6.0.12.20260518"
|
|
|
256
256
|
types-paramiko = "3.5.0.20250801"
|
|
257
257
|
types-pyOpenSSL = "23.3.0.20240106"
|
|
258
258
|
types-six = "1.17.0.20260518"
|
|
259
|
-
types-requests = "<2.33.0.
|
|
259
|
+
types-requests = "<2.33.0.20260713"
|
|
260
260
|
websocket-client = "1.9.0"
|
|
261
261
|
types-pytz = "^2024.1.0.20240417"
|
|
262
262
|
types-mock = "^5.2.0.20250306"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.0.0.dev1258 → howler_api-4.0.0.dev1279}/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
|
{howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/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
|
{howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/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
|
{howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/odm/models/ecs/autonomous_system.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/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
|
{howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/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.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/remote/datatypes/queues/__init__.py
RENAMED
|
File without changes
|
{howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/remote/datatypes/queues/comms.py
RENAMED
|
File without changes
|
{howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/remote/datatypes/queues/multi.py
RENAMED
|
File without changes
|
{howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/remote/datatypes/queues/named.py
RENAMED
|
File without changes
|
{howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/remote/datatypes/queues/priority.py
RENAMED
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/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.0.0.dev1258 → howler_api-4.0.0.dev1279}/howler/services/bundle_compat_service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev1258 → howler_api-4.0.0.dev1279}/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
|