taegis-sdk-python 1.3.1__tar.gz → 1.4.1__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.1}/PKG-INFO +1 -1
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/_consts.py +3 -0
- taegis_sdk_python-1.4.1/taegis_sdk_python/_version.py +1 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/authentication.py +22 -108
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/__init__.py +41 -4
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/vdr/types.py +2 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/utils.py +9 -13
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1/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.1}/LICENSE +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/MANIFEST.in +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/README.md +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/requirements-dev.txt +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/requirements-test.txt +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/requirements.txt +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/setup.cfg +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/setup.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/config.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/errors.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/service_core.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/access_points/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/access_points/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/access_points/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/access_points/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/access_points/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/agent/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/agent/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/agent/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/agent/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/agent/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/alerts/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/alerts/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/alerts/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/alerts/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/alerts/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/alerts_history/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/alerts_history/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/alerts_history/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/alerts_history/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/alerts_history/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/assets/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/assets/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/assets/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/assets/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/assets/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/assets2/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/assets2/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/assets2/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/assets2/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/assets2/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/audits/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/audits/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/audits/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/audits/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/audits/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/authz/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/authz/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/authz/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/authz/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/authz/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/byoti/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/byoti/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/byoti/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/byoti/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/byoti/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/clients/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/clients/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/clients/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/clients/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/clients/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/collector/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/collector/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/collector/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/collector/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/collector/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/comments/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/comments/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/comments/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/comments/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/comments/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/contracted_endpoint/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/contracted_endpoint/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/contracted_endpoint/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/contracted_endpoint/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/contracted_endpoint/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/datasources/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/datasources/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/datasources/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/datasources/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/datasources/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/detector_registry/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/detector_registry/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/detector_registry/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/detector_registry/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/detector_registry/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/endpoint_command_manager/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/endpoint_command_manager/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/endpoint_command_manager/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/endpoint_command_manager/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/endpoint_command_manager/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/endpoint_management_service/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/endpoint_management_service/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/endpoint_management_service/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/endpoint_management_service/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/endpoint_management_service/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/event_search/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/event_search/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/event_search/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/event_search/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/event_search/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/events/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/events/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/events/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/events/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/events/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/exports/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/exports/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/exports/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/exports/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/exports/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/fast_ioc/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/fast_ioc/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/fast_ioc/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/fast_ioc/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/fast_ioc/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/file_info/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/file_info/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/file_info/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/file_info/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/file_info/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/ingest_stats/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/ingest_stats/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/ingest_stats/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/ingest_stats/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/ingest_stats/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/investigations/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/investigations/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/investigations/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/investigations/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/investigations/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/investigations2/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/investigations2/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/investigations2/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/investigations2/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/investigations2/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/isensor/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/isensor/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/isensor/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/isensor/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/isensor/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/mitre_attack_info/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/mitre_attack_info/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/mitre_attack_info/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/mitre_attack_info/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/mitre_attack_info/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/multi_tenant_context/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/multi_tenant_context/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/multi_tenant_context/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/multi_tenant_context/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/multi_tenant_context/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/multi_tenant_ioc/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/multi_tenant_ioc/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/multi_tenant_ioc/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/multi_tenant_ioc/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/multi_tenant_ioc/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/nl_search/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/nl_search/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/nl_search/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/nl_search/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/nl_search/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/notebooks/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/notebooks/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/notebooks/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/notebooks/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/notebooks/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/notifications/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/notifications/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/notifications/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/notifications/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/notifications/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/preferences/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/preferences/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/preferences/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/preferences/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/preferences/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/process_trees/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/process_trees/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/process_trees/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/process_trees/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/process_trees/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/queries/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/queries/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/queries/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/queries/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/queries/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/roadrunner/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/roadrunner/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/roadrunner/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/roadrunner/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/roadrunner/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/rules/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/rules/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/rules/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/rules/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/rules/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/sharelinks/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/sharelinks/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/sharelinks/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/sharelinks/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/sharelinks/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/subjects/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/subjects/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/subjects/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/subjects/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/subjects/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenant_profiles/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenant_profiles/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenant_profiles/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenant_profiles/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenant_profiles/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenants/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenants/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenants/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenants/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenants/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenants4/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenants4/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenants4/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenants4/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenants4/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/threat/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/threat/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/threat/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/threat/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/threat/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/threat_score/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/threat_score/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/threat_score/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/threat_score/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/threat_score/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/trigger_action/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/trigger_action/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/trigger_action/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/trigger_action/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/trigger_action/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/trip/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/trip/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/trip/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/trip/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/trip/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/users/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/users/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/users/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/users/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/users/types.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/vdr/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/vdr/mutations.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/vdr/queries.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/vdr/subscriptions.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/tokens.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/transport/__init__.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/transport/aiohttp_websockets.py +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python.egg-info/SOURCES.txt +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python.egg-info/dependency_links.txt +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python.egg-info/requires.txt +0 -0
- {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/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.1"
|
|
@@ -5,19 +5,17 @@ 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
|
+
import warnings
|
|
10
|
+
from time import time
|
|
11
|
+
from typing import Any, Dict, Optional, Tuple, Union
|
|
12
12
|
|
|
13
13
|
from oauthlib.oauth2 import BackendApplicationClient
|
|
14
14
|
from requests import HTTPError, post
|
|
15
15
|
from requests_oauthlib import OAuth2Session
|
|
16
|
+
|
|
16
17
|
from taegis_sdk_python.config import get_config, write_to_config
|
|
17
|
-
from taegis_sdk_python.errors import
|
|
18
|
-
InvalidAuthenticationMethod,
|
|
19
|
-
MissingAccessTokenError,
|
|
20
|
-
)
|
|
18
|
+
from taegis_sdk_python.errors import MissingAccessTokenError
|
|
21
19
|
from taegis_sdk_python.tokens import get_token_exp
|
|
22
20
|
|
|
23
21
|
try:
|
|
@@ -47,6 +45,11 @@ def check_username(
|
|
|
47
45
|
Dict[str, Any]
|
|
48
46
|
JSON response from username check
|
|
49
47
|
"""
|
|
48
|
+
warnings.warn(
|
|
49
|
+
"check_username function is deprecated and will be removed in a future release.",
|
|
50
|
+
DeprecationWarning,
|
|
51
|
+
)
|
|
52
|
+
|
|
50
53
|
logger.debug("Checking login type for username...")
|
|
51
54
|
userlogin_endpoint = "/auth/userLogin"
|
|
52
55
|
|
|
@@ -116,28 +119,10 @@ def get_token(environment: str, request_url: str) -> str: # pragma: no cover
|
|
|
116
119
|
request_url, client_id, client_secret
|
|
117
120
|
)
|
|
118
121
|
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
|
-
)
|
|
122
|
+
access_token = get_token_by_device_code_authorization(request_url)
|
|
123
|
+
|
|
124
|
+
if not access_token:
|
|
125
|
+
raise MissingAccessTokenError(message="Access token ")
|
|
141
126
|
|
|
142
127
|
write_to_config(environment, "access_token", access_token)
|
|
143
128
|
|
|
@@ -148,11 +133,14 @@ def get_cached_token(env: str) -> Union[str, None]: # pragma: no cover
|
|
|
148
133
|
"""Get cached token from config file."""
|
|
149
134
|
config = get_config()
|
|
150
135
|
|
|
136
|
+
logger.debug(f"Checking for cached token in config for {env}...")
|
|
151
137
|
# check for token and expiry in config
|
|
152
138
|
token = str(config.get(env, "access_token", fallback=""))
|
|
153
139
|
if token and get_token_exp(token) >= int(time()) + 15:
|
|
140
|
+
logger.debug(f"Token found in config and not expired for {env}...")
|
|
154
141
|
return token
|
|
155
142
|
|
|
143
|
+
logger.debug(f"Token not found in config or expired for {env}...")
|
|
156
144
|
return None
|
|
157
145
|
|
|
158
146
|
|
|
@@ -198,82 +186,8 @@ def get_token_by_oauth(
|
|
|
198
186
|
return access_token
|
|
199
187
|
|
|
200
188
|
|
|
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
189
|
def get_token_by_device_code_authorization(
|
|
275
190
|
request_url: str,
|
|
276
|
-
external_provider: str,
|
|
277
191
|
) -> Union[str, None]: # pragma: no cover
|
|
278
192
|
"""Get a user token via Device Code authorization.
|
|
279
193
|
|
|
@@ -291,14 +205,14 @@ def get_token_by_device_code_authorization(
|
|
|
291
205
|
init_endpoint = "/universal-auth/device/code/auth"
|
|
292
206
|
token_endpoint = "/universal-auth/device/code/token"
|
|
293
207
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
response = post(f"{request_url}{init_endpoint}", timeout=300)
|
|
208
|
+
init_url = f"{request_url}{init_endpoint}"
|
|
209
|
+
logger.debug(f"Init URL: {init_url}")
|
|
210
|
+
response = post(init_url, timeout=300)
|
|
211
|
+
logger.debug(f"Response: {response.text}")
|
|
299
212
|
|
|
300
213
|
try:
|
|
301
214
|
device_code_flow = response.json()
|
|
215
|
+
|
|
302
216
|
except JSONDecodeError as exc:
|
|
303
217
|
raise HTTPError(response.text, response=response) from exc
|
|
304
218
|
|
|
@@ -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.1}/taegis_sdk_python/services/agent/__init__.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/agent/mutations.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/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.1}/taegis_sdk_python/services/agent/types.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/alerts/__init__.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/alerts/mutations.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/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.1}/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.1}/taegis_sdk_python/services/assets/__init__.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/assets/mutations.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/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.1}/taegis_sdk_python/services/assets/types.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/assets2/__init__.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/assets2/mutations.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/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.1}/taegis_sdk_python/services/assets2/types.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/audits/__init__.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/audits/mutations.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/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.1}/taegis_sdk_python/services/audits/types.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/authz/__init__.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/authz/mutations.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/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.1}/taegis_sdk_python/services/authz/types.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/byoti/__init__.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/byoti/mutations.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/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.1}/taegis_sdk_python/services/byoti/types.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/clients/__init__.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/clients/mutations.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/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.1}/taegis_sdk_python/services/clients/types.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/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.1}/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.1}/taegis_sdk_python/services/collector/types.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/comments/__init__.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/comments/mutations.py
RENAMED
|
File without changes
|
{taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/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.1}/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.1}/taegis_sdk_python/services/datasources/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
|
|
File without changes
|