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.
- {strongdm-15.41.0 → strongdm-15.43.0}/PKG-INFO +2 -2
- {strongdm-15.41.0 → strongdm-15.43.0}/setup.py +4 -4
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/client.py +132 -1
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/constants.py +1 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm.egg-info/PKG-INFO +2 -2
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm.egg-info/requires.txt +1 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/LICENSE +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/README.md +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/setup.cfg +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/__init__.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/access_request_events_history_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/access_request_events_history_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/access_requests_history_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/access_requests_history_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/access_requests_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/access_requests_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_attachments_history_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_attachments_history_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_attachments_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_attachments_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_grants_history_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_grants_history_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_grants_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_grants_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_permissions_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_permissions_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_resources_history_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_resources_history_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_resources_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/account_resources_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/accounts_groups_history_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/accounts_groups_history_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/accounts_groups_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/accounts_groups_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/accounts_history_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/accounts_history_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/accounts_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/accounts_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/activities_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/activities_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/approval_workflow_approvers_history_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/approval_workflow_approvers_history_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/approval_workflow_approvers_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/approval_workflow_approvers_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/approval_workflow_steps_history_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/approval_workflow_steps_history_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/approval_workflow_steps_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/approval_workflow_steps_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/approval_workflows_history_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/approval_workflows_history_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/approval_workflows_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/approval_workflows_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/control_panel_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/control_panel_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/discovery_connectors_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/discovery_connectors_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/drivers_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/drivers_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/errors.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/groups_history_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/groups_history_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/groups_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/groups_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/groups_roles_history_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/groups_roles_history_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/groups_roles_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/groups_roles_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/health_checks_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/health_checks_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/identity_aliases_history_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/identity_aliases_history_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/identity_aliases_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/identity_aliases_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/identity_sets_history_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/identity_sets_history_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/identity_sets_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/identity_sets_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/managed_secrets_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/managed_secrets_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/models.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/nodes_history_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/nodes_history_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/nodes_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/nodes_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/options_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/options_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/organization_history_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/organization_history_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/peering_group_nodes_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/peering_group_nodes_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/peering_group_peers_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/peering_group_peers_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/peering_group_resources_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/peering_group_resources_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/peering_groups_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/peering_groups_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/plumbing.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/policies_history_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/policies_history_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/policies_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/policies_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/proxy_cluster_keys_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/proxy_cluster_keys_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/queries_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/queries_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/remote_identities_history_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/remote_identities_history_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/remote_identities_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/remote_identities_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/remote_identity_groups_history_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/remote_identity_groups_history_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/remote_identity_groups_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/remote_identity_groups_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/replays_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/replays_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/resources_history_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/resources_history_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/resources_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/resources_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/role_resources_history_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/role_resources_history_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/role_resources_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/role_resources_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/roles_history_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/roles_history_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/roles_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/roles_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_engine_policy_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_engine_policy_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_engine_types_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_engine_types_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_engines_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_engines_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_store_healths_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_store_healths_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_store_types_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_store_types_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_stores_history_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_stores_history_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_stores_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/secret_stores_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/spec_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/spec_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/svc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/tags_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/tags_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/workflow_approvers_history_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/workflow_approvers_history_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/workflow_approvers_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/workflow_approvers_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/workflow_roles_history_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/workflow_roles_history_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/workflow_roles_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/workflow_roles_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/workflows_history_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/workflows_history_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/workflows_pb2.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm/workflows_pb2_grpc.py +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm.egg-info/SOURCES.txt +0 -0
- {strongdm-15.41.0 → strongdm-15.43.0}/strongdm.egg-info/dependency_links.txt +0 -0
- {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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
'
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{strongdm-15.41.0 → strongdm-15.43.0}/strongdm/approval_workflow_approvers_history_pb2_grpc.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|