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.
Files changed (267) hide show
  1. {taegis_sdk_python-1.3.1/taegis_sdk_python.egg-info → taegis_sdk_python-1.4.1}/PKG-INFO +1 -1
  2. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/_consts.py +3 -0
  3. taegis_sdk_python-1.4.1/taegis_sdk_python/_version.py +1 -0
  4. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/authentication.py +22 -108
  5. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/__init__.py +41 -4
  6. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/vdr/types.py +2 -0
  7. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/utils.py +9 -13
  8. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1/taegis_sdk_python.egg-info}/PKG-INFO +1 -1
  9. taegis_sdk_python-1.3.1/taegis_sdk_python/_version.py +0 -1
  10. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/LICENSE +0 -0
  11. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/MANIFEST.in +0 -0
  12. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/README.md +0 -0
  13. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/requirements-dev.txt +0 -0
  14. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/requirements-test.txt +0 -0
  15. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/requirements.txt +0 -0
  16. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/setup.cfg +0 -0
  17. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/setup.py +0 -0
  18. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/__init__.py +0 -0
  19. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/config.py +0 -0
  20. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/errors.py +0 -0
  21. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/service_core.py +0 -0
  22. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/access_points/__init__.py +0 -0
  23. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/access_points/mutations.py +0 -0
  24. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/access_points/queries.py +0 -0
  25. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/access_points/subscriptions.py +0 -0
  26. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/access_points/types.py +0 -0
  27. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/agent/__init__.py +0 -0
  28. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/agent/mutations.py +0 -0
  29. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/agent/queries.py +0 -0
  30. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/agent/subscriptions.py +0 -0
  31. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/agent/types.py +0 -0
  32. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/alerts/__init__.py +0 -0
  33. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/alerts/mutations.py +0 -0
  34. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/alerts/queries.py +0 -0
  35. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/alerts/subscriptions.py +0 -0
  36. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/alerts/types.py +0 -0
  37. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/alerts_history/__init__.py +0 -0
  38. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/alerts_history/mutations.py +0 -0
  39. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/alerts_history/queries.py +0 -0
  40. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/alerts_history/subscriptions.py +0 -0
  41. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/alerts_history/types.py +0 -0
  42. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/assets/__init__.py +0 -0
  43. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/assets/mutations.py +0 -0
  44. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/assets/queries.py +0 -0
  45. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/assets/subscriptions.py +0 -0
  46. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/assets/types.py +0 -0
  47. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/assets2/__init__.py +0 -0
  48. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/assets2/mutations.py +0 -0
  49. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/assets2/queries.py +0 -0
  50. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/assets2/subscriptions.py +0 -0
  51. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/assets2/types.py +0 -0
  52. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/audits/__init__.py +0 -0
  53. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/audits/mutations.py +0 -0
  54. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/audits/queries.py +0 -0
  55. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/audits/subscriptions.py +0 -0
  56. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/audits/types.py +0 -0
  57. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/authz/__init__.py +0 -0
  58. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/authz/mutations.py +0 -0
  59. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/authz/queries.py +0 -0
  60. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/authz/subscriptions.py +0 -0
  61. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/authz/types.py +0 -0
  62. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/byoti/__init__.py +0 -0
  63. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/byoti/mutations.py +0 -0
  64. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/byoti/queries.py +0 -0
  65. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/byoti/subscriptions.py +0 -0
  66. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/byoti/types.py +0 -0
  67. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/clients/__init__.py +0 -0
  68. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/clients/mutations.py +0 -0
  69. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/clients/queries.py +0 -0
  70. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/clients/subscriptions.py +0 -0
  71. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/clients/types.py +0 -0
  72. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/collector/__init__.py +0 -0
  73. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/collector/mutations.py +0 -0
  74. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/collector/queries.py +0 -0
  75. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/collector/subscriptions.py +0 -0
  76. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/collector/types.py +0 -0
  77. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/comments/__init__.py +0 -0
  78. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/comments/mutations.py +0 -0
  79. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/comments/queries.py +0 -0
  80. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/comments/subscriptions.py +0 -0
  81. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/comments/types.py +0 -0
  82. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/contracted_endpoint/__init__.py +0 -0
  83. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/contracted_endpoint/mutations.py +0 -0
  84. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/contracted_endpoint/queries.py +0 -0
  85. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/contracted_endpoint/subscriptions.py +0 -0
  86. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/contracted_endpoint/types.py +0 -0
  87. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/datasources/__init__.py +0 -0
  88. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/datasources/mutations.py +0 -0
  89. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/datasources/queries.py +0 -0
  90. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/datasources/subscriptions.py +0 -0
  91. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/datasources/types.py +0 -0
  92. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/detector_registry/__init__.py +0 -0
  93. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/detector_registry/mutations.py +0 -0
  94. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/detector_registry/queries.py +0 -0
  95. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/detector_registry/subscriptions.py +0 -0
  96. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/detector_registry/types.py +0 -0
  97. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/endpoint_command_manager/__init__.py +0 -0
  98. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/endpoint_command_manager/mutations.py +0 -0
  99. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/endpoint_command_manager/queries.py +0 -0
  100. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/endpoint_command_manager/subscriptions.py +0 -0
  101. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/endpoint_command_manager/types.py +0 -0
  102. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/endpoint_management_service/__init__.py +0 -0
  103. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/endpoint_management_service/mutations.py +0 -0
  104. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/endpoint_management_service/queries.py +0 -0
  105. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/endpoint_management_service/subscriptions.py +0 -0
  106. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/endpoint_management_service/types.py +0 -0
  107. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/event_search/__init__.py +0 -0
  108. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/event_search/mutations.py +0 -0
  109. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/event_search/queries.py +0 -0
  110. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/event_search/subscriptions.py +0 -0
  111. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/event_search/types.py +0 -0
  112. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/events/__init__.py +0 -0
  113. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/events/mutations.py +0 -0
  114. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/events/queries.py +0 -0
  115. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/events/subscriptions.py +0 -0
  116. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/events/types.py +0 -0
  117. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/exports/__init__.py +0 -0
  118. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/exports/mutations.py +0 -0
  119. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/exports/queries.py +0 -0
  120. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/exports/subscriptions.py +0 -0
  121. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/exports/types.py +0 -0
  122. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/fast_ioc/__init__.py +0 -0
  123. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/fast_ioc/mutations.py +0 -0
  124. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/fast_ioc/queries.py +0 -0
  125. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/fast_ioc/subscriptions.py +0 -0
  126. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/fast_ioc/types.py +0 -0
  127. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/file_info/__init__.py +0 -0
  128. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/file_info/mutations.py +0 -0
  129. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/file_info/queries.py +0 -0
  130. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/file_info/subscriptions.py +0 -0
  131. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/file_info/types.py +0 -0
  132. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/ingest_stats/__init__.py +0 -0
  133. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/ingest_stats/mutations.py +0 -0
  134. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/ingest_stats/queries.py +0 -0
  135. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/ingest_stats/subscriptions.py +0 -0
  136. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/ingest_stats/types.py +0 -0
  137. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/investigations/__init__.py +0 -0
  138. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/investigations/mutations.py +0 -0
  139. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/investigations/queries.py +0 -0
  140. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/investigations/subscriptions.py +0 -0
  141. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/investigations/types.py +0 -0
  142. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/investigations2/__init__.py +0 -0
  143. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/investigations2/mutations.py +0 -0
  144. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/investigations2/queries.py +0 -0
  145. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/investigations2/subscriptions.py +0 -0
  146. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/investigations2/types.py +0 -0
  147. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/isensor/__init__.py +0 -0
  148. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/isensor/mutations.py +0 -0
  149. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/isensor/queries.py +0 -0
  150. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/isensor/subscriptions.py +0 -0
  151. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/isensor/types.py +0 -0
  152. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/mitre_attack_info/__init__.py +0 -0
  153. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/mitre_attack_info/mutations.py +0 -0
  154. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/mitre_attack_info/queries.py +0 -0
  155. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/mitre_attack_info/subscriptions.py +0 -0
  156. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/mitre_attack_info/types.py +0 -0
  157. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/multi_tenant_context/__init__.py +0 -0
  158. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/multi_tenant_context/mutations.py +0 -0
  159. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/multi_tenant_context/queries.py +0 -0
  160. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/multi_tenant_context/subscriptions.py +0 -0
  161. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/multi_tenant_context/types.py +0 -0
  162. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/multi_tenant_ioc/__init__.py +0 -0
  163. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/multi_tenant_ioc/mutations.py +0 -0
  164. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/multi_tenant_ioc/queries.py +0 -0
  165. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/multi_tenant_ioc/subscriptions.py +0 -0
  166. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/multi_tenant_ioc/types.py +0 -0
  167. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/nl_search/__init__.py +0 -0
  168. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/nl_search/mutations.py +0 -0
  169. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/nl_search/queries.py +0 -0
  170. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/nl_search/subscriptions.py +0 -0
  171. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/nl_search/types.py +0 -0
  172. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/notebooks/__init__.py +0 -0
  173. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/notebooks/mutations.py +0 -0
  174. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/notebooks/queries.py +0 -0
  175. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/notebooks/subscriptions.py +0 -0
  176. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/notebooks/types.py +0 -0
  177. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/notifications/__init__.py +0 -0
  178. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/notifications/mutations.py +0 -0
  179. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/notifications/queries.py +0 -0
  180. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/notifications/subscriptions.py +0 -0
  181. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/notifications/types.py +0 -0
  182. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/preferences/__init__.py +0 -0
  183. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/preferences/mutations.py +0 -0
  184. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/preferences/queries.py +0 -0
  185. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/preferences/subscriptions.py +0 -0
  186. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/preferences/types.py +0 -0
  187. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/process_trees/__init__.py +0 -0
  188. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/process_trees/mutations.py +0 -0
  189. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/process_trees/queries.py +0 -0
  190. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/process_trees/subscriptions.py +0 -0
  191. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/process_trees/types.py +0 -0
  192. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/queries/__init__.py +0 -0
  193. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/queries/mutations.py +0 -0
  194. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/queries/queries.py +0 -0
  195. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/queries/subscriptions.py +0 -0
  196. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/queries/types.py +0 -0
  197. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/roadrunner/__init__.py +0 -0
  198. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/roadrunner/mutations.py +0 -0
  199. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/roadrunner/queries.py +0 -0
  200. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/roadrunner/subscriptions.py +0 -0
  201. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/roadrunner/types.py +0 -0
  202. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/rules/__init__.py +0 -0
  203. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/rules/mutations.py +0 -0
  204. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/rules/queries.py +0 -0
  205. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/rules/subscriptions.py +0 -0
  206. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/rules/types.py +0 -0
  207. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/sharelinks/__init__.py +0 -0
  208. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/sharelinks/mutations.py +0 -0
  209. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/sharelinks/queries.py +0 -0
  210. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/sharelinks/subscriptions.py +0 -0
  211. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/sharelinks/types.py +0 -0
  212. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/subjects/__init__.py +0 -0
  213. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/subjects/mutations.py +0 -0
  214. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/subjects/queries.py +0 -0
  215. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/subjects/subscriptions.py +0 -0
  216. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/subjects/types.py +0 -0
  217. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenant_profiles/__init__.py +0 -0
  218. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenant_profiles/mutations.py +0 -0
  219. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenant_profiles/queries.py +0 -0
  220. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenant_profiles/subscriptions.py +0 -0
  221. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenant_profiles/types.py +0 -0
  222. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenants/__init__.py +0 -0
  223. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenants/mutations.py +0 -0
  224. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenants/queries.py +0 -0
  225. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenants/subscriptions.py +0 -0
  226. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenants/types.py +0 -0
  227. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenants4/__init__.py +0 -0
  228. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenants4/mutations.py +0 -0
  229. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenants4/queries.py +0 -0
  230. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenants4/subscriptions.py +0 -0
  231. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/tenants4/types.py +0 -0
  232. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/threat/__init__.py +0 -0
  233. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/threat/mutations.py +0 -0
  234. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/threat/queries.py +0 -0
  235. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/threat/subscriptions.py +0 -0
  236. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/threat/types.py +0 -0
  237. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/threat_score/__init__.py +0 -0
  238. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/threat_score/mutations.py +0 -0
  239. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/threat_score/queries.py +0 -0
  240. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/threat_score/subscriptions.py +0 -0
  241. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/threat_score/types.py +0 -0
  242. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/trigger_action/__init__.py +0 -0
  243. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/trigger_action/mutations.py +0 -0
  244. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/trigger_action/queries.py +0 -0
  245. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/trigger_action/subscriptions.py +0 -0
  246. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/trigger_action/types.py +0 -0
  247. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/trip/__init__.py +0 -0
  248. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/trip/mutations.py +0 -0
  249. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/trip/queries.py +0 -0
  250. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/trip/subscriptions.py +0 -0
  251. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/trip/types.py +0 -0
  252. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/users/__init__.py +0 -0
  253. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/users/mutations.py +0 -0
  254. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/users/queries.py +0 -0
  255. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/users/subscriptions.py +0 -0
  256. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/users/types.py +0 -0
  257. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/vdr/__init__.py +0 -0
  258. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/vdr/mutations.py +0 -0
  259. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/vdr/queries.py +0 -0
  260. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/services/vdr/subscriptions.py +0 -0
  261. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/tokens.py +0 -0
  262. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/transport/__init__.py +0 -0
  263. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python/transport/aiohttp_websockets.py +0 -0
  264. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python.egg-info/SOURCES.txt +0 -0
  265. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python.egg-info/dependency_links.txt +0 -0
  266. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python.egg-info/requires.txt +0 -0
  267. {taegis_sdk_python-1.3.1 → taegis_sdk_python-1.4.1}/taegis_sdk_python.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: taegis-sdk-python
3
- Version: 1.3.1
3
+ Version: 1.4.1
4
4
  Summary: Taegis Python SDK
5
5
  Home-page: https://github.com/secureworks/taegis-sdk-python
6
6
  Author: Secureworks
@@ -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
- username = input("Username: ")
120
- response = check_username(request_url, username)
121
- external_provider = response.get("external_provider")
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
- if external_provider == "COGNITO":
295
- init_endpoint += "?version=2"
296
- token_endpoint += "?version=2"
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 TAEGIS_ENVIRONMENT_URLS
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.environment,
280
- request_url=self._environments.get(self.environment),
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.environment, "access_token", "")
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(union, result: Union[List[Dict[str, Any]], Dict[str, Any]]) -> Any:
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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: taegis-sdk-python
3
- Version: 1.3.1
3
+ Version: 1.4.1
4
4
  Summary: Taegis Python SDK
5
5
  Home-page: https://github.com/secureworks/taegis-sdk-python
6
6
  Author: Secureworks
@@ -1 +0,0 @@
1
- __version__ = "v1.3.1"