strongdm 9.4.0__zip → 9.6.0__zip

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 (135) hide show
  1. {strongdm-9.4.0 → strongdm-9.6.0}/PKG-INFO +2 -2
  2. {strongdm-9.4.0 → strongdm-9.6.0}/setup.py +2 -2
  3. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/client.py +1 -1
  4. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/constants.py +2 -2
  5. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/drivers_pb2.py +215 -171
  6. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/models.py +194 -20
  7. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/organization_history_pb2.py +11 -5
  8. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/plumbing.py +67 -0
  9. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/spec_pb2.py +10 -8
  10. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/svc.py +1 -0
  11. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm.egg-info/PKG-INFO +2 -2
  12. {strongdm-9.4.0 → strongdm-9.6.0}/LICENSE +0 -0
  13. {strongdm-9.4.0 → strongdm-9.6.0}/README.md +0 -0
  14. {strongdm-9.4.0 → strongdm-9.6.0}/setup.cfg +0 -0
  15. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/__init__.py +0 -0
  16. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/access_request_events_history_pb2.py +0 -0
  17. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/access_request_events_history_pb2_grpc.py +0 -0
  18. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/access_requests_history_pb2.py +0 -0
  19. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/access_requests_history_pb2_grpc.py +0 -0
  20. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/access_requests_pb2.py +0 -0
  21. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/access_requests_pb2_grpc.py +0 -0
  22. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/account_attachments_history_pb2.py +0 -0
  23. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/account_attachments_history_pb2_grpc.py +0 -0
  24. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/account_attachments_pb2.py +0 -0
  25. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/account_attachments_pb2_grpc.py +0 -0
  26. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/account_grants_history_pb2.py +0 -0
  27. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/account_grants_history_pb2_grpc.py +0 -0
  28. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/account_grants_pb2.py +0 -0
  29. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/account_grants_pb2_grpc.py +0 -0
  30. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/account_permissions_pb2.py +0 -0
  31. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/account_permissions_pb2_grpc.py +0 -0
  32. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/account_resources_history_pb2.py +0 -0
  33. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/account_resources_history_pb2_grpc.py +0 -0
  34. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/account_resources_pb2.py +0 -0
  35. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/account_resources_pb2_grpc.py +0 -0
  36. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/accounts_history_pb2.py +0 -0
  37. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/accounts_history_pb2_grpc.py +0 -0
  38. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/accounts_pb2.py +0 -0
  39. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/accounts_pb2_grpc.py +0 -0
  40. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/activities_pb2.py +0 -0
  41. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/activities_pb2_grpc.py +0 -0
  42. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/approval_workflow_approvers_history_pb2.py +0 -0
  43. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/approval_workflow_approvers_history_pb2_grpc.py +0 -0
  44. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/approval_workflow_approvers_pb2.py +0 -0
  45. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/approval_workflow_approvers_pb2_grpc.py +0 -0
  46. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/approval_workflow_steps_history_pb2.py +0 -0
  47. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/approval_workflow_steps_history_pb2_grpc.py +0 -0
  48. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/approval_workflow_steps_pb2.py +0 -0
  49. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/approval_workflow_steps_pb2_grpc.py +0 -0
  50. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/approval_workflows_history_pb2.py +0 -0
  51. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/approval_workflows_history_pb2_grpc.py +0 -0
  52. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/approval_workflows_pb2.py +0 -0
  53. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/approval_workflows_pb2_grpc.py +0 -0
  54. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/control_panel_pb2.py +0 -0
  55. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/control_panel_pb2_grpc.py +0 -0
  56. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/drivers_pb2_grpc.py +0 -0
  57. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/errors.py +0 -0
  58. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/identity_aliases_history_pb2.py +0 -0
  59. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/identity_aliases_history_pb2_grpc.py +0 -0
  60. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/identity_aliases_pb2.py +0 -0
  61. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/identity_aliases_pb2_grpc.py +0 -0
  62. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/identity_sets_history_pb2.py +0 -0
  63. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/identity_sets_history_pb2_grpc.py +0 -0
  64. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/identity_sets_pb2.py +0 -0
  65. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/identity_sets_pb2_grpc.py +0 -0
  66. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/nodes_history_pb2.py +0 -0
  67. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/nodes_history_pb2_grpc.py +0 -0
  68. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/nodes_pb2.py +0 -0
  69. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/nodes_pb2_grpc.py +0 -0
  70. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/options_pb2.py +0 -0
  71. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/options_pb2_grpc.py +0 -0
  72. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/organization_history_pb2_grpc.py +0 -0
  73. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/peering_group_nodes_pb2.py +0 -0
  74. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/peering_group_nodes_pb2_grpc.py +0 -0
  75. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/peering_group_peers_pb2.py +0 -0
  76. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/peering_group_peers_pb2_grpc.py +0 -0
  77. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/peering_group_resources_pb2.py +0 -0
  78. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/peering_group_resources_pb2_grpc.py +0 -0
  79. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/peering_groups_pb2.py +0 -0
  80. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/peering_groups_pb2_grpc.py +0 -0
  81. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/queries_pb2.py +0 -0
  82. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/queries_pb2_grpc.py +0 -0
  83. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/remote_identities_history_pb2.py +0 -0
  84. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/remote_identities_history_pb2_grpc.py +0 -0
  85. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/remote_identities_pb2.py +0 -0
  86. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/remote_identities_pb2_grpc.py +0 -0
  87. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/remote_identity_groups_history_pb2.py +0 -0
  88. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/remote_identity_groups_history_pb2_grpc.py +0 -0
  89. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/remote_identity_groups_pb2.py +0 -0
  90. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/remote_identity_groups_pb2_grpc.py +0 -0
  91. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/replays_pb2.py +0 -0
  92. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/replays_pb2_grpc.py +0 -0
  93. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/resources_history_pb2.py +0 -0
  94. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/resources_history_pb2_grpc.py +0 -0
  95. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/resources_pb2.py +0 -0
  96. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/resources_pb2_grpc.py +0 -0
  97. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/role_resources_history_pb2.py +0 -0
  98. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/role_resources_history_pb2_grpc.py +0 -0
  99. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/role_resources_pb2.py +0 -0
  100. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/role_resources_pb2_grpc.py +0 -0
  101. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/roles_history_pb2.py +0 -0
  102. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/roles_history_pb2_grpc.py +0 -0
  103. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/roles_pb2.py +0 -0
  104. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/roles_pb2_grpc.py +0 -0
  105. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/secret_store_healths_pb2.py +0 -0
  106. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/secret_store_healths_pb2_grpc.py +0 -0
  107. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/secret_store_types_pb2.py +0 -0
  108. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/secret_store_types_pb2_grpc.py +0 -0
  109. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/secret_stores_history_pb2.py +0 -0
  110. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/secret_stores_history_pb2_grpc.py +0 -0
  111. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/secret_stores_pb2.py +0 -0
  112. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/secret_stores_pb2_grpc.py +0 -0
  113. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/spec_pb2_grpc.py +0 -0
  114. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/tags_pb2.py +0 -0
  115. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/tags_pb2_grpc.py +0 -0
  116. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/workflow_approvers_history_pb2.py +0 -0
  117. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/workflow_approvers_history_pb2_grpc.py +0 -0
  118. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/workflow_approvers_pb2.py +0 -0
  119. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/workflow_approvers_pb2_grpc.py +0 -0
  120. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/workflow_assignments_history_pb2.py +0 -0
  121. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/workflow_assignments_history_pb2_grpc.py +0 -0
  122. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/workflow_assignments_pb2.py +0 -0
  123. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/workflow_assignments_pb2_grpc.py +0 -0
  124. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/workflow_roles_history_pb2.py +0 -0
  125. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/workflow_roles_history_pb2_grpc.py +0 -0
  126. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/workflow_roles_pb2.py +0 -0
  127. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/workflow_roles_pb2_grpc.py +0 -0
  128. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/workflows_history_pb2.py +0 -0
  129. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/workflows_history_pb2_grpc.py +0 -0
  130. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/workflows_pb2.py +0 -0
  131. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm/workflows_pb2_grpc.py +0 -0
  132. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm.egg-info/SOURCES.txt +0 -0
  133. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm.egg-info/dependency_links.txt +0 -0
  134. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm.egg-info/requires.txt +0 -0
  135. {strongdm-9.4.0 → strongdm-9.6.0}/strongdm.egg-info/top_level.txt +0 -0
