taegis-sdk-python 1.3.1__tar.gz → 1.4.0__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.
- {taegis_sdk_python-1.3.1/taegis_sdk_python.egg-info → taegis_sdk_python-1.4.0}/PKG-INFO +1 -1
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/_consts.py +3 -0
- taegis_sdk_python-1.4.0/taegis_sdk_python/_version.py +1 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/authentication.py +16 -136
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/__init__.py +41 -4
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/vdr/types.py +2 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/utils.py +9 -13
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0/taegis_sdk_python.egg-info}/PKG-INFO +1 -1
- taegis_sdk_python-1.3.1/taegis_sdk_python/_version.py +0 -1
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/LICENSE +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/MANIFEST.in +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/README.md +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/requirements-dev.txt +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/requirements-test.txt +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/requirements.txt +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/setup.cfg +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/setup.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/config.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/errors.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/service_core.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/access_points/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/access_points/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/access_points/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/access_points/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/access_points/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/agent/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/agent/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/agent/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/agent/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/agent/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/alerts/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/alerts/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/alerts/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/alerts/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/alerts/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/alerts_history/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/alerts_history/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/alerts_history/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/alerts_history/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/alerts_history/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/assets/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/assets/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/assets/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/assets/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/assets/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/assets2/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/assets2/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/assets2/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/assets2/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/assets2/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/audits/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/audits/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/audits/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/audits/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/audits/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/authz/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/authz/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/authz/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/authz/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/authz/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/byoti/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/byoti/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/byoti/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/byoti/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/byoti/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/clients/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/clients/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/clients/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/clients/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/clients/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/collector/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/collector/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/collector/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/collector/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/collector/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/comments/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/comments/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/comments/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/comments/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/comments/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/contracted_endpoint/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/contracted_endpoint/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/contracted_endpoint/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/contracted_endpoint/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/contracted_endpoint/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/datasources/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/datasources/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/datasources/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/datasources/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/datasources/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/detector_registry/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/detector_registry/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/detector_registry/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/detector_registry/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/detector_registry/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/endpoint_command_manager/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/endpoint_command_manager/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/endpoint_command_manager/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/endpoint_command_manager/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/endpoint_command_manager/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/endpoint_management_service/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/endpoint_management_service/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/endpoint_management_service/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/endpoint_management_service/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/endpoint_management_service/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/event_search/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/event_search/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/event_search/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/event_search/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/event_search/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/events/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/events/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/events/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/events/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/events/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/exports/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/exports/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/exports/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/exports/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/exports/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/fast_ioc/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/fast_ioc/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/fast_ioc/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/fast_ioc/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/fast_ioc/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/file_info/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/file_info/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/file_info/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/file_info/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/file_info/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/ingest_stats/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/ingest_stats/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/ingest_stats/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/ingest_stats/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/ingest_stats/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/investigations/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/investigations/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/investigations/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/investigations/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/investigations/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/investigations2/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/investigations2/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/investigations2/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/investigations2/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/investigations2/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/isensor/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/isensor/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/isensor/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/isensor/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/isensor/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/mitre_attack_info/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/mitre_attack_info/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/mitre_attack_info/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/mitre_attack_info/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/mitre_attack_info/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/multi_tenant_context/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/multi_tenant_context/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/multi_tenant_context/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/multi_tenant_context/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/multi_tenant_context/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/multi_tenant_ioc/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/multi_tenant_ioc/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/multi_tenant_ioc/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/multi_tenant_ioc/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/multi_tenant_ioc/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/nl_search/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/nl_search/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/nl_search/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/nl_search/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/nl_search/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/notebooks/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/notebooks/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/notebooks/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/notebooks/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/notebooks/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/notifications/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/notifications/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/notifications/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/notifications/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/notifications/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/preferences/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/preferences/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/preferences/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/preferences/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/preferences/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/process_trees/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/process_trees/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/process_trees/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/process_trees/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/process_trees/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/queries/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/queries/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/queries/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/queries/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/queries/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/roadrunner/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/roadrunner/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/roadrunner/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/roadrunner/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/roadrunner/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/rules/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/rules/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/rules/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/rules/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/rules/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/sharelinks/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/sharelinks/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/sharelinks/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/sharelinks/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/sharelinks/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/subjects/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/subjects/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/subjects/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/subjects/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/subjects/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/tenant_profiles/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/tenant_profiles/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/tenant_profiles/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/tenant_profiles/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/tenant_profiles/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/tenants/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/tenants/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/tenants/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/tenants/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/tenants/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/tenants4/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/tenants4/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/tenants4/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/tenants4/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/tenants4/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/threat/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/threat/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/threat/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/threat/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/threat/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/threat_score/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/threat_score/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/threat_score/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/threat_score/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/threat_score/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/trigger_action/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/trigger_action/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/trigger_action/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/trigger_action/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/trigger_action/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/trip/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/trip/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/trip/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/trip/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/trip/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/users/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/users/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/users/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/users/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/users/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/vdr/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/vdr/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/vdr/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/vdr/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/tokens.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/transport/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/transport/aiohttp_websockets.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python.egg-info/SOURCES.txt +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python.egg-info/dependency_links.txt +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python.egg-info/requires.txt +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python.egg-info/top_level.txt +0 -0
|
@@ -27,6 +27,9 @@ TAEGIS_TENANTS_URLS = {
|
|
|
27
27
|
"US3": "https://api-tenants.foxtrot.taegis.secureworks.com",
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
UNIVERSAL_ENVIRONMENT = "universal"
|
|
31
|
+
UNIVERSAL_AUTHENTICATION_URL = "https://api.taegis.secureworks.com"
|
|
32
|
+
|
|
30
33
|
|
|
31
34
|
class TaegisEnum(str, Enum):
|
|
32
35
|
"""Handler for Unknown Enums."""
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "v1.4.0"
|
|
@@ -5,19 +5,16 @@ Authenication implementations for Taegis.
|
|
|
5
5
|
|
|
6
6
|
import logging
|
|
7
7
|
import os
|
|
8
|
-
from getpass import getpass
|
|
9
|
-
from time import time
|
|
10
|
-
from typing import Any, Dict, Tuple, Union, Optional
|
|
11
8
|
import threading
|
|
9
|
+
from time import time
|
|
10
|
+
from typing import Optional, Tuple, Union
|
|
12
11
|
|
|
13
12
|
from oauthlib.oauth2 import BackendApplicationClient
|
|
14
13
|
from requests import HTTPError, post
|
|
15
14
|
from requests_oauthlib import OAuth2Session
|
|
15
|
+
|
|
16
16
|
from taegis_sdk_python.config import get_config, write_to_config
|
|
17
|
-
from taegis_sdk_python.errors import
|
|
18
|
-
InvalidAuthenticationMethod,
|
|
19
|
-
MissingAccessTokenError,
|
|
20
|
-
)
|
|
17
|
+
from taegis_sdk_python.errors import MissingAccessTokenError
|
|
21
18
|
from taegis_sdk_python.tokens import get_token_exp
|
|
22
19
|
|
|
23
20
|
try:
|
|
@@ -30,34 +27,6 @@ logger = logging.getLogger(__name__)
|
|
|
30
27
|
LOCK = threading.RLock()
|
|
31
28
|
|
|
32
29
|
|
|
33
|
-
def check_username(
|
|
34
|
-
request_url: str, username: str
|
|
35
|
-
) -> Dict[str, Any]: # pragma: no cover
|
|
36
|
-
"""Check if the user needs to login via password or sso.
|
|
37
|
-
|
|
38
|
-
Parameters
|
|
39
|
-
----------
|
|
40
|
-
request_url : str
|
|
41
|
-
Taegis Environment URL
|
|
42
|
-
username : str
|
|
43
|
-
Username
|
|
44
|
-
|
|
45
|
-
Returns
|
|
46
|
-
-------
|
|
47
|
-
Dict[str, Any]
|
|
48
|
-
JSON response from username check
|
|
49
|
-
"""
|
|
50
|
-
logger.debug("Checking login type for username...")
|
|
51
|
-
userlogin_endpoint = "/auth/userLogin"
|
|
52
|
-
|
|
53
|
-
response = post(
|
|
54
|
-
f"{request_url}{userlogin_endpoint}", json={"username": username}, timeout=300
|
|
55
|
-
)
|
|
56
|
-
logger.debug(response)
|
|
57
|
-
|
|
58
|
-
return response.json()
|
|
59
|
-
|
|
60
|
-
|
|
61
30
|
def get_oauth_from_env(environment: str) -> Tuple[Optional[str], Optional[str]]:
|
|
62
31
|
"""
|
|
63
32
|
Retrieve CLIENT_ID and CLIENT_SECRET credentials from environment.
|
|
@@ -116,28 +85,10 @@ def get_token(environment: str, request_url: str) -> str: # pragma: no cover
|
|
|
116
85
|
request_url, client_id, client_secret
|
|
117
86
|
)
|
|
118
87
|
else:
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
if (
|
|
124
|
-
response.get("login_type") == "username-password"
|
|
125
|
-
and external_provider != "COGNITO"
|
|
126
|
-
):
|
|
127
|
-
access_token = get_token_by_password_grant(
|
|
128
|
-
request_url, username
|
|
129
|
-
)
|
|
130
|
-
elif (
|
|
131
|
-
response.get("login_type") == "sso"
|
|
132
|
-
or external_provider == "COGNITO"
|
|
133
|
-
):
|
|
134
|
-
access_token = get_token_by_device_code_authorization(
|
|
135
|
-
request_url, external_provider
|
|
136
|
-
)
|
|
137
|
-
else:
|
|
138
|
-
raise InvalidAuthenticationMethod(
|
|
139
|
-
message="No known authentication method for user"
|
|
140
|
-
)
|
|
88
|
+
access_token = get_token_by_device_code_authorization(request_url)
|
|
89
|
+
|
|
90
|
+
if not access_token:
|
|
91
|
+
raise MissingAccessTokenError(message="Access token ")
|
|
141
92
|
|
|
142
93
|
write_to_config(environment, "access_token", access_token)
|
|
143
94
|
|
|
@@ -148,11 +99,14 @@ def get_cached_token(env: str) -> Union[str, None]: # pragma: no cover
|
|
|
148
99
|
"""Get cached token from config file."""
|
|
149
100
|
config = get_config()
|
|
150
101
|
|
|
102
|
+
logger.debug(f"Checking for cached token in config for {env}...")
|
|
151
103
|
# check for token and expiry in config
|
|
152
104
|
token = str(config.get(env, "access_token", fallback=""))
|
|
153
105
|
if token and get_token_exp(token) >= int(time()) + 15:
|
|
106
|
+
logger.debug(f"Token found in config and not expired for {env}...")
|
|
154
107
|
return token
|
|
155
108
|
|
|
109
|
+
logger.debug(f"Token not found in config or expired for {env}...")
|
|
156
110
|
return None
|
|
157
111
|
|
|
158
112
|
|
|
@@ -198,82 +152,8 @@ def get_token_by_oauth(
|
|
|
198
152
|
return access_token
|
|
199
153
|
|
|
200
154
|
|
|
201
|
-
def get_token_by_password_grant(
|
|
202
|
-
request_url: str,
|
|
203
|
-
username: str,
|
|
204
|
-
password: Optional[str] = None,
|
|
205
|
-
) -> str: # pragma: no cover
|
|
206
|
-
"""Get an access token by username/password with mfa.
|
|
207
|
-
|
|
208
|
-
Parameters
|
|
209
|
-
----------
|
|
210
|
-
request_url : str
|
|
211
|
-
Endpoint URL for Taegis environment
|
|
212
|
-
username : str
|
|
213
|
-
User to authenticate
|
|
214
|
-
|
|
215
|
-
Returns
|
|
216
|
-
-------
|
|
217
|
-
str
|
|
218
|
-
Access token
|
|
219
|
-
|
|
220
|
-
Raises
|
|
221
|
-
------
|
|
222
|
-
requests.HTTPError
|
|
223
|
-
Any issue with retrieving token via HTTP
|
|
224
|
-
"""
|
|
225
|
-
auth_uri = "/universal-auth/token"
|
|
226
|
-
|
|
227
|
-
if not password:
|
|
228
|
-
password = getpass("Password: ")
|
|
229
|
-
|
|
230
|
-
response = post(
|
|
231
|
-
f"{request_url}{auth_uri}",
|
|
232
|
-
json={"username": username, "password": password, "grant_type": "password"},
|
|
233
|
-
timeout=300,
|
|
234
|
-
)
|
|
235
|
-
|
|
236
|
-
if access_token := response.json().get("access_token"):
|
|
237
|
-
return access_token
|
|
238
|
-
|
|
239
|
-
try:
|
|
240
|
-
mfa_token = response.json().get("mfa_token")
|
|
241
|
-
except JSONDecodeError as exc:
|
|
242
|
-
raise HTTPError(response.text, response=response) from exc
|
|
243
|
-
|
|
244
|
-
if not mfa_token:
|
|
245
|
-
raise HTTPError(response.text, response=response)
|
|
246
|
-
|
|
247
|
-
mfa_input = input("MFA Token: ")
|
|
248
|
-
|
|
249
|
-
response = post(
|
|
250
|
-
f"{request_url}{auth_uri}",
|
|
251
|
-
json={
|
|
252
|
-
"mfa_token": mfa_token,
|
|
253
|
-
"otp": mfa_input,
|
|
254
|
-
"grant_type": "http://ctpx.secureworks.com/grant-type/mfa-otp",
|
|
255
|
-
},
|
|
256
|
-
timeout=300,
|
|
257
|
-
)
|
|
258
|
-
response.raise_for_status()
|
|
259
|
-
try:
|
|
260
|
-
access_token = response.json().get("access_token")
|
|
261
|
-
except JSONDecodeError as exc:
|
|
262
|
-
raise HTTPError(response.text, response=response) from exc
|
|
263
|
-
|
|
264
|
-
if not access_token:
|
|
265
|
-
raise MissingAccessTokenError(
|
|
266
|
-
message="Access token not found",
|
|
267
|
-
comments=["Check credentials and MFA input."],
|
|
268
|
-
nested_exception=HTTPError(response.text, response=response),
|
|
269
|
-
)
|
|
270
|
-
|
|
271
|
-
return access_token
|
|
272
|
-
|
|
273
|
-
|
|
274
155
|
def get_token_by_device_code_authorization(
|
|
275
156
|
request_url: str,
|
|
276
|
-
external_provider: str,
|
|
277
157
|
) -> Union[str, None]: # pragma: no cover
|
|
278
158
|
"""Get a user token via Device Code authorization.
|
|
279
159
|
|
|
@@ -291,14 +171,14 @@ def get_token_by_device_code_authorization(
|
|
|
291
171
|
init_endpoint = "/universal-auth/device/code/auth"
|
|
292
172
|
token_endpoint = "/universal-auth/device/code/token"
|
|
293
173
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
response = post(f"{request_url}{init_endpoint}", timeout=300)
|
|
174
|
+
init_url = f"{request_url}{init_endpoint}"
|
|
175
|
+
logger.debug(f"Init URL: {init_url}")
|
|
176
|
+
response = post(init_url, timeout=300)
|
|
177
|
+
logger.debug(f"Response: {response.text}")
|
|
299
178
|
|
|
300
179
|
try:
|
|
301
180
|
device_code_flow = response.json()
|
|
181
|
+
|
|
302
182
|
except JSONDecodeError as exc:
|
|
303
183
|
raise HTTPError(response.text, response=response) from exc
|
|
304
184
|
|
|
@@ -11,7 +11,11 @@ import aiohttp
|
|
|
11
11
|
from aiohttp.client_reqrep import Fingerprint
|
|
12
12
|
from aiohttp.typedefs import LooseHeaders
|
|
13
13
|
|
|
14
|
-
from taegis_sdk_python._consts import
|
|
14
|
+
from taegis_sdk_python._consts import (
|
|
15
|
+
TAEGIS_ENVIRONMENT_URLS,
|
|
16
|
+
UNIVERSAL_AUTHENTICATION_URL,
|
|
17
|
+
UNIVERSAL_ENVIRONMENT,
|
|
18
|
+
)
|
|
15
19
|
from taegis_sdk_python._version import __version__
|
|
16
20
|
from taegis_sdk_python.authentication import get_token
|
|
17
21
|
from taegis_sdk_python.config import write_to_config
|
|
@@ -93,6 +97,7 @@ class GraphQLService:
|
|
|
93
97
|
ssl: Optional[Union[SSLContext, Literal[False], Fingerprint]] = None,
|
|
94
98
|
execute_timeout: Optional[Union[int, float]] = 300,
|
|
95
99
|
max_message_size: int = 0,
|
|
100
|
+
use_universal_authentication: bool = False,
|
|
96
101
|
): # pylint: disable=too-many-statements
|
|
97
102
|
"""
|
|
98
103
|
GraphQLService
|
|
@@ -137,6 +142,7 @@ class GraphQLService:
|
|
|
137
142
|
"""
|
|
138
143
|
self._environments = environments or TAEGIS_ENVIRONMENT_URLS
|
|
139
144
|
self._environment = environment or list(self._environments)[0]
|
|
145
|
+
self._use_universal_authentication = use_universal_authentication
|
|
140
146
|
|
|
141
147
|
if self._environment not in self._environments:
|
|
142
148
|
raise ValueError(f"environment must be in {self._environments.keys()}")
|
|
@@ -253,11 +259,42 @@ class GraphQLService:
|
|
|
253
259
|
"""Taegis Environment."""
|
|
254
260
|
return self._context_manager.get("environment", self._environment)
|
|
255
261
|
|
|
262
|
+
@property
|
|
263
|
+
def authentication_environment(self):
|
|
264
|
+
"""Taegis Authentication Environment."""
|
|
265
|
+
return self._context_manager.get(
|
|
266
|
+
"authentication_environment",
|
|
267
|
+
(
|
|
268
|
+
UNIVERSAL_ENVIRONMENT
|
|
269
|
+
if self.use_universal_authentication
|
|
270
|
+
else self.environment
|
|
271
|
+
),
|
|
272
|
+
)
|
|
273
|
+
|
|
256
274
|
@property
|
|
257
275
|
def url(self):
|
|
258
276
|
"""Taegis Environment URL."""
|
|
259
277
|
return self._context_manager.get("url")
|
|
260
278
|
|
|
279
|
+
@property
|
|
280
|
+
def authentication_url(self):
|
|
281
|
+
"""Taegis Authentication URL."""
|
|
282
|
+
return self._context_manager.get(
|
|
283
|
+
"authentication_url",
|
|
284
|
+
(
|
|
285
|
+
UNIVERSAL_AUTHENTICATION_URL
|
|
286
|
+
if self.use_universal_authentication
|
|
287
|
+
else self._environments[self.environment]
|
|
288
|
+
),
|
|
289
|
+
)
|
|
290
|
+
|
|
291
|
+
@property
|
|
292
|
+
def use_universal_authentication(self):
|
|
293
|
+
"""Use Universal Authentication."""
|
|
294
|
+
return self._context_manager.get(
|
|
295
|
+
"use_universal_authentication", self._use_universal_authentication
|
|
296
|
+
)
|
|
297
|
+
|
|
261
298
|
@property
|
|
262
299
|
def gateway(self):
|
|
263
300
|
"""Taegis GraphQL Gateway."""
|
|
@@ -276,14 +313,14 @@ class GraphQLService:
|
|
|
276
313
|
)
|
|
277
314
|
if not access_token:
|
|
278
315
|
access_token = get_token(
|
|
279
|
-
environment=self.
|
|
280
|
-
request_url=self.
|
|
316
|
+
environment=self.authentication_environment,
|
|
317
|
+
request_url=self.authentication_url,
|
|
281
318
|
)
|
|
282
319
|
return access_token
|
|
283
320
|
|
|
284
321
|
def clear_access_token(self):
|
|
285
322
|
"""Clear the current access token."""
|
|
286
|
-
write_to_config(self.
|
|
323
|
+
write_to_config(self.authentication_environment, "access_token", "")
|
|
287
324
|
|
|
288
325
|
@property
|
|
289
326
|
def output(self):
|
|
@@ -64,6 +64,7 @@ class VdrCounterThreatUnit(str, Enum):
|
|
|
64
64
|
ISENSOR_RULES_TARGET = "ISENSOR_RULES_TARGET"
|
|
65
65
|
ADVISORIES_MENTIONS = "ADVISORIES_MENTIONS"
|
|
66
66
|
IDENTIFIED_MALWARE_THREAT_ACTORS = "IDENTIFIED_MALWARE_THREAT_ACTORS"
|
|
67
|
+
THREAT_ANALYSIS_MENTIONS = "THREAT_ANALYSIS_MENTIONS"
|
|
67
68
|
|
|
68
69
|
|
|
69
70
|
class VdrExploitability(str, Enum):
|
|
@@ -73,6 +74,7 @@ class VdrExploitability(str, Enum):
|
|
|
73
74
|
DOS_EXPLOIT_EXIST = "DOS_EXPLOIT_EXIST"
|
|
74
75
|
REMOTE_EXPLOIT_EXIST = "REMOTE_EXPLOIT_EXIST"
|
|
75
76
|
WEB_EXPLOIT_EXIST = "WEB_EXPLOIT_EXIST"
|
|
77
|
+
TRUSTED_EXPLOIT_EXIST = "TRUSTED_EXPLOIT_EXIST"
|
|
76
78
|
|
|
77
79
|
|
|
78
80
|
class VdrAttackClass(str, Enum):
|
|
@@ -51,8 +51,7 @@ def unwrap(t: Field) -> Any:
|
|
|
51
51
|
#
|
|
52
52
|
# Neither of these need to be included to
|
|
53
53
|
# generate GraphQL strings sent to the server
|
|
54
|
-
args = [arg for arg in get_args(
|
|
55
|
-
t) if arg != type(None) and arg != TaegisEnum]
|
|
54
|
+
args = [arg for arg in get_args(t) if arg != type(None) and arg != TaegisEnum]
|
|
56
55
|
|
|
57
56
|
# Unwrap List[type]
|
|
58
57
|
if hasattr(t, "_name") and t._name == "List": # pylint: disable=protected-access
|
|
@@ -88,8 +87,7 @@ def build_output_dataclass(cls: Any) -> Any:
|
|
|
88
87
|
output_fields = []
|
|
89
88
|
for field in dc_fields(cls):
|
|
90
89
|
log.debug(f"{field=}")
|
|
91
|
-
letter_case = field.metadata.get(
|
|
92
|
-
"dataclasses_json", {}).get("letter_case")
|
|
90
|
+
letter_case = field.metadata.get("dataclasses_json", {}).get("letter_case")
|
|
93
91
|
if letter_case:
|
|
94
92
|
field_name = letter_case(...)
|
|
95
93
|
else:
|
|
@@ -146,8 +144,7 @@ def build_output_string(cls) -> str:
|
|
|
146
144
|
if item == type(None):
|
|
147
145
|
continue
|
|
148
146
|
output_string = build_output_string(item)
|
|
149
|
-
output_fields.append(
|
|
150
|
-
f"... on {item.__name__} {{ {output_string} }}")
|
|
147
|
+
output_fields.append(f"... on {item.__name__} {{ {output_string} }}")
|
|
151
148
|
|
|
152
149
|
elif isinstance(cls, (list, tuple)):
|
|
153
150
|
if len(cls) == 1:
|
|
@@ -160,8 +157,7 @@ def build_output_string(cls) -> str:
|
|
|
160
157
|
if item == type(None):
|
|
161
158
|
continue
|
|
162
159
|
output_string = build_output_string(item)
|
|
163
|
-
output_fields.append(
|
|
164
|
-
f"... on {item.__name__} {{ {output_string} }}")
|
|
160
|
+
output_fields.append(f"... on {item.__name__} {{ {output_string} }}")
|
|
165
161
|
output_fields.append("}")
|
|
166
162
|
log.debug("Generating output string. Done...")
|
|
167
163
|
|
|
@@ -235,8 +231,7 @@ def build_output_string_from_introspection(field: Any) -> str:
|
|
|
235
231
|
fields.append(name)
|
|
236
232
|
scalar = graphql_unwrap_field(gql_type)
|
|
237
233
|
if is_object_type(scalar):
|
|
238
|
-
fields.append(
|
|
239
|
-
f"{{ {build_output_string_from_introspection(scalar)} }}")
|
|
234
|
+
fields.append(f"{{ {build_output_string_from_introspection(scalar)} }}")
|
|
240
235
|
return " ".join(fields)
|
|
241
236
|
|
|
242
237
|
|
|
@@ -275,8 +270,7 @@ def prepare_input(value: Any) -> Any:
|
|
|
275
270
|
"""
|
|
276
271
|
if is_dataclass(value):
|
|
277
272
|
for field in dc_fields(value):
|
|
278
|
-
letter_case = field.metadata.get(
|
|
279
|
-
"dataclasses_json", {}).get("letter_case")
|
|
273
|
+
letter_case = field.metadata.get("dataclasses_json", {}).get("letter_case")
|
|
280
274
|
if letter_case:
|
|
281
275
|
field_name = letter_case(...)
|
|
282
276
|
else:
|
|
@@ -348,7 +342,9 @@ def prepare_variables(
|
|
|
348
342
|
return {key: value for key, value in variables.items() if value is not None}
|
|
349
343
|
|
|
350
344
|
|
|
351
|
-
def parse_union_result(
|
|
345
|
+
def parse_union_result(
|
|
346
|
+
union, result: Union[List[Dict[str, Any]], Dict[str, Any]]
|
|
347
|
+
) -> Any:
|
|
352
348
|
"""
|
|
353
349
|
Coerse result into a type from union.
|
|
354
350
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "v1.3.1"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/agent/__init__.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/agent/mutations.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/agent/queries.py
RENAMED
|
File without changes
|
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/agent/types.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/alerts/__init__.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/alerts/mutations.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/alerts/queries.py
RENAMED
|
File without changes
|
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/alerts/types.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/assets/__init__.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/assets/mutations.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/assets/queries.py
RENAMED
|
File without changes
|
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/assets/types.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/assets2/__init__.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/assets2/mutations.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/assets2/queries.py
RENAMED
|
File without changes
|
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/assets2/types.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/audits/__init__.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/audits/mutations.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/audits/queries.py
RENAMED
|
File without changes
|
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/audits/types.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/authz/__init__.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/authz/mutations.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/authz/queries.py
RENAMED
|
File without changes
|
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/authz/types.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/byoti/__init__.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/byoti/mutations.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/byoti/queries.py
RENAMED
|
File without changes
|
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/byoti/types.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/clients/__init__.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/clients/mutations.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/clients/queries.py
RENAMED
|
File without changes
|
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/clients/types.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/collector/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/collector/queries.py
RENAMED
|
File without changes
|
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/collector/types.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/comments/__init__.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/comments/mutations.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/comments/queries.py
RENAMED
|
File without changes
|
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/comments/types.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
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.0}/taegis_sdk_python/services/datasources/types.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|