howler-api 4.0.0.dev978__tar.gz → 4.0.0.dev982__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.dev978 → howler_api-4.0.0.dev982}/PKG-INFO +1 -1
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/actions/demote.py +2 -1
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/actions/promote.py +6 -1
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/helper/hit.py +10 -1
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/helper.py +1 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/howler_data.py +6 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/random_data.py +1 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/services/hit_service.py +1 -1
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/pyproject.toml +1 -1
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/README.md +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/__init__.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/actions/__init__.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/actions/add_label.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/actions/add_to_bundle.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/actions/change_field.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/actions/example_plugin.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/actions/prioritization.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/actions/remove_from_bundle.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/actions/remove_label.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/actions/transition.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/api/__init__.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/api/base.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/api/socket.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/api/v1/__init__.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/api/v1/action.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/api/v1/analytic.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/api/v1/auth.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/api/v1/clue.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/api/v1/configs.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/api/v1/dossier.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/api/v1/help.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/api/v1/hit.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/api/v1/notebook.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/api/v1/overview.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/api/v1/search.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/api/v1/template.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/api/v1/tool.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/api/v1/user.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/api/v1/utils/__init__.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/api/v1/utils/etag.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/api/v1/view.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/app.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/common/README.md +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/common/__init__.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/common/classification.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/common/classification.yml +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/common/exceptions.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/common/loader.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/common/logging/__init__.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/common/logging/audit.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/common/logging/format.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/common/net.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/common/net_static.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/common/random_user.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/common/swagger.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/config.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/cronjobs/__init__.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/cronjobs/action_queue_worker.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/cronjobs/retention.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/cronjobs/rules.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/cronjobs/view_cleanup.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/datastore/README.md +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/datastore/__init__.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/datastore/bulk.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/datastore/collection.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/datastore/constants.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/datastore/exceptions.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/datastore/howler_store.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/datastore/migrations/fix_process.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/datastore/operations.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/datastore/schemas.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/datastore/store.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/datastore/support/__init__.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/datastore/support/build.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/datastore/support/schemas.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/datastore/types.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/error.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/external/README.md +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/external/__init__.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/external/generate_mitre.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/external/generate_sigma_rules.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/external/generate_tlds.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/external/reindex_data.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/external/wipe_databases.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/gunicorn_config.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/healthz.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/helper/__init__.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/helper/azure.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/helper/discover.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/helper/oauth.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/helper/search.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/helper/workflow.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/helper/ws.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/README.md +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/__init__.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/base.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/charter.txt +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/howler_enum.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/__init__.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/action.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/analytic.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/assemblyline.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/aws.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/azure.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/cbs.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/clue.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/config.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/dossier.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/__init__.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/agent.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/autonomous_system.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/client.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/cloud.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/code_signature.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/container.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/dns.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/egress.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/elf.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/email.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/error.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/event.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/faas.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/file.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/geo.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/group.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/hash.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/host.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/http.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/ingress.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/interface.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/network.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/observer.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/organization.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/os.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/pe.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/process.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/registry.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/related.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/rule.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/server.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/threat.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/tls.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/url.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/user.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/user_agent.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/vulnerability.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/gcp.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/hit.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/lead.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/localized_label.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/overview.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/pivot.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/template.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/user.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/view.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/randomizer.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/patched.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/plugins/__init__.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/plugins/config.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/remote/__init__.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/remote/datatypes/README.md +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/remote/datatypes/__init__.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/remote/datatypes/counters.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/remote/datatypes/events.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/remote/datatypes/hash.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/remote/datatypes/lock.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/remote/datatypes/queues/__init__.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/remote/datatypes/queues/comms.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/remote/datatypes/queues/multi.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/remote/datatypes/queues/named.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/remote/datatypes/queues/priority.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/remote/datatypes/set.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/remote/datatypes/user_quota_tracker.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/security/__init__.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/security/socket.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/security/utils.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/services/__init__.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/services/action_service.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/services/analytic_service.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/services/auth_service.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/services/config_service.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/services/dossier_service.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/services/event_service.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/services/jwt_service.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/services/lucene_service.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/services/notebook_service.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/services/overview_service.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/services/template_service.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/services/user_service.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/telemetry.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/utils/__init__.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/utils/annotations.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/utils/chunk.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/utils/compat.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/utils/constants.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/utils/dict_utils.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/utils/isotime.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/utils/list_utils.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/utils/lucene.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/utils/path.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/utils/socket_utils.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/utils/str_utils.py +0 -0
- {howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/utils/uid.py +0 -0
|
@@ -76,6 +76,7 @@ def execute(
|
|
|
76
76
|
*hit_helper.demote_hit(escalation=escalation),
|
|
77
77
|
odm_helper.update("howler.assessment", None),
|
|
78
78
|
odm_helper.update("howler.rationale", None),
|
|
79
|
+
odm_helper.update("howler.assignment", None),
|
|
79
80
|
],
|
|
80
81
|
)
|
|
81
82
|
else:
|
|
@@ -93,7 +94,7 @@ def execute(
|
|
|
93
94
|
ds.hit.update_by_query(
|
|
94
95
|
query,
|
|
95
96
|
[
|
|
96
|
-
*hit_helper.assess_hit(assessment, rationale),
|
|
97
|
+
*hit_helper.assess_hit(assessment, rationale, user=(user if user else "automation")),
|
|
97
98
|
odm_helper.update(
|
|
98
99
|
"howler.assignment",
|
|
99
100
|
user.get("uname", "automation") if user else "automation",
|
|
@@ -10,6 +10,7 @@ from howler.odm.models.howler_data import (
|
|
|
10
10
|
AssessmentEscalationMap,
|
|
11
11
|
Escalation,
|
|
12
12
|
)
|
|
13
|
+
from howler.odm.models.user import User
|
|
13
14
|
from howler.utils.str_utils import sanitize_lucene_query
|
|
14
15
|
|
|
15
16
|
OPERATION_ID = "promote"
|
|
@@ -26,6 +27,7 @@ def execute(
|
|
|
26
27
|
escalation: Escalation = Escalation.ALERT,
|
|
27
28
|
assessment: Optional[str] = None,
|
|
28
29
|
rationale: Optional[str] = None,
|
|
30
|
+
user: Optional[User] = None,
|
|
29
31
|
**kwargs,
|
|
30
32
|
):
|
|
31
33
|
"""Promote a hit.
|
|
@@ -73,6 +75,7 @@ def execute(
|
|
|
73
75
|
*hit_helper.promote_hit(escalation=escalation),
|
|
74
76
|
odm_helper.update("howler.assessment", None),
|
|
75
77
|
odm_helper.update("howler.rationale", None),
|
|
78
|
+
odm_helper.update("howler.assignment", None),
|
|
76
79
|
],
|
|
77
80
|
)
|
|
78
81
|
else:
|
|
@@ -87,7 +90,9 @@ def execute(
|
|
|
87
90
|
)
|
|
88
91
|
return report
|
|
89
92
|
|
|
90
|
-
ds.hit.update_by_query(
|
|
93
|
+
ds.hit.update_by_query(
|
|
94
|
+
query, hit_helper.assess_hit(assessment, rationale, user=(user if user else "automation"))
|
|
95
|
+
)
|
|
91
96
|
|
|
92
97
|
report.append(
|
|
93
98
|
{
|
|
@@ -24,13 +24,16 @@ def assess_hit(
|
|
|
24
24
|
assessment: Optional[str] = None,
|
|
25
25
|
rationale: Optional[str] = None,
|
|
26
26
|
hit: Optional[Union[dict[str, Any], Hit]] = None,
|
|
27
|
+
*,
|
|
28
|
+
user: User | str,
|
|
27
29
|
**kwargs,
|
|
28
30
|
) -> list[OdmUpdateOperation]:
|
|
29
31
|
"""Update the assessment and esclation of a hit
|
|
30
32
|
|
|
31
33
|
Args:
|
|
34
|
+
user (User | str): The user making the assessment
|
|
32
35
|
assessment (Optional[str], optional): The assessment to set the hit to. Defaults to None.
|
|
33
|
-
hit (Optional[dict[str, Any]], optional): The hit to update. Defaults to None.
|
|
36
|
+
hit (Optional[Union[dict[str, Any], Hit]], optional): The hit to update. Defaults to None.
|
|
34
37
|
|
|
35
38
|
Raises:
|
|
36
39
|
InvalidDataException: An invalid assessment was provided
|
|
@@ -63,10 +66,16 @@ def assess_hit(
|
|
|
63
66
|
escalation,
|
|
64
67
|
)
|
|
65
68
|
|
|
69
|
+
if assessment is None:
|
|
70
|
+
assessor_id = None
|
|
71
|
+
else:
|
|
72
|
+
assessor_id = user.get("uname", user.get("username", None)) if isinstance(user, User) else user
|
|
73
|
+
|
|
66
74
|
return [
|
|
67
75
|
odm_helper.update("howler.assessment", assessment),
|
|
68
76
|
odm_helper.update("howler.escalation", escalation),
|
|
69
77
|
odm_helper.update("howler.rationale", rationale, silent=True),
|
|
78
|
+
odm_helper.update("howler.assessor", assessor_id, silent=True),
|
|
70
79
|
]
|
|
71
80
|
|
|
72
81
|
|
|
@@ -168,6 +168,7 @@ def generate_useful_hit(lookups: dict[str, dict[str, Any]], users: list[str], pr
|
|
|
168
168
|
hit.howler.status = "open"
|
|
169
169
|
hit.howler.assignment = "unassigned"
|
|
170
170
|
hit.howler.escalation = choice([Escalation.HIT, Escalation.ALERT])
|
|
171
|
+
hit.howler.assessor = None
|
|
171
172
|
|
|
172
173
|
if randint(1, 10) > 9:
|
|
173
174
|
hit.howler.expiry = datetime.now() + timedelta(days=randint(1, 60))
|
|
@@ -210,6 +210,12 @@ class HowlerData(odm.Model):
|
|
|
210
210
|
description="Unique identifier of the assigned user.",
|
|
211
211
|
default=DEFAULT_ASSIGNMENT,
|
|
212
212
|
)
|
|
213
|
+
assessor: Optional[str] = odm.Optional(
|
|
214
|
+
odm.Keyword(
|
|
215
|
+
description="The most recent person to assess a hit",
|
|
216
|
+
default=None,
|
|
217
|
+
)
|
|
218
|
+
)
|
|
213
219
|
bundles: list[str] = odm.List(
|
|
214
220
|
odm.Keyword(
|
|
215
221
|
description="A list of bundle IDs this hit is a part of. Corresponds to the howler.id of the bundle."
|
|
@@ -111,7 +111,7 @@ def get_hit_workflow() -> Workflow:
|
|
|
111
111
|
"source": [HitStatus.OPEN, HitStatus.IN_PROGRESS],
|
|
112
112
|
"transition": HitStatusTransition.ASSESS,
|
|
113
113
|
"dest": HitStatus.RESOLVED,
|
|
114
|
-
"actions": [assess_hit
|
|
114
|
+
"actions": [assess_hit],
|
|
115
115
|
}
|
|
116
116
|
),
|
|
117
117
|
Transition(
|
|
@@ -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.dev982"
|
|
156
156
|
description = "Howler - API server"
|
|
157
157
|
authors = [
|
|
158
158
|
"Canadian Centre for Cyber Security <howler@cyber.gc.ca>",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/datastore/migrations/fix_process.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/odm/models/ecs/autonomous_system.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/remote/datatypes/queues/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/remote/datatypes/queues/priority.py
RENAMED
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev978 → howler_api-4.0.0.dev982}/howler/remote/datatypes/user_quota_tracker.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|