@@ -2737,8 +2737,7 @@ class AccountPermission:
2737
2737
  '''
2738
2738
  self.permission = permission if permission is not None else ''
2739
2739
  '''
2740
- The value of this permission, split into vertical and action e.g.
2741
- 'secretstore:List', 'role:update'
2740
+ The value of this permission, split into vertical and action, one of the Permission constants.
2742
2741
  '''
2743
2742
  self.scope = scope if scope is not None else ''
2744
2743
  '''
@@ -3113,7 +3112,7 @@ class Activity:
3113
3112
  '''
3114
3113
  self.verb = verb if verb is not None else ''
3115
3114
  '''
3116
- The kind of activity which has taken place.
3115
+ The kind of activity which has taken place, one of the ActivityVerb constants.
3117
3116
  '''
3118
3117
 
3119
3118
  def __repr__(self):
@@ -3256,7 +3255,7 @@ class ActivityEntity:
3256
3255
  '''
3257
3256
  self.type = type if type is not None else ''
3258
3257
  '''
3259
- The type of entity affected, one of the Activity Entities constants.
3258
+ The type of entity affected, one of the ActivityEntityType constants.
3260
3259
  '''
3261
3260
 
3262
3261
  def __repr__(self):
@@ -13844,10 +13843,6 @@ class MongoReplicaSet:
13844
13843
 
13845
13844
 
13846
13845
  class MongoShardedCluster:
