howler-api 4.0.0.dev1148__tar.gz → 4.0.0.dev1167__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.dev1148 → howler_api-4.0.0.dev1167}/PKG-INFO +1 -1
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/common/classification.py +17 -9
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/config.py +3 -3
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/base.py +8 -5
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/pyproject.toml +1 -1
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/README.md +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/__init__.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/actions/__init__.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/actions/add_label.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/actions/add_to_bundle.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/actions/change_field.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/actions/demote.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/actions/example_plugin.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/actions/prioritization.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/actions/promote.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/actions/remove_from_bundle.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/actions/remove_label.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/actions/transition.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/api/__init__.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/api/base.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/api/socket.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/api/v1/__init__.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/api/v1/action.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/api/v1/analytic.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/api/v1/auth.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/api/v1/clue.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/api/v1/configs.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/api/v1/dossier.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/api/v1/help.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/api/v1/hit.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/api/v1/notebook.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/api/v1/overview.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/api/v1/search.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/api/v1/template.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/api/v1/tool.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/api/v1/user.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/api/v1/utils/__init__.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/api/v1/utils/etag.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/api/v1/utils/params.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/api/v1/view.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/app.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/common/README.md +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/common/__init__.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/common/classification.yml +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/common/exceptions.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/common/loader.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/common/logging/__init__.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/common/logging/audit.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/common/logging/format.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/common/net.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/common/net_static.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/common/random_user.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/common/swagger.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/cronjobs/__init__.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/cronjobs/action_queue_worker.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/cronjobs/retention.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/cronjobs/rules.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/cronjobs/view_cleanup.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/datastore/README.md +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/datastore/__init__.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/datastore/bulk.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/datastore/collection.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/datastore/constants.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/datastore/exceptions.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/datastore/howler_store.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/datastore/migrations/fix_process.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/datastore/operations.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/datastore/schemas.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/datastore/store.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/datastore/support/__init__.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/datastore/support/build.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/datastore/support/schemas.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/datastore/types.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/error.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/external/README.md +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/external/__init__.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/external/generate_mitre.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/external/generate_sigma_rules.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/external/generate_tlds.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/external/reindex_data.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/external/wipe_databases.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/gunicorn_config.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/healthz.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/helper/__init__.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/helper/azure.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/helper/discover.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/helper/hit.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/helper/oauth.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/helper/search.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/helper/workflow.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/helper/ws.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/README.md +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/__init__.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/charter.txt +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/helper.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/howler_enum.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/__init__.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/action.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/analytic.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/assemblyline.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/aws.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/azure.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/cbs.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/clue.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/config.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/dossier.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/__init__.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/agent.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/autonomous_system.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/client.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/cloud.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/code_signature.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/container.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/dns.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/egress.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/elf.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/email.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/error.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/event.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/faas.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/file.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/geo.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/group.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/hash.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/host.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/http.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/ingress.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/interface.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/network.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/observer.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/organization.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/os.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/pe.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/process.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/registry.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/related.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/rule.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/server.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/threat.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/tls.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/url.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/user.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/user_agent.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/vulnerability.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/gcp.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/hit.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/howler_data.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/lead.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/localized_label.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/overview.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/pivot.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/template.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/user.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/view.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/random_data.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/randomizer.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/patched.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/plugins/__init__.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/plugins/config.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/remote/__init__.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/remote/datatypes/README.md +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/remote/datatypes/__init__.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/remote/datatypes/counters.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/remote/datatypes/events.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/remote/datatypes/hash.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/remote/datatypes/lock.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/remote/datatypes/queues/__init__.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/remote/datatypes/queues/comms.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/remote/datatypes/queues/multi.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/remote/datatypes/queues/named.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/remote/datatypes/queues/priority.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/remote/datatypes/set.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/remote/datatypes/user_quota_tracker.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/security/__init__.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/security/socket.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/security/utils.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/services/__init__.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/services/action_service.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/services/analytic_service.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/services/auth_service.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/services/config_service.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/services/dossier_service.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/services/event_service.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/services/hit_service.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/services/jwt_service.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/services/lucene_service.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/services/notebook_service.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/services/overview_service.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/services/template_service.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/services/user_service.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/telemetry.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/utils/__init__.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/utils/annotations.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/utils/chunk.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/utils/compat.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/utils/constants.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/utils/dict_utils.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/utils/isotime.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/utils/list_utils.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/utils/lucene.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/utils/path.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/utils/socket_utils.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/utils/str_utils.py +0 -0
- {howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/utils/uid.py +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import itertools
|
|
2
2
|
import logging
|
|
3
3
|
from copy import copy
|
|
4
|
-
from typing import Any, Dict, KeysView, List, Optional, Set, Tuple, Union, cast
|
|
4
|
+
from typing import TYPE_CHECKING, Any, Dict, KeysView, List, Optional, Set, Tuple, Union, cast
|
|
5
5
|
|
|
6
6
|
from howler.common.exceptions import (
|
|
7
7
|
HowlerKeyError,
|
|
@@ -10,6 +10,9 @@ from howler.common.exceptions import (
|
|
|
10
10
|
)
|
|
11
11
|
from howler.common.loader import APP_NAME
|
|
12
12
|
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from howler.odm.base import ClassificationObject
|
|
15
|
+
|
|
13
16
|
log = logging.getLogger(f"{APP_NAME}.classification")
|
|
14
17
|
|
|
15
18
|
|
|
@@ -203,15 +206,12 @@ class Classification(object):
|
|
|
203
206
|
if not self.is_valid(classification_definition["restricted"]):
|
|
204
207
|
raise InvalidDefinition("Classification definition's restricted classification is invalid.")
|
|
205
208
|
|
|
206
|
-
self.UNRESTRICTED = classification_definition["unrestricted"]
|
|
207
|
-
self.RESTRICTED = classification_definition["restricted"]
|
|
208
|
-
|
|
209
|
-
self.UNRESTRICTED = self.normalize_classification(classification_definition["unrestricted"])
|
|
210
|
-
self.RESTRICTED = self.normalize_classification(classification_definition["restricted"])
|
|
209
|
+
self.UNRESTRICTED: str = self.normalize_classification(classification_definition["unrestricted"])
|
|
210
|
+
self.RESTRICTED: str = self.normalize_classification(classification_definition["restricted"])
|
|
211
211
|
|
|
212
212
|
except Exception as e:
|
|
213
|
-
self.UNRESTRICTED = self.NULL_CLASSIFICATION
|
|
214
|
-
self.RESTRICTED = self.INVALID_CLASSIFICATION
|
|
213
|
+
self.UNRESTRICTED: str = self.NULL_CLASSIFICATION
|
|
214
|
+
self.RESTRICTED: str = self.INVALID_CLASSIFICATION
|
|
215
215
|
|
|
216
216
|
self.invalid_mode = True
|
|
217
217
|
|
|
@@ -758,7 +758,9 @@ class Classification(object):
|
|
|
758
758
|
skip_auto_select=True,
|
|
759
759
|
)
|
|
760
760
|
|
|
761
|
-
def is_accessible(
|
|
761
|
+
def is_accessible(
|
|
762
|
+
self, user_c12n: "str | ClassificationObject", c12n: "str | ClassificationObject", ignore_invalid: bool = False
|
|
763
|
+
) -> bool:
|
|
762
764
|
"""
|
|
763
765
|
Given a user classification, check if a user is allow to see a certain classification
|
|
764
766
|
|
|
@@ -778,6 +780,12 @@ class Classification(object):
|
|
|
778
780
|
if c12n is None:
|
|
779
781
|
return True
|
|
780
782
|
|
|
783
|
+
if not isinstance(user_c12n, str):
|
|
784
|
+
user_c12n = user_c12n.value
|
|
785
|
+
|
|
786
|
+
if not isinstance(c12n, str):
|
|
787
|
+
c12n = c12n.value
|
|
788
|
+
|
|
781
789
|
try:
|
|
782
790
|
user_lvl, user_req, user_groups, user_subgroups = self._get_classification_parts(user_c12n)
|
|
783
791
|
lvl, req, groups, subgroups = self._get_classification_parts(c12n)
|
|
@@ -14,9 +14,9 @@ CLASSIFICATION = loader.get_classification(os.getenv("HWL_CLASSIFICATION_PATH",
|
|
|
14
14
|
|
|
15
15
|
AUDIT = config.ui.audit
|
|
16
16
|
|
|
17
|
-
SECRET_KEY = config.ui.secret_key
|
|
18
|
-
DEBUG = config.ui.debug
|
|
19
|
-
MAX_CLASSIFICATION = CLASSIFICATION.UNRESTRICTED
|
|
17
|
+
SECRET_KEY: str = config.ui.secret_key
|
|
18
|
+
DEBUG: bool = config.ui.debug
|
|
19
|
+
MAX_CLASSIFICATION: str = CLASSIFICATION.UNRESTRICTED
|
|
20
20
|
|
|
21
21
|
HWL_UNSECURED_UI = os.environ.get("HWL_UNSECURED_UI", "false").lower() == "true"
|
|
22
22
|
HWL_USE_REST_API = os.environ.get("HWL_USE_REST_API", "true").lower() == "true"
|
|
@@ -18,8 +18,8 @@ import typing
|
|
|
18
18
|
from datetime import datetime
|
|
19
19
|
from enum import Enum as PyEnum
|
|
20
20
|
from enum import EnumMeta
|
|
21
|
+
from typing import TYPE_CHECKING, Callable
|
|
21
22
|
from typing import Any as _Any
|
|
22
|
-
from typing import Callable
|
|
23
23
|
from venv import logger
|
|
24
24
|
|
|
25
25
|
import arrow
|
|
@@ -84,6 +84,9 @@ FULL_URI = f"^((?:(?:[A-Za-z]*:)?//)?(?:\\S+(?::\\S*)?@)?({IP_REGEX}|{DOMAIN_REG
|
|
|
84
84
|
PLATFORM_REGEX = r"^(Windows|Linux|MacOS|Android|iOS)$"
|
|
85
85
|
PROCESSOR_REGEX = r"^x(64|86)$"
|
|
86
86
|
|
|
87
|
+
if TYPE_CHECKING:
|
|
88
|
+
from howler.common.classification import Classification as ClassificationEngine
|
|
89
|
+
|
|
87
90
|
|
|
88
91
|
def flat_to_nested(data: dict[str, _Any]) -> dict[str, _Any]:
|
|
89
92
|
sub_data: dict[str, _Any] = {}
|
|
@@ -689,10 +692,10 @@ class Float(_Field):
|
|
|
689
692
|
|
|
690
693
|
|
|
691
694
|
class ClassificationObject(object):
|
|
692
|
-
def __init__(self, engine, value, is_uc=False):
|
|
693
|
-
self.engine = engine
|
|
694
|
-
self.is_uc = is_uc
|
|
695
|
-
self.value = engine.normalize_classification(value, skip_auto_select=is_uc)
|
|
695
|
+
def __init__(self, engine: "ClassificationEngine", value, is_uc=False):
|
|
696
|
+
self.engine: "ClassificationEngine" = engine
|
|
697
|
+
self.is_uc: bool = is_uc
|
|
698
|
+
self.value: str = engine.normalize_classification(value, skip_auto_select=is_uc)
|
|
696
699
|
|
|
697
700
|
def get_access_control_parts(self):
|
|
698
701
|
return self.engine.get_access_control_parts(self.value, user_classification=self.is_uc)
|
|
@@ -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.dev1167"
|
|
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
|
{howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/cronjobs/action_queue_worker.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/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.dev1148 → howler_api-4.0.0.dev1167}/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
|
{howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/odm/models/ecs/autonomous_system.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/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.0.0.dev1148 → howler_api-4.0.0.dev1167}/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
|
{howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/remote/datatypes/queues/__init__.py
RENAMED
|
File without changes
|
{howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/remote/datatypes/queues/comms.py
RENAMED
|
File without changes
|
{howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/remote/datatypes/queues/multi.py
RENAMED
|
File without changes
|
{howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/remote/datatypes/queues/named.py
RENAMED
|
File without changes
|
{howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/howler/remote/datatypes/queues/priority.py
RENAMED
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev1148 → howler_api-4.0.0.dev1167}/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
|
|
File without changes
|