howler-api 3.3.0.dev604__tar.gz → 3.3.0.dev644__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-3.3.0.dev604 → howler_api-3.3.0.dev644}/PKG-INFO +1 -1
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/api/v1/dossier.py +1 -1
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/api/v1/search.py +2 -1
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/services/dossier_service.py +4 -2
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/services/hit_service.py +4 -4
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/services/lucene_service.py +5 -3
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/pyproject.toml +1 -1
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/README.md +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/__init__.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/actions/__init__.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/actions/add_label.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/actions/add_to_bundle.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/actions/change_field.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/actions/demote.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/actions/example_plugin.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/actions/prioritization.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/actions/promote.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/actions/remove_from_bundle.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/actions/remove_label.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/actions/transition.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/api/__init__.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/api/base.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/api/socket.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/api/v1/__init__.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/api/v1/action.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/api/v1/analytic.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/api/v1/auth.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/api/v1/clue.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/api/v1/configs.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/api/v1/help.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/api/v1/hit.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/api/v1/notebook.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/api/v1/overview.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/api/v1/template.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/api/v1/tool.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/api/v1/user.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/api/v1/utils/__init__.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/api/v1/utils/etag.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/api/v1/view.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/app.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/common/README.md +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/common/__init__.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/common/classification.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/common/classification.yml +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/common/exceptions.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/common/loader.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/common/logging/__init__.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/common/logging/audit.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/common/logging/format.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/common/net.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/common/net_static.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/common/random_user.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/common/swagger.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/config.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/cronjobs/__init__.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/cronjobs/retention.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/cronjobs/rules.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/cronjobs/view_cleanup.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/datastore/README.md +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/datastore/__init__.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/datastore/bulk.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/datastore/collection.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/datastore/constants.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/datastore/exceptions.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/datastore/howler_store.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/datastore/migrations/fix_process.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/datastore/operations.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/datastore/schemas.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/datastore/store.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/datastore/support/__init__.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/datastore/support/build.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/datastore/support/schemas.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/datastore/types.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/error.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/external/__init__.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/external/generate_mitre.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/external/generate_sigma_rules.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/external/generate_tlds.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/external/reindex_data.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/external/wipe_databases.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/gunicorn_config.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/healthz.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/helper/__init__.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/helper/azure.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/helper/discover.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/helper/hit.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/helper/oauth.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/helper/search.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/helper/workflow.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/helper/ws.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/README.md +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/__init__.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/base.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/charter.txt +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/helper.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/howler_enum.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/__init__.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/action.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/analytic.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/assemblyline.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/aws.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/azure.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/cbs.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/clue.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/config.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/dossier.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/__init__.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/agent.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/autonomous_system.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/client.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/cloud.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/code_signature.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/container.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/dns.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/egress.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/elf.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/email.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/error.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/event.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/faas.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/file.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/geo.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/group.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/hash.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/host.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/http.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/ingress.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/interface.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/network.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/observer.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/organization.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/os.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/pe.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/process.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/registry.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/related.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/rule.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/server.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/threat.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/tls.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/url.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/user.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/user_agent.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/ecs/vulnerability.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/gcp.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/hit.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/howler_data.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/lead.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/localized_label.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/overview.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/pivot.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/template.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/user.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/models/view.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/random_data.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/odm/randomizer.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/patched.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/plugins/__init__.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/plugins/config.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/remote/__init__.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/remote/datatypes/README.md +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/remote/datatypes/__init__.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/remote/datatypes/counters.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/remote/datatypes/events.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/remote/datatypes/hash.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/remote/datatypes/lock.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/remote/datatypes/queues/__init__.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/remote/datatypes/queues/comms.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/remote/datatypes/queues/multi.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/remote/datatypes/queues/named.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/remote/datatypes/queues/priority.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/remote/datatypes/set.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/remote/datatypes/user_quota_tracker.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/security/__init__.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/security/socket.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/security/utils.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/services/__init__.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/services/action_service.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/services/analytic_service.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/services/auth_service.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/services/config_service.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/services/event_service.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/services/jwt_service.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/services/notebook_service.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/services/overview_service.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/services/template_service.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/services/user_service.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/utils/__init__.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/utils/annotations.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/utils/chunk.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/utils/dict_utils.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/utils/isotime.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/utils/list_utils.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/utils/lucene.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/utils/path.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/utils/socket_utils.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/utils/str_utils.py +0 -0
- {howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/utils/uid.py +0 -0
|
@@ -139,7 +139,7 @@ def get_dossier_for_hit(id: str, user: User, **kwargs):
|
|
|
139
139
|
|
|
140
140
|
hit = response["items"][0]
|
|
141
141
|
|
|
142
|
-
return ok(dossier_service.get_matching_dossiers(hit))
|
|
142
|
+
return ok(dossier_service.get_matching_dossiers(hit, username=user.uname))
|
|
143
143
|
except ValueError as e:
|
|
144
144
|
return bad_request(err=str(e))
|
|
145
145
|
|
|
@@ -16,6 +16,7 @@ from howler.common.logging import get_logger
|
|
|
16
16
|
from howler.common.swagger import generate_swagger_docs
|
|
17
17
|
from howler.datastore.exceptions import SearchException
|
|
18
18
|
from howler.helper.search import get_collection, get_default_sort, has_access_control, list_all_fields
|
|
19
|
+
from howler.odm.models.user import User
|
|
19
20
|
from howler.security import api_login
|
|
20
21
|
from howler.services import hit_service, lucene_service
|
|
21
22
|
|
|
@@ -100,7 +101,7 @@ def search(index, **kwargs):
|
|
|
100
101
|
"next_deep_paging_id": "asX3f...342", # ID to pass back for the next page during deep paging
|
|
101
102
|
"items": []} # List of results
|
|
102
103
|
"""
|
|
103
|
-
user = kwargs["user"]
|
|
104
|
+
user: User = kwargs["user"]
|
|
104
105
|
collection = get_collection(index, user)
|
|
105
106
|
default_sort = get_default_sort(index, user)
|
|
106
107
|
|
|
@@ -235,7 +235,9 @@ def update_dossier(dossier_id: str, dossier_data: dict[str, Any], user: User) ->
|
|
|
235
235
|
raise InvalidDataException("We were unable to update the dossier.", cause=e) from e
|
|
236
236
|
|
|
237
237
|
|
|
238
|
-
def get_matching_dossiers(
|
|
238
|
+
def get_matching_dossiers(
|
|
239
|
+
hit: dict[str, Any], dossiers: list[dict[str, Any]] | None = None, username: str | None = None
|
|
240
|
+
):
|
|
239
241
|
"""Get a list of dossiers that match a specific security alert/hit.
|
|
240
242
|
|
|
241
243
|
This function evaluates each dossier's query against the provided hit data
|
|
@@ -256,7 +258,7 @@ def get_matching_dossiers(hit: dict[str, Any], dossiers: list[dict[str, Any]] |
|
|
|
256
258
|
# Retrieve all dossiers if none provided
|
|
257
259
|
if dossiers is None:
|
|
258
260
|
dossiers = datastore().dossier.search(
|
|
259
|
-
"
|
|
261
|
+
f"type:global OR owner:{username}" if username else "type:global",
|
|
260
262
|
as_obj=False,
|
|
261
263
|
# TODO: Eventually implement caching here
|
|
262
264
|
rows=1000,
|
|
@@ -880,7 +880,7 @@ def __match_metadata(candidates: list[dict[str, Any]], hit: dict[str, Any]) -> O
|
|
|
880
880
|
return sorted(matching_candidates, key=functools.cmp_to_key(__compare_metadata))[0]
|
|
881
881
|
|
|
882
882
|
|
|
883
|
-
def augment_metadata(data: list[dict[str, Any]] | dict[str, Any] | None, metadata: list[str], user:
|
|
883
|
+
def augment_metadata(data: list[dict[str, Any]] | dict[str, Any] | None, metadata: list[str], user: User): # noqa: C901
|
|
884
884
|
"""Augment hit search results with additional metadata.
|
|
885
885
|
|
|
886
886
|
This function enriches hit data by adding related information such as templates,
|
|
@@ -909,7 +909,7 @@ def augment_metadata(data: list[dict[str, Any]] | dict[str, Any] | None, metadat
|
|
|
909
909
|
logger.debug("Augmenting %s hits with %s", len(hits), ",".join(metadata))
|
|
910
910
|
|
|
911
911
|
if "template" in metadata:
|
|
912
|
-
template_candidates = template_service.get_matching_templates(hits, as_odm=False, uname=user
|
|
912
|
+
template_candidates = template_service.get_matching_templates(hits, as_odm=False, uname=user.uname)
|
|
913
913
|
|
|
914
914
|
logger.debug("\tRetrieved %s matching templates", len(template_candidates))
|
|
915
915
|
|
|
@@ -942,11 +942,11 @@ def augment_metadata(data: list[dict[str, Any]] | dict[str, Any] | None, metadat
|
|
|
942
942
|
|
|
943
943
|
if "dossiers" in metadata:
|
|
944
944
|
dossiers: list[dict[str, Any]] = datastore().dossier.search(
|
|
945
|
-
"
|
|
945
|
+
f"type:global OR owner:{user.uname}",
|
|
946
946
|
as_obj=False,
|
|
947
947
|
# TODO: Eventually implement caching here
|
|
948
948
|
rows=1000,
|
|
949
949
|
)["items"]
|
|
950
950
|
|
|
951
951
|
for hit in hits:
|
|
952
|
-
hit["__dossiers"] = dossier_service.get_matching_dossiers(hit, dossiers)
|
|
952
|
+
hit["__dossiers"] = dossier_service.get_matching_dossiers(hit, dossiers, username=user.uname)
|
|
@@ -60,12 +60,14 @@ class LuceneProcessor(TreeVisitor):
|
|
|
60
60
|
for child in node.children:
|
|
61
61
|
child_context = self.child_context(node, child, context)
|
|
62
62
|
for result in self.visit_iter(child, context=child_context):
|
|
63
|
-
# If we run across a MUST or MUST NOT (plus,
|
|
64
|
-
# shortcircuit and return false.
|
|
63
|
+
# If we run across a MUST or MUST NOT (plus, prohibit) object and the value doesn't match, we
|
|
64
|
+
# immediately shortcircuit and return false.
|
|
65
|
+
# NOTE: visit_prohibit already negates the inner result, so a violated MUST NOT arrives here as
|
|
66
|
+
# False (not True). We therefore short-circuit on `not result` rather than `result`.
|
|
65
67
|
if isinstance(child, Plus) and not result:
|
|
66
68
|
yield False
|
|
67
69
|
return
|
|
68
|
-
elif isinstance(child, Prohibit) and result:
|
|
70
|
+
elif isinstance(child, Prohibit) and not result:
|
|
69
71
|
yield False
|
|
70
72
|
return
|
|
71
73
|
|
|
@@ -152,7 +152,7 @@ suppress-none-returning = true
|
|
|
152
152
|
[tool.poetry]
|
|
153
153
|
package-mode = true
|
|
154
154
|
name = "howler-api"
|
|
155
|
-
version = "3.3.0.
|
|
155
|
+
version = "3.3.0.dev644"
|
|
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
|
{howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/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
|
|
File without changes
|
{howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/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
|
|
File without changes
|
|
File without changes
|
{howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/remote/datatypes/queues/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/howler/remote/datatypes/queues/priority.py
RENAMED
|
File without changes
|
|
File without changes
|
{howler_api-3.3.0.dev604 → howler_api-3.3.0.dev644}/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
|