13847
- '''
13848
- MongoShardedCluster is currently unstable, and its API may change, or it may be removed,
13849
- without a major version bump.
13850
- '''
13851
13846
  __slots__ = [
13852
13847
  'auth_database',
13853
13848
  'bind_interface',
@@ -14934,6 +14929,8 @@ class Organization:
14934
14929
  __slots__ = [
14935
14930
  'auth_provider',
14936
14931
  'created_at',
14932
+ 'device_trust_enabled',
14933
+ 'device_trust_provider',
14937
14934
  'idle_timeout',
14938
14935
  'idle_timeout_enabled',
14939
14936
  'kind',
@@ -14962,6 +14959,8 @@ class Organization:
14962
14959
  self,
14963
14960
  auth_provider=None,
14964
14961
  created_at=None,
14962
+ device_trust_enabled=None,
14963
+ device_trust_provider=None,
14965
14964
  idle_timeout=None,
14966
14965
  idle_timeout_enabled=None,
14967
14966
  kind=None,
@@ -14987,12 +14986,20 @@ class Organization:
14987
14986
  ):
14988
14987
  self.auth_provider = auth_provider if auth_provider is not None else ''
14989
14988
  '''
14990
- The Organization's authentication provider.
14989
+ The Organization's authentication provider, one of the AuthProvider constants.
14991
14990
  '''
14992
14991
  self.created_at = created_at if created_at is not None else None
14993
14992
  '''
14994
14993
  The time at which the Organization was created.
14995
14994
  '''
14995
+ self.device_trust_enabled = device_trust_enabled if device_trust_enabled is not None else False
14996
+ '''
14997
+ Indicates if the Organization has device trust enabled.
14998
+ '''
14999
+ self.device_trust_provider = device_trust_provider if device_trust_provider is not None else ''
15000
+ '''
15001
+ The Organization's device trust provider, one of the DeviceTrustProvider constants.
15002
+ '''
14996
15003
  self.idle_timeout = idle_timeout if idle_timeout is not None else None
14997
15004
  '''
14998
15005
  The Organization's idle timeout, if enabled.
@@ -15003,23 +15010,23 @@ class Organization:
15003
15010
  '''
15004
15011
  self.kind = kind if kind is not None else ''
15005
15012
  '''
15006
- The Organization's type.
15013
+ The Organization's type, one of the OrgKind constants.
15007
15014
  '''
15008
15015
  self.log_local_encoder = log_local_encoder if log_local_encoder is not None else ''
15009
15016
  '''
15010
- The Organization's local log encryption encoder.
15017
+ The Organization's local log encryption encoder, one of the LogLocalEncoder constants.
15011
15018
  '''
15012
15019
  self.log_local_format = log_local_format if log_local_format is not None else ''
15013
15020
  '''
15014
- The Organization's local log format.
15021
+ The Organization's local log format, one of the LogLocalFormat constants.
15015
15022
  '''
15016
15023
  self.log_local_storage = log_local_storage if log_local_storage is not None else ''
15017
15024
  '''
15018
- The Organization's local log storage.
15025
+ The Organization's local log storage, one of the LogLocalStorage constants.
15019
15026
  '''
15020
15027
  self.log_remote_encoder = log_remote_encoder if log_remote_encoder is not None else ''
15021
15028
  '''
15022
- The Organization's remote log encryption encoder.
15029
+ The Organization's remote log encryption encoder, one of the LogRemoteEncoder constants.
15023
15030
  '''
15024
15031
  self.log_socket_path = log_socket_path if log_socket_path is not None else ''
15025
15032
  '''
@@ -15035,7 +15042,7 @@ class Organization:
15035
15042
  '''
15036
15043
  self.mfa_provider = mfa_provider if mfa_provider is not None else ''
15037
15044
  '''
15038
- The Organization's multi-factor authentication provider, if enabled.
15045
+ The Organization's multi-factor authentication provider, one of the MFAProvider constants.
15039
15046
  '''
15040
15047
  self.name = name if name is not None else ''
15041
15048
  '''
@@ -15051,7 +15058,7 @@ class Organization:
15051
15058
  '''
15052
15059
  self.scim_provider = scim_provider if scim_provider is not None else ''
15053
15060
  '''
15054
- The Organization's SCIM provider.
15061
+ The Organization's SCIM provider, one of the SCIMProvider constants.
15055
15062
  '''
15056
15063
  self.sensitive_label = sensitive_label if sensitive_label is not None else ''
15057
15064
  '''
@@ -15086,6 +15093,8 @@ class Organization:
15086
15093
  return '<sdm.Organization ' + \
15087
15094
  'auth_provider: ' + repr(self.auth_provider) + ' ' +\
15088
15095
  'created_at: ' + repr(self.created_at) + ' ' +\
15096
+ 'device_trust_enabled: ' + repr(self.device_trust_enabled) + ' ' +\
15097
+ 'device_trust_provider: ' + repr(self.device_trust_provider) + ' ' +\
15089
15098
  'idle_timeout: ' + repr(self.idle_timeout) + ' ' +\
15090
15099
  'idle_timeout_enabled: ' + repr(self.idle_timeout_enabled) + ' ' +\
15091
15100
  'kind: ' + repr(self.kind) + ' ' +\
@@ -15114,6 +15123,8 @@ class Organization:
15114
15123
  return {
15115
15124
  'auth_provider': self.auth_provider,
15116
15125
  'created_at': self.created_at,
15126
+ 'device_trust_enabled': self.device_trust_enabled,
15127
+ 'device_trust_provider': self.device_trust_provider,
15117
15128
  'idle_timeout': self.idle_timeout,
15118
15129
  'idle_timeout_enabled': self.idle_timeout_enabled,
15119
15130
  'kind': self.kind,
@@ -15145,6 +15156,8 @@ class Organization:
15145
15156
  return cls(
15146
15157
  auth_provider=d.get('auth_provider'),
15147
15158
  created_at=d.get('created_at'),
15159
+ device_trust_enabled=d.get('device_trust_enabled'),
15160
+ device_trust_provider=d.get('device_trust_provider'),
15148
15161
  idle_timeout=d.get('idle_timeout'),
15149
15162
  idle_timeout_enabled=d.get('idle_timeout_enabled'),
15150
15163
  kind=d.get('kind'),
@@ -16687,7 +16700,7 @@ class QueryCapture:
16687
16700
  '''
16688
16701
  self.type = type if type is not None else ''
16689
16702
  '''
16690
- The CaptureType of this query capture.
16703
+ The CaptureType of this query capture, one of the CaptureType constants.
16691
16704
  '''
16692
16705
  self.width = width if width is not None else 0
16693
16706
  '''
@@ -17926,9 +17939,7 @@ class Relay:
17926
17939
  '''
17927
17940
  self.state = state if state is not None else ''
17928
17941
  '''
17929
- The current state of the relay. One of: "new", "verifying_restart",
17930
- "awaiting_restart", "restarting", "started", "stopped", "dead",
17931
- "unknown".
17942
+ The current state of the relay, one of the NodeState constants.
17932
17943
  '''
17933
17944
  self.tags = tags if tags is not None else _porcelain_zero_value_tags()
17934
17945
  '''
@@ -20507,6 +20518,169 @@ class SSHCustomerKey:
20507
20518
  )
20508
20519
 
20509
20520
 
20521
+ class SSHPassword:
20522
+ '''
20523
+ SSHPassword is currently unstable, and its API may change, or it may be removed,
20524
+ without a major version bump.
20525
+ '''
20526
+ __slots__ = [
20527
+ 'allow_deprecated_key_exchanges',
20528
+ 'bind_interface',
20529
+ 'egress_filter',
20530
+ 'healthy',
20531
+ 'hostname',
20532
+ 'id',
20533
+ 'name',
20534
+ 'password',
20535
+ 'port',
20536
+ 'port_forwarding',
20537
+ 'port_override',
20538
+ 'secret_store_id',
20539
+ 'subdomain',
20540
+ 'tags',
20541
+ 'username',
20542
+ ]
20543
+
20544
+ def __init__(
20545
+ self,
20546
+ allow_deprecated_key_exchanges=None,
20547
+ bind_interface=None,
20548
+ egress_filter=None,
20549
+ healthy=None,
20550
+ hostname=None,
20551
+ id=None,
20552
+ name=None,
20553
+ password=None,
20554
+ port=None,
20555
+ port_forwarding=None,
20556
+ port_override=None,
20557
+ secret_store_id=None,
20558
+ subdomain=None,
20559
+ tags=None,
20560
+ username=None,
20561
+ ):
20562
+ self.allow_deprecated_key_exchanges = allow_deprecated_key_exchanges if allow_deprecated_key_exchanges is not None else False
20563
+ '''
20564
+ Whether deprecated, insecure key exchanges are allowed for use to connect to the target ssh server.
20565
+ '''
20566
+ self.bind_interface = bind_interface if bind_interface is not None else ''
20567
+ '''
20568
+ The bind interface is the IP address to which the port override of a resource is bound (for example, 127.0.0.1). It is automatically generated if not provided.
20569
+ '''
20570
+ self.egress_filter = egress_filter if egress_filter is not None else ''
20571
+ '''
20572
+ A filter applied to the routing logic to pin datasource to nodes.
20573
+ '''
20574
+ self.healthy = healthy if healthy is not None else False
20575
+ '''
20576
+ True if the datasource is reachable and the credentials are valid.
20577
+ '''
20578
+ self.hostname = hostname if hostname is not None else ''
20579
+ '''
20580
+ The host to dial to initiate a connection from the egress node to this resource.
20581
+ '''
20582
+ self.id = id if id is not None else ''
20583
+ '''
20584
+ Unique identifier of the Resource.
20585
+ '''
20586
+ self.name = name if name is not None else ''
20587
+ '''
20588
+ Unique human-readable name of the Resource.
20589
+ '''
20590
+ self.password = password if password is not None else ''
20591
+ '''
20592
+ The password to authenticate with.
20593
+ '''
20594
+ self.port = port if port is not None else 0
20595
+ '''
20596
+ The port to dial to initiate a connection from the egress node to this resource.
20597
+ '''
20598
+ self.port_forwarding = port_forwarding if port_forwarding is not None else False
20599
+ '''
20600
+ Whether port forwarding is allowed through this server.
20601
+ '''
20602
+ self.port_override = port_override if port_override is not None else 0
20603
+ '''
20604
+ The local port used by clients to connect to this resource.
20605
+ '''
20606
+ self.secret_store_id = secret_store_id if secret_store_id is not None else ''
20607
+ '''
20608
+ ID of the secret store containing credentials for this resource, if any.
20609
+ '''
20610
+ self.subdomain = subdomain if subdomain is not None else ''
20611
+ '''
20612
+ Subdomain is the local DNS address. (e.g. app-prod1 turns into app-prod1.your-org-name.sdm.network)
20613
+ '''
20614
+ self.tags = tags if tags is not None else _porcelain_zero_value_tags()
20615
+ '''
20616
+ Tags is a map of key, value pairs.
20617
+ '''
20618
+ self.username = username if username is not None else ''
20619
+ '''
20620
+ The username to authenticate with.
20621
+ '''
20622
+
20623
+ def __repr__(self):
20624
+ return '<sdm.SSHPassword ' + \
20625
+ 'allow_deprecated_key_exchanges: ' + repr(self.allow_deprecated_key_exchanges) + ' ' +\
20626
+ 'bind_interface: ' + repr(self.bind_interface) + ' ' +\
20627
+ 'egress_filter: ' + repr(self.egress_filter) + ' ' +\
20628
+ 'healthy: ' + repr(self.healthy) + ' ' +\
20629
+ 'hostname: ' + repr(self.hostname) + ' ' +\
20630
+ 'id: ' + repr(self.id) + ' ' +\
20631
+ 'name: ' + repr(self.name) + ' ' +\
20632
+ 'password: ' + repr(self.password) + ' ' +\
20633
+ 'port: ' + repr(self.port) + ' ' +\
20634
+ 'port_forwarding: ' + repr(self.port_forwarding) + ' ' +\
20635
+ 'port_override: ' + repr(self.port_override) + ' ' +\
20636
+ 'secret_store_id: ' + repr(self.secret_store_id) + ' ' +\
20637
+ 'subdomain: ' + repr(self.subdomain) + ' ' +\
20638
+ 'tags: ' + repr(self.tags) + ' ' +\
20639
+ 'username: ' + repr(self.username) + ' ' +\
20640
+ '>'
20641
+
20642
+ def to_dict(self):
20643
+ return {
20644
+ 'allow_deprecated_key_exchanges':
20645
+ self.allow_deprecated_key_exchanges,
20646
+ 'bind_interface': self.bind_interface,
20647
+ 'egress_filter': self.egress_filter,
20648
+ 'healthy': self.healthy,
20649
+ 'hostname': self.hostname,
20650
+ 'id': self.id,
20651
+ 'name': self.name,
20652
+ 'password': self.password,
20653
+ 'port': self.port,
20654
+ 'port_forwarding': self.port_forwarding,
20655
+ 'port_override': self.port_override,
20656
+ 'secret_store_id': self.secret_store_id,
20657
+ 'subdomain': self.subdomain,
20658
+ 'tags': self.tags,
20659
+ 'username': self.username,
20660
+ }
20661
+
20662
+ @classmethod
20663
+ def from_dict(cls, d):
20664
+ return cls(
20665
+ allow_deprecated_key_exchanges=d.get(
20666
+ 'allow_deprecated_key_exchanges'),
20667
+ bind_interface=d.get('bind_interface'),
20668
+ egress_filter=d.get('egress_filter'),
20669
+ healthy=d.get('healthy'),
20670
+ hostname=d.get('hostname'),
20671
+ id=d.get('id'),
20672
+ name=d.get('name'),
20673
+ password=d.get('password'),
20674
+ port=d.get('port'),
20675
+ port_forwarding=d.get('port_forwarding'),
20676
+ port_override=d.get('port_override'),
20677
+ secret_store_id=d.get('secret_store_id'),
20678
+ subdomain=d.get('subdomain'),
20679
+ tags=d.get('tags'),
20680
+ username=d.get('username'),
20681
+ )
20682
+
20683
+
20510
20684
  class SecretStoreCreateResponse:
20511
20685
  '''
20512
20686
  SecretStoreCreateResponse reports how the SecretStores were created in the system.
@@ -26,13 +26,13 @@ from google.protobuf import symbol_database as _symbol_database
26
26
  _sym_db = _symbol_database.Default()
27
27
 
28
28
 
29
- from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2
30
29
  from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
30
+ from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2
31
31
  from . import options_pb2 as options__pb2
32
32
  from . import spec_pb2 as spec__pb2
33
33
 
34
34
 
35
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1aorganization_history.proto\x12\x02v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\roptions.proto\x1a\nspec.proto\"\x8d\x01\n\x1eOrganizationHistoryListRequest\x12%\n\x04meta\x18\x01 \x01(\x0b\x32\x17.v1.ListRequestMetadata\x12\x1a\n\x06\x66ilter\x18\x02 \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01:(\xfa\xf8\xb3\x07\x06\xd2\xf3\xb3\x07\x01*\xfa\xf8\xb3\x07\x18\xd2\xf3\xb3\x07\x13!terraform-provider\"\x88\x02\n\x1fOrganizationHistoryListResponse\x12&\n\x04meta\x18\x01 \x01(\x0b\x32\x18.v1.ListResponseMetadata\x12:\n\x07history\x18\x02 \x03(\x0b\x32\x1d.v1.OrganizationHistoryRecordB\n\xf2\xf8\xb3\x07\x05\xb8\xf3\xb3\x07\x01\x12W\n\nrate_limit\x18\x03 \x01(\x0b\x32\x15.v1.RateLimitMetadataB,\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\xf2\xf8\xb3\x07\x06\xb2\xf4\xb3\x07\x01*\xf2\xf8\xb3\x07\x12\xb2\xf4\xb3\x07\r!json_gateway:(\xfa\xf8\xb3\x07\x06\xd2\xf3\xb3\x07\x01*\xfa\xf8\xb3\x07\x18\xd2\xf3\xb3\x07\x13!terraform-provider\"\xdf\x01\n\x19OrganizationHistoryRecord\x12\x1f\n\x0b\x61\x63tivity_id\x18\x01 \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12\x39\n\ttimestamp\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12\x32\n\x0corganization\x18\x03 \x01(\x0b\x32\x10.v1.OrganizationB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01:2\xfa\xf8\xb3\x07\x05\xa8\xf3\xb3\x07\x01\xfa\xf8\xb3\x07\x06\xd2\xf3\xb3\x07\x01*\xfa\xf8\xb3\x07\x18\xd2\xf3\xb3\x07\x13!terraform-provider\"\xf4\n\n\x0cOrganization\x12\x18\n\x04name\x18\x01 \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12:\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12:\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12!\n\rauth_provider\x18\x04 \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12(\n\x14idle_timeout_enabled\x18\x05 \x01(\x08\x42\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12;\n\x0cidle_timeout\x18\x06 \x01(\x0b\x32\x19.google.protobuf.DurationB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12+\n\x17session_timeout_enabled\x18\x07 \x01(\x08\x42\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12>\n\x0fsession_timeout\x18\x08 \x01(\x0b\x32\x19.google.protobuf.DurationB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12\x39\n\x0bmfa_enabled\x18\t \x01(\x08\x42$\xf2\xf8\xb3\x07\x1f\xb0\xf3\xb3\x07\x01\xca\xf3\xb3\x07\x15\xc2\xf4\xb3\x07\x10\n\x02go\x12\nMFAEnabled\x12;\n\x0cmfa_provider\x18\n \x01(\tB%\xf2\xf8\xb3\x07 \xb0\xf3\xb3\x07\x01\xca\xf3\xb3\x07\x16\xc2\xf4\xb3\x07\x11\n\x02go\x12\x0bMFAProvider\x12&\n\x12log_remote_encoder\x18\x0b \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12%\n\x11log_local_storage\x18\x0c \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12%\n\x11log_local_encoder\x18\r \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12$\n\x10log_local_format\x18\x0e \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12@\n\x0flog_tcp_address\x18\x0f \x01(\tB\'\xf2\xf8\xb3\x07\"\xb0\xf3\xb3\x07\x01\xca\xf3\xb3\x07\x18\xc2\xf4\xb3\x07\x13\n\x02go\x12\rLogTCPAddress\x12#\n\x0flog_socket_path\x18\x10 \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12=\n\rscim_provider\x18\x11 \x01(\tB&\xf2\xf8\xb3\x07!\xb0\xf3\xb3\x07\x01\xca\xf3\xb3\x07\x17\xc2\xf4\xb3\x07\x12\n\x02go\x12\x0cSCIMProvider\x12&\n\x12websites_subdomain\x18\x12 \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12h\n$ssh_certificate_authority_public_key\x18\x13 \x01(\tB:\xf2\xf8\xb3\x07\x35\xb0\xf3\xb3\x07\x01\xca\xf3\xb3\x07+\xc2\xf4\xb3\x07&\n\x02go\x12 SSHCertificateAuthorityPublicKey\x12\x84\x01\n$ssh_certificate_authority_updated_at\x18\x14 \x01(\x0b\x32\x1a.google.protobuf.TimestampB:\xf2\xf8\xb3\x07\x35\xb0\xf3\xb3\x07\x01\xca\xf3\xb3\x07+\xc2\xf4\xb3\x07&\n\x02go\x12 SSHCertificateAuthorityUpdatedAt\x12(\n\x14require_secret_store\x18\x15 \x01(\x08\x42\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12#\n\x0fsensitive_label\x18\x16 \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12\x44\n\x11saml_metadata_url\x18\x17 \x01(\tB)\xf2\xf8\xb3\x07$\xb0\xf3\xb3\x07\x01\xca\xf3\xb3\x07\x1a\xc2\xf4\xb3\x07\x15\n\x02go\x12\x0fSAMLMetadataURL\x12\x18\n\x04kind\x18\x18 \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12%\n\x02id\x18\x19 \x01(\tB\x19\xf2\xf8\xb3\x07\x14\xb0\xf3\xb3\x07\x01\xb2\xf4\xb3\x07\ngo_private:2\xfa\xf8\xb3\x07\x05\xa8\xf3\xb3\x07\x01\xfa\xf8\xb3\x07\x06\xd2\xf3\xb3\x07\x01*\xfa\xf8\xb3\x07\x18\xd2\xf3\xb3\x07\x13!terraform-provider2\xef\x01\n\x13OrganizationHistory\x12\x80\x01\n\x04List\x12\".v1.OrganizationHistoryListRequest\x1a#.v1.OrganizationHistoryListResponse\"/\x82\xf9\xb3\x07\x08\xa2\xf3\xb3\x07\x03get\x82\xf9\xb3\x07\x1d\xaa\xf3\xb3\x07\x18/v1/organization-history\x1aU\xca\xf9\xb3\x07\x1e\xc2\xf9\xb3\x07\x19OrganizationHistoryRecord\xca\xf9\xb3\x07\x05\xd8\xf9\xb3\x07\x01\xca\xf9\xb3\x07\x06\xca\xf9\xb3\x07\x01*\xca\xf9\xb3\x07\x18\xca\xf9\xb3\x07\x13!terraform-providerB\x97\x01\n\x19\x63om.strongdm.api.plumbingB\x1bOrganizationHistoryPlumbingZ5github.com/strongdm/strongdm-sdk-go/v3/internal/v1;v1\xc2\x92\xb4\x07\x06\xa2\x8c\xb4\x07\x01*\xc2\x92\xb4\x07\x18\xa2\x8c\xb4\x07\x13!terraform-providerb\x06proto3')
35
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1aorganization_history.proto\x12\x02v1\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\roptions.proto\x1a\nspec.proto\"\x8d\x01\n\x1eOrganizationHistoryListRequest\x12%\n\x04meta\x18\x01 \x01(\x0b\x32\x17.v1.ListRequestMetadata\x12\x1a\n\x06\x66ilter\x18\x02 \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01:(\xfa\xf8\xb3\x07\x06\xd2\xf3\xb3\x07\x01*\xfa\xf8\xb3\x07\x18\xd2\xf3\xb3\x07\x13!terraform-provider\"\x88\x02\n\x1fOrganizationHistoryListResponse\x12&\n\x04meta\x18\x01 \x01(\x0b\x32\x18.v1.ListResponseMetadata\x12:\n\x07history\x18\x02 \x03(\x0b\x32\x1d.v1.OrganizationHistoryRecordB\n\xf2\xf8\xb3\x07\x05\xb8\xf3\xb3\x07\x01\x12W\n\nrate_limit\x18\x03 \x01(\x0b\x32\x15.v1.RateLimitMetadataB,\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\xf2\xf8\xb3\x07\x06\xb2\xf4\xb3\x07\x01*\xf2\xf8\xb3\x07\x12\xb2\xf4\xb3\x07\r!json_gateway:(\xfa\xf8\xb3\x07\x06\xd2\xf3\xb3\x07\x01*\xfa\xf8\xb3\x07\x18\xd2\xf3\xb3\x07\x13!terraform-provider\"\xdf\x01\n\x19OrganizationHistoryRecord\x12\x1f\n\x0b\x61\x63tivity_id\x18\x01 \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12\x39\n\ttimestamp\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12\x32\n\x0corganization\x18\x03 \x01(\x0b\x32\x10.v1.OrganizationB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01:2\xfa\xf8\xb3\x07\x05\xa8\xf3\xb3\x07\x01\xfa\xf8\xb3\x07\x06\xd2\xf3\xb3\x07\x01*\xfa\xf8\xb3\x07\x18\xd2\xf3\xb3\x07\x13!terraform-provider\"\xfc\x0b\n\x0cOrganization\x12\x18\n\x04name\x18\x01 \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12:\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12:\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12!\n\rauth_provider\x18\x04 \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12(\n\x14idle_timeout_enabled\x18\x05 \x01(\x08\x42\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12;\n\x0cidle_timeout\x18\x06 \x01(\x0b\x32\x19.google.protobuf.DurationB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12+\n\x17session_timeout_enabled\x18\x07 \x01(\x08\x42\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12>\n\x0fsession_timeout\x18\x08 \x01(\x0b\x32\x19.google.protobuf.DurationB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12\x39\n\x0bmfa_enabled\x18\t \x01(\x08\x42$\xf2\xf8\xb3\x07\x1f\xb0\xf3\xb3\x07\x01\xca\xf3\xb3\x07\x15\xc2\xf4\xb3\x07\x10\n\x02go\x12\nMFAEnabled\x12;\n\x0cmfa_provider\x18\n \x01(\tB%\xf2\xf8\xb3\x07 \xb0\xf3\xb3\x07\x01\xca\xf3\xb3\x07\x16\xc2\xf4\xb3\x07\x11\n\x02go\x12\x0bMFAProvider\x12&\n\x12log_remote_encoder\x18\x0b \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12%\n\x11log_local_storage\x18\x0c \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12%\n\x11log_local_encoder\x18\r \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12$\n\x10log_local_format\x18\x0e \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12@\n\x0flog_tcp_address\x18\x0f \x01(\tB\'\xf2\xf8\xb3\x07\"\xb0\xf3\xb3\x07\x01\xca\xf3\xb3\x07\x18\xc2\xf4\xb3\x07\x13\n\x02go\x12\rLogTCPAddress\x12#\n\x0flog_socket_path\x18\x10 \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12=\n\rscim_provider\x18\x11 \x01(\tB&\xf2\xf8\xb3\x07!\xb0\xf3\xb3\x07\x01\xca\xf3\xb3\x07\x17\xc2\xf4\xb3\x07\x12\n\x02go\x12\x0cSCIMProvider\x12&\n\x12websites_subdomain\x18\x12 \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12h\n$ssh_certificate_authority_public_key\x18\x13 \x01(\tB:\xf2\xf8\xb3\x07\x35\xb0\xf3\xb3\x07\x01\xca\xf3\xb3\x07+\xc2\xf4\xb3\x07&\n\x02go\x12 SSHCertificateAuthorityPublicKey\x12\x84\x01\n$ssh_certificate_authority_updated_at\x18\x14 \x01(\x0b\x32\x1a.google.protobuf.TimestampB:\xf2\xf8\xb3\x07\x35\xb0\xf3\xb3\x07\x01\xca\xf3\xb3\x07+\xc2\xf4\xb3\x07&\n\x02go\x12 SSHCertificateAuthorityUpdatedAt\x12(\n\x14require_secret_store\x18\x15 \x01(\x08\x42\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12#\n\x0fsensitive_label\x18\x16 \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12\x44\n\x11saml_metadata_url\x18\x17 \x01(\tB)\xf2\xf8\xb3\x07$\xb0\xf3\xb3\x07\x01\xca\xf3\xb3\x07\x1a\xc2\xf4\xb3\x07\x15\n\x02go\x12\x0fSAMLMetadataURL\x12\x18\n\x04kind\x18\x18 \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12%\n\x02id\x18\x19 \x01(\tB\x19\xf2\xf8\xb3\x07\x14\xb0\xf3\xb3\x07\x01\xb2\xf4\xb3\x07\ngo_private\x12\x31\n\x0eloopback_range\x18\x1a \x01(\tB\x19\xf2\xf8\xb3\x07\x14\xb0\xf3\xb3\x07\x01\xb2\xf4\xb3\x07\ngo_private\x12(\n\x14\x64\x65vice_trust_enabled\x18\x1b \x01(\x08\x42\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12)\n\x15\x64\x65vice_trust_provider\x18\x1c \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01:2\xfa\xf8\xb3\x07\x05\xa8\xf3\xb3\x07\x01\xfa\xf8\xb3\x07\x06\xd2\xf3\xb3\x07\x01*\xfa\xf8\xb3\x07\x18\xd2\xf3\xb3\x07\x13!terraform-provider2\xef\x01\n\x13OrganizationHistory\x12\x80\x01\n\x04List\x12\".v1.OrganizationHistoryListRequest\x1a#.v1.OrganizationHistoryListResponse\"/\x82\xf9\xb3\x07\x08\xa2\xf3\xb3\x07\x03get\x82\xf9\xb3\x07\x1d\xaa\xf3\xb3\x07\x18/v1/organization-history\x1aU\xca\xf9\xb3\x07\x1e\xc2\xf9\xb3\x07\x19OrganizationHistoryRecord\xca\xf9\xb3\x07\x05\xd8\xf9\xb3\x07\x01\xca\xf9\xb3\x07\x06\xca\xf9\xb3\x07\x01*\xca\xf9\xb3\x07\x18\xca\xf9\xb3\x07\x13!terraform-providerB\x97\x01\n\x19\x63om.strongdm.api.plumbingB\x1bOrganizationHistoryPlumbingZ5github.com/strongdm/strongdm-sdk-go/v3/internal/v1;v1\xc2\x92\xb4\x07\x06\xa2\x8c\xb4\x07\x01*\xc2\x92\xb4\x07\x18\xa2\x8c\xb4\x07\x13!terraform-providerb\x06proto3')
36
36
 
37
37
 
38
38
 
@@ -141,6 +141,12 @@ if _descriptor._USE_C_DESCRIPTORS == False:
141
141
  _ORGANIZATION.fields_by_name['kind']._serialized_options = b'\362\370\263\007\005\260\363\263\007\001'
142
142
  _ORGANIZATION.fields_by_name['id']._options = None
143
143
  _ORGANIZATION.fields_by_name['id']._serialized_options = b'\362\370\263\007\024\260\363\263\007\001\262\364\263\007\ngo_private'
144
+ _ORGANIZATION.fields_by_name['loopback_range']._options = None
145
+ _ORGANIZATION.fields_by_name['loopback_range']._serialized_options = b'\362\370\263\007\024\260\363\263\007\001\262\364\263\007\ngo_private'
146
+ _ORGANIZATION.fields_by_name['device_trust_enabled']._options = None
147
+ _ORGANIZATION.fields_by_name['device_trust_enabled']._serialized_options = b'\362\370\263\007\005\260\363\263\007\001'
148
+ _ORGANIZATION.fields_by_name['device_trust_provider']._options = None
149
+ _ORGANIZATION.fields_by_name['device_trust_provider']._serialized_options = b'\362\370\263\007\005\260\363\263\007\001'
144
150
  _ORGANIZATION._options = None
145
151
  _ORGANIZATION._serialized_options = b'\372\370\263\007\005\250\363\263\007\001\372\370\263\007\006\322\363\263\007\001*\372\370\263\007\030\322\363\263\007\023!terraform-provider'
146
152
  _ORGANIZATIONHISTORY._options = None
@@ -154,7 +160,7 @@ if _descriptor._USE_C_DESCRIPTORS == False:
154
160
  _ORGANIZATIONHISTORYRECORD._serialized_start=538
155
161
  _ORGANIZATIONHISTORYRECORD._serialized_end=761
156
162
  _ORGANIZATION._serialized_start=764
157
- _ORGANIZATION._serialized_end=2160
158
- _ORGANIZATIONHISTORY._serialized_start=2163
159
- _ORGANIZATIONHISTORY._serialized_end=2402
163
+ _ORGANIZATION._serialized_end=2296
164
+ _ORGANIZATIONHISTORY._serialized_start=2299
165
+ _ORGANIZATIONHISTORY._serialized_end=2538
160
166
  # @@protoc_insertion_point(module_scope)
@@ -6997,6 +6997,8 @@ def convert_organization_to_porcelain(plumbing):
6997
6997
  porcelain = models.Organization()
6998
6998
  porcelain.auth_provider = (plumbing.auth_provider)
6999
6999
  porcelain.created_at = convert_timestamp_to_porcelain(plumbing.created_at)
7000
+ porcelain.device_trust_enabled = (plumbing.device_trust_enabled)
7001
+ porcelain.device_trust_provider = (plumbing.device_trust_provider)
7000
7002
  porcelain.idle_timeout = convert_duration_to_porcelain(
7001
7003
  plumbing.idle_timeout)
7002
7004
  porcelain.idle_timeout_enabled = (plumbing.idle_timeout_enabled)
@@ -7033,6 +7035,8 @@ def convert_organization_to_plumbing(porcelain):
7033
7035
  plumbing.auth_provider = (porcelain.auth_provider)
7034
7036
  plumbing.created_at.CopyFrom(
7035
7037
  convert_timestamp_to_plumbing(porcelain.created_at))
7038
+ plumbing.device_trust_enabled = (porcelain.device_trust_enabled)
7039
+ plumbing.device_trust_provider = (porcelain.device_trust_provider)
7036
7040
  plumbing.idle_timeout.CopyFrom(
7037
7041
  convert_duration_to_plumbing(porcelain.idle_timeout))
7038
7042
  plumbing.idle_timeout_enabled = (porcelain.idle_timeout_enabled)
@@ -9073,6 +9077,9 @@ def convert_resource_to_plumbing(porcelain):
9073
9077
  if isinstance(porcelain, models.SSHCustomerKey):
9074
9078
  plumbing.ssh_customer_key.CopyFrom(
9075
9079
  convert_ssh_customer_key_to_plumbing(porcelain))
9080
+ if isinstance(porcelain, models.SSHPassword):
9081
+ plumbing.ssh_password.CopyFrom(
9082
+ convert_ssh_password_to_plumbing(porcelain))
9076
9083
  if isinstance(porcelain, models.Sybase):
9077
9084
  plumbing.sybase.CopyFrom(convert_sybase_to_plumbing(porcelain))
9078
9085
  if isinstance(porcelain, models.SybaseIQ):
@@ -9272,6 +9279,8 @@ def convert_resource_to_porcelain(plumbing):
9272
9279
  return convert_ssh_cert_to_porcelain(plumbing.ssh_cert)
9273
9280
  if plumbing.HasField('ssh_customer_key'):
9274
9281
  return convert_ssh_customer_key_to_porcelain(plumbing.ssh_customer_key)
9282
+ if plumbing.HasField('ssh_password'):
9283
+ return convert_ssh_password_to_porcelain(plumbing.ssh_password)
9275
9284
  if plumbing.HasField('sybase'):
9276
9285
  return convert_sybase_to_porcelain(plumbing.sybase)
9277
9286
  if plumbing.HasField('sybase_iq'):
@@ -10220,6 +10229,64 @@ def convert_repeated_ssh_customer_key_to_porcelain(plumbings):
10220
10229
  ]
