strongdm 15.41.0__tar.gz → 15.43.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. {strongdm-15.41.0 → strongdm-15.43.0}/PKG-INFO +2 -2
  2. {strongdm-15.41.0 → strongdm-15.43.0}/setup.py +4 -4
  3. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/client.py +132 -1
  4. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/constants.py +1 -0
  5. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm.egg-info/PKG-INFO +2 -2
  6. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm.egg-info/requires.txt +1 -0
  7. {strongdm-15.41.0 → strongdm-15.43.0}/LICENSE +0 -0
  8. {strongdm-15.41.0 → strongdm-15.43.0}/README.md +0 -0
  9. {strongdm-15.41.0 → strongdm-15.43.0}/setup.cfg +0 -0
  10. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/__init__.py +0 -0
  11. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/access_request_events_history_pb2.py +0 -0
  12. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/access_request_events_history_pb2_grpc.py +0 -0
  13. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/access_requests_history_pb2.py +0 -0
  14. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/access_requests_history_pb2_grpc.py +0 -0
  15. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/access_requests_pb2.py +0 -0
  16. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/access_requests_pb2_grpc.py +0 -0
  17. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_attachments_history_pb2.py +0 -0
  18. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_attachments_history_pb2_grpc.py +0 -0
  19. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_attachments_pb2.py +0 -0
  20. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_attachments_pb2_grpc.py +0 -0
  21. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_grants_history_pb2.py +0 -0
  22. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_grants_history_pb2_grpc.py +0 -0
  23. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_grants_pb2.py +0 -0
  24. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_grants_pb2_grpc.py +0 -0
  25. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_permissions_pb2.py +0 -0
  26. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_permissions_pb2_grpc.py +0 -0
  27. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_resources_history_pb2.py +0 -0
  28. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_resources_history_pb2_grpc.py +0 -0
  29. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_resources_pb2.py +0 -0
  30. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_resources_pb2_grpc.py +0 -0
  31. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/accounts_groups_history_pb2.py +0 -0
  32. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/accounts_groups_history_pb2_grpc.py +0 -0
  33. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/accounts_groups_pb2.py +0 -0
  34. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/accounts_groups_pb2_grpc.py +0 -0
  35. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/accounts_history_pb2.py +0 -0
  36. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/accounts_history_pb2_grpc.py +0 -0
  37. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/accounts_pb2.py +0 -0
  38. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/accounts_pb2_grpc.py +0 -0
  39. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/activities_pb2.py +0 -0
  40. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/activities_pb2_grpc.py +0 -0
  41. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/approval_workflow_approvers_history_pb2.py +0 -0
  42. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/approval_workflow_approvers_history_pb2_grpc.py +0 -0
  43. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/approval_workflow_approvers_pb2.py +0 -0
  44. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/approval_workflow_approvers_pb2_grpc.py +0 -0
  45. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/approval_workflow_steps_history_pb2.py +0 -0
  46. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/approval_workflow_steps_history_pb2_grpc.py +0 -0
  47. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/approval_workflow_steps_pb2.py +0 -0
  48. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/approval_workflow_steps_pb2_grpc.py +0 -0
  49. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/approval_workflows_history_pb2.py +0 -0
  50. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/approval_workflows_history_pb2_grpc.py +0 -0
  51. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/approval_workflows_pb2.py +0 -0
  52. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/approval_workflows_pb2_grpc.py +0 -0
  53. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/control_panel_pb2.py +0 -0
  54. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/control_panel_pb2_grpc.py +0 -0
  55. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/discovery_connectors_pb2.py +0 -0
  56. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/discovery_connectors_pb2_grpc.py +0 -0
  57. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/drivers_pb2.py +0 -0
  58. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/drivers_pb2_grpc.py +0 -0
  59. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/errors.py +0 -0
  60. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/groups_history_pb2.py +0 -0
  61. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/groups_history_pb2_grpc.py +0 -0
  62. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/groups_pb2.py +0 -0
  63. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/groups_pb2_grpc.py +0 -0
  64. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/groups_roles_history_pb2.py +0 -0
  65. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/groups_roles_history_pb2_grpc.py +0 -0
  66. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/groups_roles_pb2.py +0 -0
  67. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/groups_roles_pb2_grpc.py +0 -0
  68. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/health_checks_pb2.py +0 -0
  69. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/health_checks_pb2_grpc.py +0 -0
  70. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/identity_aliases_history_pb2.py +0 -0
  71. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/identity_aliases_history_pb2_grpc.py +0 -0
  72. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/identity_aliases_pb2.py +0 -0
  73. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/identity_aliases_pb2_grpc.py +0 -0
  74. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/identity_sets_history_pb2.py +0 -0
  75. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/identity_sets_history_pb2_grpc.py +0 -0
  76. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/identity_sets_pb2.py +0 -0
  77. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/identity_sets_pb2_grpc.py +0 -0
  78. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/managed_secrets_pb2.py +0 -0
  79. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/managed_secrets_pb2_grpc.py +0 -0
  80. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/models.py +0 -0
  81. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/nodes_history_pb2.py +0 -0
  82. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/nodes_history_pb2_grpc.py +0 -0
  83. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/nodes_pb2.py +0 -0
  84. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/nodes_pb2_grpc.py +0 -0
  85. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/options_pb2.py +0 -0
  86. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/options_pb2_grpc.py +0 -0
  87. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/organization_history_pb2.py +0 -0
  88. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/organization_history_pb2_grpc.py +0 -0
  89. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/peering_group_nodes_pb2.py +0 -0
  90. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/peering_group_nodes_pb2_grpc.py +0 -0
  91. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/peering_group_peers_pb2.py +0 -0
  92. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/peering_group_peers_pb2_grpc.py +0 -0
  93. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/peering_group_resources_pb2.py +0 -0
  94. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/peering_group_resources_pb2_grpc.py +0 -0
  95. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/peering_groups_pb2.py +0 -0
  96. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/peering_groups_pb2_grpc.py +0 -0
  97. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/plumbing.py +0 -0
  98. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/policies_history_pb2.py +0 -0
  99. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/policies_history_pb2_grpc.py +0 -0
  100. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/policies_pb2.py +0 -0
  101. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/policies_pb2_grpc.py +0 -0
  102. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/proxy_cluster_keys_pb2.py +0 -0
  103. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/proxy_cluster_keys_pb2_grpc.py +0 -0
  104. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/queries_pb2.py +0 -0
  105. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/queries_pb2_grpc.py +0 -0
  106. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/remote_identities_history_pb2.py +0 -0
  107. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/remote_identities_history_pb2_grpc.py +0 -0
  108. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/remote_identities_pb2.py +0 -0
  109. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/remote_identities_pb2_grpc.py +0 -0
  110. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/remote_identity_groups_history_pb2.py +0 -0
  111. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/remote_identity_groups_history_pb2_grpc.py +0 -0
  112. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/remote_identity_groups_pb2.py +0 -0
  113. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/remote_identity_groups_pb2_grpc.py +0 -0
  114. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/replays_pb2.py +0 -0
  115. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/replays_pb2_grpc.py +0 -0
  116. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/resources_history_pb2.py +0 -0
  117. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/resources_history_pb2_grpc.py +0 -0
  118. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/resources_pb2.py +0 -0
  119. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/resources_pb2_grpc.py +0 -0
  120. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/role_resources_history_pb2.py +0 -0
  121. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/role_resources_history_pb2_grpc.py +0 -0
  122. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/role_resources_pb2.py +0 -0
  123. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/role_resources_pb2_grpc.py +0 -0
  124. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/roles_history_pb2.py +0 -0
  125. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/roles_history_pb2_grpc.py +0 -0
  126. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/roles_pb2.py +0 -0
  127. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/roles_pb2_grpc.py +0 -0
  128. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_engine_policy_pb2.py +0 -0
  129. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_engine_policy_pb2_grpc.py +0 -0
  130. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_engine_types_pb2.py +0 -0
  131. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_engine_types_pb2_grpc.py +0 -0
  132. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_engines_pb2.py +0 -0
  133. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_engines_pb2_grpc.py +0 -0
  134. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_store_healths_pb2.py +0 -0
  135. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_store_healths_pb2_grpc.py +0 -0
  136. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_store_types_pb2.py +0 -0
  137. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_store_types_pb2_grpc.py +0 -0
  138. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_stores_history_pb2.py +0 -0
  139. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_stores_history_pb2_grpc.py +0 -0
  140. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_stores_pb2.py +0 -0
  141. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_stores_pb2_grpc.py +0 -0
  142. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/spec_pb2.py +0 -0
  143. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/spec_pb2_grpc.py +0 -0
  144. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/svc.py +0 -0
  145. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/tags_pb2.py +0 -0
  146. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/tags_pb2_grpc.py +0 -0
  147. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/workflow_approvers_history_pb2.py +0 -0
  148. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/workflow_approvers_history_pb2_grpc.py +0 -0
  149. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/workflow_approvers_pb2.py +0 -0
  150. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/workflow_approvers_pb2_grpc.py +0 -0
  151. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/workflow_roles_history_pb2.py +0 -0
  152. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/workflow_roles_history_pb2_grpc.py +0 -0
  153. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/workflow_roles_pb2.py +0 -0
  154. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/workflow_roles_pb2_grpc.py +0 -0
  155. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/workflows_history_pb2.py +0 -0
  156. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/workflows_history_pb2_grpc.py +0 -0
  157. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/workflows_pb2.py +0 -0
  158. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/workflows_pb2_grpc.py +0 -0
  159. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm.egg-info/SOURCES.txt +0 -0
  160. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm.egg-info/dependency_links.txt +0 -0
  161. {strongdm-15.41.0 → strongdm-15.43.0}/strongdm.egg-info/top_level.txt +0 -0
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: strongdm
3
- Version: 15.41.0
3
+ Version: 15.43.0
4
4
  Summary: strongDM SDK for the Python programming language.
