11from functools import wraps
22
3- from alibabacloud_credentials import credentials , providers , models
3+ from alibabacloud_credentials_api import ICredentialsProvider
4+ from alibabacloud_credentials import credentials
5+ from alibabacloud_credentials .exceptions import CredentialException
6+ from alibabacloud_credentials .models import Config , CredentialModel
7+ from alibabacloud_credentials .http import HttpOptions
8+ from alibabacloud_credentials .provider import (StaticAKCredentialsProvider ,
9+ StaticSTSCredentialsProvider ,
10+ RamRoleArnCredentialsProvider ,
11+ OIDCRoleArnCredentialsProvider ,
12+ RsaKeyPairCredentialsProvider ,
13+ EcsRamRoleCredentialsProvider ,
14+ URLCredentialsProvider ,
15+ DefaultCredentialsProvider )
416from alibabacloud_credentials .utils import auth_constant as ac
517from Tea .decorators import deprecated
618
@@ -16,24 +28,85 @@ def i(*args, **kwargs):
1628 return i
1729
1830
31+ class _CredentialsProviderWrap :
32+
33+ def __init__ (self ,
34+ * ,
35+ type_name : str = None ,
36+ provider : ICredentialsProvider = None ):
37+ self .type_name = type_name
38+ self .provider = provider
39+
40+ def get_access_key_id (self ) -> str :
41+ credential = self .provider .get_credentials ()
42+ return credential .get_access_key_id ()
43+
44+ async def get_access_key_id_async (self ) -> str :
45+ credential = await self .provider .get_credentials_async ()
46+ return credential .get_access_key_id ()
47+
48+ def get_access_key_secret (self ) -> str :
49+ credential = self .provider .get_credentials ()
50+ return credential .get_access_key_secret ()
51+
52+ async def get_access_key_secret_async (self ) -> str :
53+ credential = await self .provider .get_credentials_async ()
54+ return credential .get_access_key_secret ()
55+
56+ def get_security_token (self ):
57+ credential = self .provider .get_credentials ()
58+ return credential .get_security_token ()
59+
60+ async def get_security_token_async (self ):
61+ credential = await self .provider .get_credentials_async ()
62+ return credential .get_security_token ()
63+
64+ def get_credential (self ) -> CredentialModel :
65+ credential = self .provider .get_credentials ()
66+ return CredentialModel (
67+ access_key_id = credential .get_access_key_id (),
68+ access_key_secret = credential .get_access_key_secret (),
69+ security_token = credential .get_security_token (),
70+ type = self .type_name ,
71+ provider_name = credential .get_provider_name (),
72+ )
73+
74+ async def get_credential_async (self ) -> CredentialModel :
75+ credential = await self .provider .get_credentials_async ()
76+ return CredentialModel (
77+ access_key_id = credential .get_access_key_id (),
78+ access_key_secret = credential .get_access_key_secret (),
79+ security_token = credential .get_security_token (),
80+ type = self .type_name ,
81+ provider_name = credential .get_provider_name (),
82+ )
83+
84+ def get_type (self ) -> str :
85+ return self .type_name
86+
87+
1988class Client :
2089 cloud_credential = None
2190
22- def __init__ (self , config = None ):
23- if config is None :
24- provider = providers .DefaultCredentialsProvider ()
25- self .cloud_credential = provider .get_credentials ()
26- return
27- self .cloud_credential = Client .get_credentials (config )
28-
29- def get_credential (self ) -> models .CredentialModel :
91+ def __init__ (self ,
92+ config : Config = None ,
93+ provider : ICredentialsProvider = None ):
94+ if provider is not None :
95+ self .cloud_credential = _CredentialsProviderWrap (provider = provider )
96+ elif config is None :
97+ provider = DefaultCredentialsProvider ()
98+ self .cloud_credential = _CredentialsProviderWrap (type_name = 'default' , provider = provider )
99+ else :
100+ self .cloud_credential = Client .get_credentials (config )
101+
102+ def get_credential (self ) -> CredentialModel :
30103 """
31104 Get credential
32105 @return: the whole credential
33106 """
34107 return self .cloud_credential .get_credential ()
35108
36- async def get_credential_async (self ) -> models . CredentialModel :
109+ async def get_credential_async (self ) -> CredentialModel :
37110 """
38111 Get credential
39112 @return: the whole credential
@@ -43,44 +116,99 @@ async def get_credential_async(self) -> models.CredentialModel:
43116 @staticmethod
44117 def get_credentials (config ):
45118 if config .type == ac .ACCESS_KEY :
46- return credentials .AccessKeyCredential (config .access_key_id , config .access_key_secret )
119+ provider = StaticAKCredentialsProvider (
120+ access_key_id = config .access_key_id ,
121+ access_key_secret = config .access_key_secret ,
122+ )
123+ return _CredentialsProviderWrap (type_name = 'access_key' , provider = provider )
47124 elif config .type == ac .STS :
48- return credentials .StsCredential (config .access_key_id , config .access_key_secret , config .security_token )
125+ provider = StaticSTSCredentialsProvider (
126+ access_key_id = config .access_key_id ,
127+ access_key_secret = config .access_key_secret ,
128+ security_token = config .security_token ,
129+ )
130+ return _CredentialsProviderWrap (type_name = 'sts' , provider = provider )
49131 elif config .type == ac .BEARER :
50132 return credentials .BearerTokenCredential (config .bearer_token )
51133 elif config .type == ac .ECS_RAM_ROLE :
52- return credentials .EcsRamRoleCredential (
53- config .access_key_id ,
54- config .access_key_secret ,
55- config .security_token ,
56- 0 ,
57- providers .EcsRamRoleCredentialProvider (config = config )
134+ provider = EcsRamRoleCredentialsProvider (
135+ role_name = config .role_name ,
136+ disable_imds_v1 = config .disable_imds_v1 ,
137+ http_options = HttpOptions (
138+ read_timeout = config .timeout ,
139+ connect_timeout = config .connect_timeout ,
140+ proxy = config .proxy ,
141+ ),
58142 )
143+ return _CredentialsProviderWrap (type_name = 'ecs_ram_role' , provider = provider )
59144 elif config .type == ac .CREDENTIALS_URI :
60- return credentials .CredentialsURICredential (config .credentials_uri )
145+ provider = URLCredentialsProvider (
146+ uri = config .credentials_uri ,
147+ http_options = HttpOptions (
148+ read_timeout = config .timeout ,
149+ connect_timeout = config .connect_timeout ,
150+ proxy = config .proxy ,
151+ ),
152+ )
153+ return _CredentialsProviderWrap (type_name = 'credentials_uri' , provider = provider )
61154 elif config .type == ac .RAM_ROLE_ARN :
62- return credentials .RamRoleArnCredential (
63- config .access_key_id ,
64- config .access_key_secret ,
65- config .security_token ,
66- 0 ,
67- providers .RamRoleArnCredentialProvider (config = config )
155+ if config .security_token is not None and config .security_token != '' :
156+ previous_provider = StaticSTSCredentialsProvider (
157+ access_key_id = config .access_key_id ,
158+ access_key_secret = config .access_key_secret ,
159+ security_token = config .security_token ,
160+ )
161+ else :
162+ previous_provider = StaticAKCredentialsProvider (
163+ access_key_id = config .access_key_id ,
164+ access_key_secret = config .access_key_secret ,
165+ )
166+ provider = RamRoleArnCredentialsProvider (
167+ credentials_provider = previous_provider ,
168+ role_arn = config .role_arn ,
169+ role_session_name = config .role_session_name ,
170+ duration_seconds = config .role_session_expiration ,
171+ policy = config .policy ,
172+ external_id = config .external_id ,
173+ sts_endpoint = config .sts_endpoint ,
174+ http_options = HttpOptions (
175+ read_timeout = config .timeout ,
176+ connect_timeout = config .connect_timeout ,
177+ proxy = config .proxy ,
178+ ),
68179 )
180+ return _CredentialsProviderWrap (type_name = 'ram_role_arn' , provider = provider )
69181 elif config .type == ac .RSA_KEY_PAIR :
70- return credentials .RsaKeyPairCredential (
71- config .access_key_id ,
72- config .access_key_secret ,
73- 0 ,
74- providers .RsaKeyPairCredentialProvider (config = config )
182+ provider = RsaKeyPairCredentialsProvider (
183+ public_key_id = config .public_key_id ,
184+ private_key_file = config .private_key_file ,
185+ duration_seconds = config .role_session_expiration ,
186+ sts_endpoint = config .sts_endpoint ,
187+ http_options = HttpOptions (
188+ read_timeout = config .timeout ,
189+ connect_timeout = config .connect_timeout ,
190+ proxy = config .proxy ,
191+ ),
75192 )
193+ return _CredentialsProviderWrap (type_name = 'rsa_key_pair' , provider = provider )
76194 elif config .type == ac .OIDC_ROLE_ARN :
77- return credentials .OIDCRoleArnCredential (
78- config .access_key_id ,
79- config .access_key_secret ,
80- config .security_token ,
81- 0 ,
82- providers .OIDCRoleArnCredentialProvider (config = config ))
83- return providers .DefaultCredentialsProvider ().get_credentials ()
195+ provider = OIDCRoleArnCredentialsProvider (
196+ role_arn = config .role_arn ,
197+ oidc_provider_arn = config .oidc_provider_arn ,
198+ oidc_token_file_path = config .oidc_token_file_path ,
199+ role_session_name = config .role_session_name ,
200+ duration_seconds = config .role_session_expiration ,
201+ policy = config .policy ,
202+ sts_endpoint = config .sts_endpoint ,
203+ http_options = HttpOptions (
204+ read_timeout = config .timeout ,
205+ connect_timeout = config .connect_timeout ,
206+ proxy = config .proxy ,
207+ ),
208+ )
209+ return _CredentialsProviderWrap (type_name = 'oidc_role_arn' , provider = provider )
210+ raise CredentialException (
211+ 'invalid type option, support: access_key, sts, bearer, ecs_ram_role, ram_role_arn, rsa_key_pair, oidc_role_arn, credentials_uri' )
84212
85213 @deprecated ("Use 'get_credential().access_key_id' instead" )
86214 def get_access_key_id (self ):
@@ -109,7 +237,7 @@ async def get_security_token_async(self):
109237 @deprecated ("Use 'get_credential().type' instead" )
110238 @attribute_error_return_none
111239 def get_type (self ):
112- return self .cloud_credential .credential_type
240+ return self .cloud_credential .get_type ()
113241
114242 @deprecated ("Use 'get_credential().bearer_token' instead" )
115243 @attribute_error_return_none
0 commit comments