howler-api 4.1.0.dev1625__tar.gz → 4.1.0.dev1631__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.dev1625 → howler_api-4.1.0.dev1631}/PKG-INFO +2 -1
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/cronjobs/retention.py +27 -5
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/random_data.py +1 -1
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/pyproject.toml +1 -1
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/README.md +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/__init__.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/actions/__init__.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/actions/add_label.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/actions/add_to_bundle.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/actions/add_to_case.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/actions/change_field.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/actions/demote.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/actions/example_plugin.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/actions/prioritization.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/actions/promote.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/actions/remove_from_bundle.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/actions/remove_label.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/actions/transition.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/__init__.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/base.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/socket.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/v1/__init__.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/v1/action.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/v1/analytic.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/v1/auth.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/v1/clue.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/v1/configs.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/v1/dossier.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/v1/help.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/v1/hit.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/v1/notebook.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/v1/overview.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/v1/search.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/v1/template.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/v1/tool.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/v1/user.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/v1/utils/__init__.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/v1/utils/etag.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/v1/utils/params.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/v1/utils/permission_helper.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/v1/view.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/v2/__init__.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/v2/case.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/v2/fuzzy.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/v2/ingest.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/v2/search.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/app.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/common/README.md +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/common/__init__.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/common/classification.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/common/classification.yml +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/common/exceptions.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/common/loader.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/common/logging/__init__.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/common/logging/audit.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/common/logging/format.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/common/net.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/common/net_static.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/common/random_user.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/common/swagger.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/config.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/cronjobs/__init__.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/cronjobs/action_queue_worker.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/cronjobs/correlation.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/cronjobs/view_cleanup.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/datastore/README.md +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/datastore/__init__.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/datastore/bulk.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/datastore/collection.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/datastore/constants.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/datastore/exceptions.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/datastore/howler_store.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/datastore/migrations/__init__.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/datastore/migrations/action_owner.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/datastore/migrations/base.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/datastore/migrations/fix_process.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/datastore/migrations/runner.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/datastore/operations.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/datastore/schemas.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/datastore/store.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/datastore/support/__init__.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/datastore/support/build.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/datastore/support/schemas.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/datastore/types.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/datastore/utils.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/error.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/external/README.md +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/external/__init__.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/external/check_duplicates.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/external/generate_mitre.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/external/generate_sigma_rules.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/external/generate_tlds.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/external/reindex_data.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/external/run_migrations.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/external/wipe_databases.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/gunicorn_config.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/healthz.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/helper/__init__.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/helper/azure.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/helper/discover.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/helper/hit.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/helper/oauth.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/helper/search.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/helper/workflow.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/helper/ws.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/README.md +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/__init__.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/base.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/charter.txt +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/constants.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/helper.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/howler_enum.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/mixins.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/__init__.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/action.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/analytic.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/assemblyline.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/aws.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/azure.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/case.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/cbs.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/clue.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/config.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/dossier.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/__init__.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/agent.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/autonomous_system.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/client.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/cloud.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/code_signature.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/container.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/dns.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/egress.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/elf.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/email.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/error.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/event.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/faas.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/file.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/geo.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/group.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/hash.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/host.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/http.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/ingress.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/interface.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/network.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/observer.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/organization.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/os.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/pe.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/process.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/registry.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/related.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/rule.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/server.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/threat.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/tls.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/url.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/user.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/user_agent.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/vulnerability.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/event.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/gcp.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/hit.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/howler_data.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/lead.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/localized_label.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/migration.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/overview.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ownership.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/permission_request.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/pivot.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/record.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/template.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/user.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/view.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/randomizer.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/patched.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/plugins/__init__.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/plugins/config.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/remote/__init__.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/remote/datatypes/README.md +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/remote/datatypes/__init__.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/remote/datatypes/counters.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/remote/datatypes/events.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/remote/datatypes/hash.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/remote/datatypes/lock.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/remote/datatypes/queues/__init__.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/remote/datatypes/queues/comms.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/remote/datatypes/queues/multi.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/remote/datatypes/queues/named.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/remote/datatypes/queues/priority.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/remote/datatypes/set.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/remote/datatypes/user_quota_tracker.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/security/__init__.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/security/login.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/security/socket.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/security/utils.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/services/__init__.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/services/action_service.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/services/analytic_service.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/services/auth_service.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/services/bundle_compat_service.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/services/case_service.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/services/comms_service.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/services/config_service.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/services/correlation_service.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/services/docs_service.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/services/dossier_service.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/services/event_service.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/services/fuzzy_service.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/services/hit_service.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/services/jwt_service.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/services/lucene_service.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/services/notebook_service.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/services/overview_service.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/services/permission_service.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/services/search_service.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/services/template_service.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/services/user_service.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/services/viewer_service.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/telemetry.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/utils/__init__.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/utils/annotations.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/utils/chunk.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/utils/compat.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/utils/constants.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/utils/dict_utils.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/utils/indexes.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/utils/isotime.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/utils/list_utils.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/utils/lucene.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/utils/net_utils.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/utils/path.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/utils/socket_utils.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/utils/str_utils.py +0 -0
- {howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/utils/uid.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: howler-api
|
|
3
|
-
Version: 4.1.0.
|
|
3
|
+
Version: 4.1.0.dev1631
|
|
4
4
|
Summary: Howler - API server
|
|
5
5
|
License: MIT
|
|
6
6
|
Keywords: howler,alerting,gc,canada,cse-cst,cse,cst,cyber,cccs
|
|
@@ -18,6 +18,7 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.12
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.13
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.14
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
21
22
|
Classifier: Topic :: Software Development :: Libraries
|
|
22
23
|
Requires-Dist: apscheduler (==3.11.3)
|
|
23
24
|
Requires-Dist: authlib (>=1.6.0,<2.0.0)
|
|
@@ -9,8 +9,13 @@ from pytz import timezone
|
|
|
9
9
|
from howler.common.logging import get_logger
|
|
10
10
|
from howler.config import DEBUG, config
|
|
11
11
|
from howler.datastore.howler_store import HowlerDatastore
|
|
12
|
+
from howler.datastore.operations import OdmHelper
|
|
13
|
+
from howler.odm.models.case import CaseItemTypes
|
|
14
|
+
from howler.odm.models.hit import Hit
|
|
15
|
+
from howler.services import case_service
|
|
12
16
|
|
|
13
17
|
logger = get_logger(__file__)
|
|
18
|
+
hit_helper = OdmHelper(Hit)
|
|
14
19
|
|
|
15
20
|
|
|
16
21
|
def execute():
|
|
@@ -25,9 +30,7 @@ def execute():
|
|
|
25
30
|
|
|
26
31
|
ds = datastore()
|
|
27
32
|
|
|
28
|
-
ds
|
|
29
|
-
|
|
30
|
-
ds.hit.commit()
|
|
33
|
+
_delete_matching_hits(ds, f"event.created:{{* TO {cutoff}}} OR howler.expiry:{{* TO now}}")
|
|
31
34
|
|
|
32
35
|
logger.debug("Deletion complete")
|
|
33
36
|
|
|
@@ -82,8 +85,7 @@ def _execute_rules(ds: HowlerDatastore) -> None:
|
|
|
82
85
|
|
|
83
86
|
try:
|
|
84
87
|
count = ds.hit.count(combined_query, filters=None).get("count", -1)
|
|
85
|
-
ds
|
|
86
|
-
ds.hit.commit()
|
|
88
|
+
_delete_matching_hits(ds, combined_query)
|
|
87
89
|
logger.debug("Retention rule '%s' complete", rule.name)
|
|
88
90
|
result = {"rule": rule.name, "status": "ok", "deleted": count, "cutoff": cutoff}
|
|
89
91
|
except Exception:
|
|
@@ -98,6 +100,26 @@ def _execute_rules(ds: HowlerDatastore) -> None:
|
|
|
98
100
|
logger.info("Rule result: '%s'", result)
|
|
99
101
|
|
|
100
102
|
|
|
103
|
+
def _delete_matching_hits(ds: HowlerDatastore, query: str) -> None:
|
|
104
|
+
"""Remove matching hits after cleaning their references from cases and hits."""
|
|
105
|
+
hit_ids = {hit.howler.id for hit in ds.hit.stream_search(query)}
|
|
106
|
+
|
|
107
|
+
if hit_ids:
|
|
108
|
+
id_query = " OR ".join(hit_ids)
|
|
109
|
+
for case in ds.case.stream_search(f"items.value:({id_query})"):
|
|
110
|
+
item_ids = [item.id for item in case.items if item.type == CaseItemTypes.HIT and item.value in hit_ids]
|
|
111
|
+
if item_ids:
|
|
112
|
+
case_service.remove_case_items(case, item_ids)
|
|
113
|
+
|
|
114
|
+
ds.hit.update_by_query(
|
|
115
|
+
f"howler.related:({id_query})",
|
|
116
|
+
[hit_helper.list_remove("howler.related", hit_id, silent=True) for hit_id in hit_ids],
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
ds.hit.delete_by_query(query)
|
|
120
|
+
ds.hit.commit()
|
|
121
|
+
|
|
122
|
+
|
|
101
123
|
def _remove_analytics_without_hits(ds: HowlerDatastore):
|
|
102
124
|
matched_analytics = _find_analytics_with_hits(ds)
|
|
103
125
|
|
|
@@ -599,7 +599,7 @@ def create_hits(ds: HowlerDatastore, hit_count: int = 200):
|
|
|
599
599
|
}
|
|
600
600
|
)
|
|
601
601
|
|
|
602
|
-
ds.hit.save(hit.howler.id, hit)
|
|
602
|
+
ds.hit.save(hit.howler.id, hit, refresh="wait_for")
|
|
603
603
|
created_hit_ids.append(hit.howler.id)
|
|
604
604
|
analytic_service.save_from_hits(hit, random.choice(users))
|
|
605
605
|
ds.analytic.commit()
|
|
@@ -244,7 +244,7 @@ suppress-none-returning = true
|
|
|
244
244
|
[tool.poetry]
|
|
245
245
|
package-mode = true
|
|
246
246
|
name = "howler-api"
|
|
247
|
-
version = "4.1.0.
|
|
247
|
+
version = "4.1.0.dev1631"
|
|
248
248
|
description = "Howler - API server"
|
|
249
249
|
authors = [
|
|
250
250
|
"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
|
{howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/api/v1/utils/permission_helper.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-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/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.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/datastore/migrations/__init__.py
RENAMED
|
File without changes
|
{howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/datastore/migrations/action_owner.py
RENAMED
|
File without changes
|
|
File without changes
|
{howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/datastore/migrations/fix_process.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/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
|
|
File without changes
|
{howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/ecs/autonomous_system.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/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.dev1625 → howler_api-4.1.0.dev1631}/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
|
{howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/odm/models/permission_request.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
|
{howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/remote/datatypes/queues/__init__.py
RENAMED
|
File without changes
|
{howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/remote/datatypes/queues/comms.py
RENAMED
|
File without changes
|
{howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/remote/datatypes/queues/multi.py
RENAMED
|
File without changes
|
{howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/remote/datatypes/queues/named.py
RENAMED
|
File without changes
|
{howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/remote/datatypes/queues/priority.py
RENAMED
|
File without changes
|
|
File without changes
|
{howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/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
|
{howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/howler/services/bundle_compat_service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.1.0.dev1625 → howler_api-4.1.0.dev1631}/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
|
|
File without changes
|