10221
10230
 
10222
10231
 
10232
+ def convert_ssh_password_to_porcelain(plumbing):
10233
+ if plumbing is None:
10234
+ return None
10235
+ porcelain = models.SSHPassword()
10236
+ porcelain.allow_deprecated_key_exchanges = (
10237
+ plumbing.allow_deprecated_key_exchanges)
10238
+ porcelain.bind_interface = (plumbing.bind_interface)
10239
+ porcelain.egress_filter = (plumbing.egress_filter)
10240
+ porcelain.healthy = (plumbing.healthy)
10241
+ porcelain.hostname = (plumbing.hostname)
10242
+ porcelain.id = (plumbing.id)
10243
+ porcelain.name = (plumbing.name)
10244
+ porcelain.password = (plumbing.password)
10245
+ porcelain.port = (plumbing.port)
10246
+ porcelain.port_forwarding = (plumbing.port_forwarding)
10247
+ porcelain.port_override = (plumbing.port_override)
10248
+ porcelain.secret_store_id = (plumbing.secret_store_id)
10249
+ porcelain.subdomain = (plumbing.subdomain)
10250
+ porcelain.tags = convert_tags_to_porcelain(plumbing.tags)
10251
+ porcelain.username = (plumbing.username)
10252
+ return porcelain
10253
+
10254
+
10255
+ def convert_ssh_password_to_plumbing(porcelain):
10256
+ plumbing = SSHPassword()
10257
+ if porcelain is None:
10258
+ return plumbing
10259
+ plumbing.allow_deprecated_key_exchanges = (
10260
+ porcelain.allow_deprecated_key_exchanges)
10261
+ plumbing.bind_interface = (porcelain.bind_interface)
10262
+ plumbing.egress_filter = (porcelain.egress_filter)
10263
+ plumbing.healthy = (porcelain.healthy)
10264
+ plumbing.hostname = (porcelain.hostname)
10265
+ plumbing.id = (porcelain.id)
10266
+ plumbing.name = (porcelain.name)
10267
+ plumbing.password = (porcelain.password)
10268
+ plumbing.port = (porcelain.port)
10269
+ plumbing.port_forwarding = (porcelain.port_forwarding)
10270
+ plumbing.port_override = (porcelain.port_override)
10271
+ plumbing.secret_store_id = (porcelain.secret_store_id)
10272
+ plumbing.subdomain = (porcelain.subdomain)
10273
+ plumbing.tags.CopyFrom(convert_tags_to_plumbing(porcelain.tags))
10274
+ plumbing.username = (porcelain.username)
10275
+ return plumbing
10276
+
10277
+
10278
+ def convert_repeated_ssh_password_to_plumbing(porcelains):
10279
+ return [
10280
+ convert_ssh_password_to_plumbing(porcelain) for porcelain in porcelains
10281
+ ]
10282
+
10283
+
10284
+ def convert_repeated_ssh_password_to_porcelain(plumbings):
10285
+ return [
10286
+ convert_ssh_password_to_porcelain(plumbing) for plumbing in plumbings
10287
+ ]
10288
+
10289
+
10223
10290
  def convert_secret_store_to_plumbing(porcelain):