5
5
  Home-page: https://github.com/strongdm/strongdm-sdk-python
6
6
  Author: strongDM Team
7
7
  Author-email: sdk-feedback@strongdm.com
8
8
  License: apache-2.0
9
- Download-URL: https://github.com/strongdm/strongdm-sdk-python/archive/v15.41.0.tar.gz
9
+ Download-URL: https://github.com/strongdm/strongdm-sdk-python/archive/v15.43.0.tar.gz
10
10
  Keywords: strongDM,sdm,api,automation,security,audit,database,server,ssh,rdp
11
11
  Platform: UNKNOWN
12
12
  Classifier: Development Status :: 4 - Beta
@@ -23,7 +23,7 @@ from setuptools import setup
23
23
  setup(
24
24
  name='strongdm',
25
25
  packages=['strongdm'],
26
- version='15.41.0',
26
+ version='15.43.0',
27
27
  license='apache-2.0',
28
28
  description='strongDM SDK for the Python programming language.',
29
29
  long_description=long_description,
@@ -32,14 +32,14 @@ setup(
32
32
  author_email='sdk-feedback@strongdm.com',
33
33
  url='https://github.com/strongdm/strongdm-sdk-python',
34
34
  download_url=
35
- 'https://github.com/strongdm/strongdm-sdk-python/archive/v15.41.0.tar.gz',
35
+ 'https://github.com/strongdm/strongdm-sdk-python/archive/v15.43.0.tar.gz',
36
36
  keywords=[
37
37
  'strongDM', 'sdm', 'api', 'automation', 'security', 'audit',
38
38
  'database', 'server', 'ssh', 'rdp'
39
39
  ],
40
40
  install_requires=[
41
- 'grpcio>=1.42.0',
42
- 'googleapis-common-protos>1.56.2,<2',
41
+ 'grpcio >= 1.42.0', 'googleapis-common-protos>1.56.2,<2',
42
+ 'cryptography >= 46.0.0'
43
43
  ],
44
44
  classifiers=[
45
45
  'Development Status :: 4 - Beta', # Chose either "3 - Alpha", "4 - Beta" or "5 - Production/Stable" as the current state of your package
@@ -16,17 +16,23 @@
16
16
  # Code generated by protogen. DO NOT EDIT.
17
17
 
18
18
  import base64
19
+ import collections
19
20
  import copy
20
21
  import datetime
22
+ import functools
21
23
  import grpc
22
24
  import hashlib
23
25
  import hmac
24
26
  import random
27
+ import re
25
28
  import time
26
29
  from . import errors
27
30
  from . import plumbing
28
31
  from . import svc
29
32
 
33
+ from cryptography.hazmat.primitives.asymmetric import rsa, padding
34
+ from cryptography.hazmat.primitives import serialization, hashes
35
+
30
36
  # These defaults are taken from AWS. Customization of these values
31
37
  # is a future step in the API.
32
38
  DEFAULT_BASE_RETRY_DELAY = 1 # 1 second
@@ -34,7 +40,131 @@ DEFAULT_MAX_RETRY_DELAY = 120 # 120 seconds
34
40
  DEFAULT_RETRY_FACTOR = 1.6
35
41
  DEFAULT_RETRY_JITTER = 0.2
36
42
  API_VERSION = '2025-04-14'
37
- USER_AGENT = 'strongdm-sdk-python/15.41.0'
43
+ USER_AGENT = 'strongdm-sdk-python/15.43.0'
44
+
45
+ method_regexp = re.compile(r'\W+')
46
+
47
+
48
+ class _ClientCallDetails(
49
+ collections.namedtuple(
50
+ "_ClientCallDetails",
51
+ ("method", "timeout", "metadata", "credentials")),
52
+ grpc.ClientCallDetails,
53
+ ):
54
+ """ _ClientCallDetails is used to override some of the attributes of the client_call_details in the interceptors"""
55
+ pass
56
+
57
+
58
+ class _EncryptionInterceptor(grpc.UnaryUnaryClientInterceptor):
59
+ """ _EncryptionInterceptor is used to add transparent encryption/decryption support for managed secrets"""
60
+ def __init__(self, client):
61
+ self.client = client
62
+ self.public_key_cache = {}
63
+
64
+ def intercept_unary_unary(self, continuation, client_call_details,
65
+ request):
66
+ method = method_regexp.sub("_", client_call_details.method.lower())
67
+ callback = getattr(self, method, None)
68
+ if callback is not None:
69
+ return callback(continuation, client_call_details, request)
70
+ return continuation(client_call_details, request)
71
+
72
+ @functools.cached_property
73
+ def private_key(self):
74
+ return rsa.generate_private_key(
75
+ public_exponent=65537,
76
+ key_size=4096,
77
+ )
78
+
79
+ def _encrypt_secret(self, method, continuation, client_call_details,
80
+ request):
81
+ secret = request.managed_secret
82
+ if len(secret.value) != 0:
83
+ if secret.secret_engine_id not in self.public_key_cache:
84
+ try:
85
+ # fetch secret engine details to fill up self.public_key_cache
86
+ # if it fails the call to create/update will fail as well
87
+ self.client.secret_engines.get(secret.secret_engine_id)
88
+ except errors.RPCError:
89
+ pass
90
+ key = self.public_key_cache.get(secret.secret_engine_id)
91
+ if key is not None:
92
+ encrypted = key.encrypt(
93
+ secret.value,
94
+ padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()),
95
+ algorithm=hashes.SHA256(),
96
+ label=None))
97
+ secret.value = encrypted
98
+ client_call_details = _ClientCallDetails(
99
+ method=client_call_details.method,
100
+ timeout=client_call_details.timeout,
101
+ metadata=self.client.get_metadata(method, request),
102
+ credentials=client_call_details.credentials)
103
+ return continuation(client_call_details, request)
104
+
105
+ def _v1_managedsecrets_create(self, continuation, client_call_details,
106
+ request):
107
+ return self._encrypt_secret("ManagedSecrets.Create", continuation,
108
+ client_call_details, request)
109
+
110
+ def _v1_managedsecrets_update(self, continuation, client_call_details,
111
+ request):
112
+ return self._encrypt_secret("ManagedSecrets.Update", continuation,
113
+ client_call_details, request)
114
+
115
+ def _v1_managedsecrets_retrieve(self, continuation, client_call_details,
116
+ request):
117
+ if len(request.public_key) != 0:
118
+ return continuation(client_call_details, request)
119
+
120
+ privKey = self.private_key
121
+ request.public_key = privKey.public_key().public_bytes(
122
+ serialization.Encoding.PEM,
123
+ serialization.PublicFormat.SubjectPublicKeyInfo)
124
+ client_call_details = _ClientCallDetails(
125
+ method=client_call_details.method,
126
+ timeout=client_call_details.timeout,
127
+ metadata=self.client.get_metadata("ManagedSecrets.Retrieve",
128
+ request),
129
+ credentials=client_call_details.credentials)
130
+ resp = continuation(client_call_details, request)
131
+ if resp.code() != grpc.StatusCode.OK:
132
+ return resp
133
+ result = resp.result()
134
+ plaintext = privKey.decrypt(
135
+ result.managed_secret.value,
136
+ padding.OAEP(
137
+ mgf=padding.MGF1(algorithm=hashes.SHA256()),
138
+ algorithm=hashes.SHA256(),
139
+ label=None,
140
+ ))
141
+ result.managed_secret.value = plaintext
142
+ return resp
143
+
144
+ def _v1_secretengines_get(self, continuation, client_call_details,
145
+ request):
146
+ response = continuation(client_call_details, request)
147
+ if response.code() != grpc.StatusCode.OK:
148
+ return response
149
+ result = response.result()
150
+ engine = plumbing.convert_secret_engine_to_porcelain(
151
+ result.secret_engine)
152
+ engineKey = serialization.load_pem_public_key(engine.public_key)
153
+ self.public_key_cache[engine.id] = engineKey
154
+ return response
155
+
156
+ def _v1_secretengines_list(self, continuation, client_call_details,
157
+ request):
158
+ response = continuation(client_call_details, request)
159
+ if response.code() != grpc.StatusCode.OK:
160
+ return response
161
+ result = response.result()
162
+ for plumbing_engine in result.secret_engines:
163
+ engine = plumbing.convert_secret_engine_to_porcelain(
164
+ plumbing_engine)
165
+ engineKey = serialization.load_pem_public_key(engine.public_key)
166
+ self.public_key_cache[engine.id] = engineKey
167
+ return response
38
168
 
39
169
 
40
170
  class Client:
@@ -70,6 +200,7 @@ class Client:
70
200
  channel = grpc.secure_channel(host, creds)
71
201
  except Exception as e:
72
202
  raise plumbing.convert_error_to_porcelain(e) from e
203
+ channel = grpc.intercept_channel(channel, _EncryptionInterceptor(self))
73
204
  self.channel = channel
74
205
  self.access_requests = svc.AccessRequests(channel, self)
75
206
  '''
@@ -332,6 +332,7 @@ class ActivityVerb:
332
332
  RESOURCE_LOCKED = "user locked a resource"
333
333
  RESOURCE_UNLOCKED = "user unlocked a resource"
334
334
  RESOURCE_FORCE_UNLOCKED = "admin force-unlocked a resource"
335
+ RESOURCE_LOCK_REJECTED = "user lock rejected for a resource"
335
336
  CONCURRENT_AUTHENTICATION_REVOKED_PER_ORG_SETTING = "concurrent authentications revoked per organization settings"
336
337
  PEERING_GROUP_TOGGLED = "peering group toggled"
337
338
  PEERING_GROUP_CREATED = "peering group created"
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: strongdm
3
- Version: 15.41.0
3
+ Version: 15.43.0
4
4
  Summary: strongDM SDK for the Python programming language.
5
5
  Home-page: https://github.com/strongdm/strongdm-sdk-python
6
6
  Author: strongDM Team
7
7
  Author-email: sdk-feedback@strongdm.com
8
8
  License: apache-2.0
9
- Download-URL: https://github.com/strongdm/strongdm-sdk-python/archive/v15.41.0.tar.gz
9
+ Download-URL: https://github.com/strongdm/strongdm-sdk-python/archive/v15.43.0.tar.gz
10
10
  Keywords: strongDM,sdm,api,automation,security,audit,database,server,ssh,rdp
11
11
  Platform: UNKNOWN
12
12
  Classifier: Development Status :: 4 - Beta
@@ -1,2 +1,3 @@
1
+ cryptography>=46.0.0
1
2
  googleapis-common-protos<2,>1.56.2
2
3
  grpcio>=1.42.0
File without changes
File without changes
File without changes
File without changes