10224
10291
  plumbing = SecretStore()
10225
10292
  if porcelain is None:
@@ -30,7 +30,7 @@ from . import options_pb2 as options__pb2
30
30
  from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
31
31
 
32
32
 
33
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\nspec.proto\x12\x02v1\x1a\roptions.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"<\n\x12\x41lreadyExistsError\x12\x1a\n\x06\x65ntity\x18\x01 \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01:\n\xfa\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x06\"7\n\rNotFoundError\x12\x1a\n\x06\x65ntity\x18\x01 \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01:\n\xfa\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x05\"\x1d\n\x0f\x42\x61\x64RequestError:\n\xfa\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x03\"!\n\x13\x41uthenticationError:\n\xfa\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x10\"\x1d\n\x0fPermissionError:\n\xfa\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x07\"\x1b\n\rInternalError:\n\xfa\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\r\"u\n\x0eRateLimitError\x12W\n\nrate_limit\x18\x01 \x01(\x0b\x32\x15.v1.RateLimitMetadataB,\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\xf2\xf8\xb3\x07\x06\xb2\xf4\xb3\x07\x01*\xf2\xf8\xb3\x07\x12\xb2\xf4\xb3\x07\r!json_gateway:\n\xfa\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x08\"\x17\n\x15\x43reateRequestMetadata\"$\n\x16\x43reateResponseMetadata:\n\xfa\xf8\xb3\x07\x05\xa8\xf3\xb3\x07\x01\"E\n\x12GetRequestMetadata\x12/\n\x0bsnapshot_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"!\n\x13GetResponseMetadata:\n\xfa\xf8\xb3\x07\x05\xa8\xf3\xb3\x07\x01\"\x17\n\x15UpdateRequestMetadata\"$\n\x16UpdateResponseMetadata:\n\xfa\xf8\xb3\x07\x05\xa8\xf3\xb3\x07\x01\"\x17\n\x15\x44\x65leteRequestMetadata\"$\n\x16\x44\x65leteResponseMetadata:\n\xfa\xf8\xb3\x07\x05\xa8\xf3\xb3\x07\x01\"\x85\x01\n\x13ListRequestMetadata\x12\x0e\n\x06\x63ursor\x18\x01 \x01(\t\x12\x0c\n\x04page\x18\x02 \x01(\x05\x12\r\n\x05limit\x18\x03 \x01(\x05\x12\x10\n\x08order_by\x18\x04 \x01(\t\x12/\n\x0bsnapshot_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\":\n\x14ListResponseMetadata\x12\x13\n\x0bnext_cursor\x18\x01 \x01(\t\x12\r\n\x05total\x18\x02 \x01(\x05\"\xaf\x01\n\x11RateLimitMetadata\x12\x19\n\x05limit\x18\x01 \x01(\x03\x42\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12\x1d\n\tremaining\x18\x02 \x01(\x03\x42\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12\x38\n\x08reset_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12\x1a\n\x06\x62ucket\x18\x04 \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01:\n\xfa\xf8\xb3\x07\x05\xa8\xf3\xb3\x07\x01\"\x18\n\x16GenericRequestMetadata\"\x19\n\x17GenericResponseMetadataBR\n\x19\x63om.strongdm.api.plumbingZ5github.com/strongdm/strongdm-sdk-go/v3/internal/v1;v1b\x06proto3')
33
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\nspec.proto\x12\x02v1\x1a\roptions.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"<\n\x12\x41lreadyExistsError\x12\x1a\n\x06\x65ntity\x18\x01 \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01:\n\xfa\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x06\"7\n\rNotFoundError\x12\x1a\n\x06\x65ntity\x18\x01 \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01:\n\xfa\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x05\"\x1d\n\x0f\x42\x61\x64RequestError:\n\xfa\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x03\"!\n\x13\x41uthenticationError:\n\xfa\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x10\"\x1d\n\x0fPermissionError:\n\xfa\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x07\"\x1b\n\rInternalError:\n\xfa\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\r\"u\n\x0eRateLimitError\x12W\n\nrate_limit\x18\x01 \x01(\x0b\x32\x15.v1.RateLimitMetadataB,\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\xf2\xf8\xb3\x07\x06\xb2\xf4\xb3\x07\x01*\xf2\xf8\xb3\x07\x12\xb2\xf4\xb3\x07\r!json_gateway:\n\xfa\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x08\"\x17\n\x15\x43reateRequestMetadata\"$\n\x16\x43reateResponseMetadata:\n\xfa\xf8\xb3\x07\x05\xa8\xf3\xb3\x07\x01\"E\n\x12GetRequestMetadata\x12/\n\x0bsnapshot_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"!\n\x13GetResponseMetadata:\n\xfa\xf8\xb3\x07\x05\xa8\xf3\xb3\x07\x01\"\x17\n\x15UpdateRequestMetadata\"$\n\x16UpdateResponseMetadata:\n\xfa\xf8\xb3\x07\x05\xa8\xf3\xb3\x07\x01\"\x17\n\x15\x44\x65leteRequestMetadata\"$\n\x16\x44\x65leteResponseMetadata:\n\xfa\xf8\xb3\x07\x05\xa8\xf3\xb3\x07\x01\"\x85\x01\n\x13ListRequestMetadata\x12\x0e\n\x06\x63ursor\x18\x01 \x01(\t\x12\x0c\n\x04page\x18\x02 \x01(\x05\x12\r\n\x05limit\x18\x03 \x01(\x05\x12\x10\n\x08order_by\x18\x04 \x01(\t\x12/\n\x0bsnapshot_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\">\n\x14ListResponseMetadata\x12\x13\n\x0bnext_cursor\x18\x01 \x01(\t\x12\x11\n\x05total\x18\x02 \x01(\x05\x42\x02\x18\x01\"\xaf\x01\n\x11RateLimitMetadata\x12\x19\n\x05limit\x18\x01 \x01(\x03\x42\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12\x1d\n\tremaining\x18\x02 \x01(\x03\x42\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12\x38\n\x08reset_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12\x1a\n\x06\x62ucket\x18\x04 \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01:\n\xfa\xf8\xb3\x07\x05\xa8\xf3\xb3\x07\x01\"\x18\n\x16GenericRequestMetadata\"\x19\n\x17GenericResponseMetadataBR\n\x19\x63om.strongdm.api.plumbingZ5github.com/strongdm/strongdm-sdk-go/v3/internal/v1;v1b\x06proto3')
34
34
 
35
35
 
36
36
 
@@ -226,6 +226,8 @@ if _descriptor._USE_C_DESCRIPTORS == False:
226
226
  _UPDATERESPONSEMETADATA._serialized_options = b'\372\370\263\007\005\250\363\263\007\001'
227
227
  _DELETERESPONSEMETADATA._options = None
228
228
  _DELETERESPONSEMETADATA._serialized_options = b'\372\370\263\007\005\250\363\263\007\001'
229
+ _LISTRESPONSEMETADATA.fields_by_name['total']._options = None
230
+ _LISTRESPONSEMETADATA.fields_by_name['total']._serialized_options = b'\030\001'
229
231
  _RATELIMITMETADATA.fields_by_name['limit']._options = None
230
232
  _RATELIMITMETADATA.fields_by_name['limit']._serialized_options = b'\362\370\263\007\005\260\363\263\007\001'
231
233
  _RATELIMITMETADATA.fields_by_name['remaining']._options = None
@@ -269,11 +271,11 @@ if _descriptor._USE_C_DESCRIPTORS == False:
269
271
  _LISTREQUESTMETADATA._serialized_start=726
270
272
  _LISTREQUESTMETADATA._serialized_end=859
271
273
  _LISTRESPONSEMETADATA._serialized_start=861
272
- _LISTRESPONSEMETADATA._serialized_end=919
273
- _RATELIMITMETADATA._serialized_start=922
274
- _RATELIMITMETADATA._serialized_end=1097
275
- _GENERICREQUESTMETADATA._serialized_start=1099
276
- _GENERICREQUESTMETADATA._serialized_end=1123
277
- _GENERICRESPONSEMETADATA._serialized_start=1125
278
- _GENERICRESPONSEMETADATA._serialized_end=1150
274
+ _LISTRESPONSEMETADATA._serialized_end=923
275
+ _RATELIMITMETADATA._serialized_start=926
276
+ _RATELIMITMETADATA._serialized_end=1101
277
+ _GENERICREQUESTMETADATA._serialized_start=1103
278
+ _GENERICREQUESTMETADATA._serialized_end=1127
279
+ _GENERICRESPONSEMETADATA._serialized_start=1129
280
+ _GENERICRESPONSEMETADATA._serialized_end=1154
279
281
  # @@protoc_insertion_point(module_scope)
@@ -4060,6 +4060,7 @@ class Resources:
4060
4060
  `strongdm.models.SSH`
4061
4061
  `strongdm.models.SSHCert`
4062
4062
  `strongdm.models.SSHCustomerKey`
4063
+ `strongdm.models.SSHPassword`
4063
4064
  `strongdm.models.Sybase`
4064
4065
  `strongdm.models.SybaseIQ`
4065
4066
  `strongdm.models.Teradata`
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: strongdm
3
- Version: 9.4.0
3
+ Version: 9.6.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/v9.4.0.tar.gz
9
+ Download-URL: https://github.com/strongdm/strongdm-sdk-python/archive/v9.6.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
File without changes
File without changes
File without changes
File without changes