Skip to content

Commit 692b93b

Browse files
author
wallisyan
committed
modify credentials
1 parent 965e896 commit 692b93b

File tree

14 files changed

+480
-105
lines changed

14 files changed

+480
-105
lines changed

aliyun-python-sdk-core/alibabacloud/client.py

Lines changed: 39 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,9 @@ class ClientConfig:
5252
"""
5353
处理client级别的所有的参数
5454
"""
55-
ENV_NAME_FOR_CONFIG_FILE = 'ALIBABA_CLOUD_CONFIG_FILE'
56-
DEFAULT_NAME_FOR_CONFIG_FILE = ['/etc/.alibabacloud/config',
57-
'~/.alibabacloud/config']
5855

59-
def __init__(self, access_key_id=None, access_key_secret=None, region_id=None,
56+
def __init__(self, access_key_id=None, access_key_secret=None, bearer_token=None,
57+
secret_token=None, region_id=None,
6058
enable_retry_policy=None, max_retry_times=None, user_agent=None,
6159
extra_user_agent=None, enable_https=None, http_port=None, https_port=None,
6260
connection_timeout=None, read_timeout=None, enable_http_debug=None,
@@ -65,6 +63,9 @@ def __init__(self, access_key_id=None, access_key_secret=None, region_id=None,
6563

6664
self.access_key_id = access_key_id
6765
self.access_key_secret = access_key_secret
66+
self.secret_token = secret_token
67+
self.bearer_token = bearer_token
68+
6869
self.region_id = region_id
6970
self.enable_retry_policy = enable_retry_policy
7071
self.max_retry_times = max_retry_times
@@ -96,22 +97,25 @@ def read_from_env(self):
9697
# setattr(self, item.lower(), os.environ.get(item) or os.environ.get(item.lower()))
9798

9899
def read_from_profile(self):
100+
ENV_NAME_FOR_CONFIG_FILE = 'ALIBABA_CLOUD_CONFIG_FILE'
101+
DEFAULT_NAME_FOR_CONFIG_FILE = ['/etc/.alibabacloud/config',
102+
'~/.alibabacloud/config']
99103
# TODO read from profile
100104
from alibabacloud.utils.ini_helper import load_config
101105
profile = {}
102106
loaded_config = {}
103107
if self.config_file is None:
104-
if self.ENV_NAME_FOR_CONFIG_FILE in os.environ:
108+
if ENV_NAME_FOR_CONFIG_FILE in os.environ:
105109

106-
env_config_file_path = os.environ.get(self.ENV_NAME_FOR_CONFIG_FILE)
110+
env_config_file_path = os.environ.get(ENV_NAME_FOR_CONFIG_FILE)
107111
if env_config_file_path is None or len(env_config_file_path) == 0:
108112
# 默认配置不存在
109113
return None
110114
full_path = os.path.expanduser(env_config_file_path)
111115
loaded_config = load_config(full_path)
112116
profile = loaded_config.get(self.profile_name, {})
113117
else:
114-
potential_locations = self.DEFAULT_NAME_FOR_CONFIG_FILE
118+
potential_locations = DEFAULT_NAME_FOR_CONFIG_FILE
115119
for filename in potential_locations:
116120
try:
117121
loaded_config = load_config(filename)
@@ -135,9 +139,9 @@ def read_from_default(self):
135139

136140

137141
def get_merged_client_config(config):
138-
config.read_from_env()
139-
config.read_from_profile()
140-
config.read_from_default()
142+
# config.read_from_env()
143+
# config.read_from_profile()
144+
# config.read_from_default()
141145
return config
142146

143147

@@ -157,6 +161,9 @@ def __init__(self, client_config, credentials_provider=DefaultCredentialsProvide
157161

158162
def handle_request(self, api_request, request_handlers=None, context=None):
159163
# TODO handle different types of request
164+
from aliyunsdkcore.request import CommonRequest
165+
if isinstance(api_request, CommonRequest):
166+
api_request.trans_to_acs_request()
160167
self.product_code = api_request.get_product()
161168
self.location_service_code = api_request.get_location_service_code()
162169
self.location_endpoint_type = api_request.get_location_endpoint_type()
@@ -171,6 +178,8 @@ def handle_request(self, api_request, request_handlers=None, context=None):
171178
context.location_service_code = self.location_service_code
172179
context.location_endpoint_type = self.location_endpoint_type
173180
context.endpoint_resolver = self.endpoint_resolver
181+
# credentials 是和请求解耦的,从请求的流程来看,不应该放在handle当中
182+
context.credentials = self.get_credentials()
174183

175184
if not request_handlers:
176185
request_handlers = self.handlers
@@ -186,4 +195,23 @@ def handle_request(self, api_request, request_handlers=None, context=None):
186195
# request_handlers=request_handlers[i:],
187196
# context=context)
188197

189-
return context.response.text
198+
return context.response
199+
200+
def get_credentials(self):
201+
credentials_provider = self.credentials_provider({
202+
'access_key_id': self.config.access_key_id,
203+
'access_key_secret': self.config.access_key_secret,
204+
'secret_token': self.config.secret_token,
205+
'bearer_token': self.config.bearer_token,
206+
'profile_name': 'client5'
207+
})
208+
credentials = credentials_provider.load_credentials()
209+
if credentials is None:
210+
from aliyunsdkcore.acs_exception.exceptions import ClientException
211+
raise ClientException(
212+
'Credentials',
213+
'Unable to locate credentials.'
214+
)
215+
return credentials
216+
217+

aliyun-python-sdk-core/alibabacloud/credentials/credentials_provider.bak.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -218,32 +218,32 @@ def get_resolve_func(self):
218218
def resolve_type_of_access_key(self):
219219
access_key_id = self.profile.get('access_key_id')
220220
access_key_secret = self.profile.get('access_key_secret')
221-
return AccessKeyCredential(access_key_id, access_key_secret)
221+
return AccessKeyCredentials(access_key_id, access_key_secret)
222222

223223
def resolve_type_of_ecs_ram_role(self):
224224
fetcher = InstanceMetadataFetcher(self.profile)
225225
profile = fetcher.get_profile()
226-
return SecurityCredential(profile)
226+
return SecurityCredentials(profile)
227227

228228
def resolve_type_of_ram_role_arn(self):
229229
fetcher = RamRoleArnFetcher(self.profile)
230230
profile = fetcher.get_profile()
231-
return SecurityCredential(profile)
231+
return SecurityCredentials(profile)
232232

233233
def resolve_type_of_rsa_key_pair(self):
234234
fetcher = RsaKeyPairFetcher(**self.profile)
235235
profile = fetcher.get_profile()
236-
return AccessKeyCredential(profile)
236+
return AccessKeyCredentials(profile)
237237

238238
def resolve_type_of_bearer_token(self):
239239
bearer_token = self.profile.get('bearer_token')
240-
return BearTokenCredential(bearer_token)
240+
return BearTokenCredentials(bearer_token)
241241

242242
def resolve_type_of_security_token(self):
243243
access_key_id = self.profile.get('access_key_id')
244244
access_key_secret = self.profile.get('access_key_secret')
245245
sts_token = self.profile.get('sts_token')
246-
return SecurityCredential(access_key_id, access_key_secret, sts_token)
246+
return SecurityCredentials(access_key_id, access_key_secret, sts_token)
247247

248248

249249
# load config
@@ -298,7 +298,7 @@ def fetch_credentials():
298298
raise ClientException(
299299
'Credentials',
300300
'Param access_key_secret can not be empty.')
301-
return AccessKeyCredential(
301+
return AccessKeyCredentials(
302302
access_key_id=access_key_id,
303303
access_key_secret=access_key_secret)
304304
elif public_key_id is not None and len(public_key_id) > 0:
@@ -362,7 +362,7 @@ def fetch_credentials():
362362
'Environment variable %s cannot be empty.' %
363363
self.ENV_NAME_FOR_ACCESS_KEY_SECRET)
364364

365-
credential = AccessKeyCredential(
365+
credential = AccessKeyCredentials(
366366
access_key_id=access_key_id,
367367
access_key_secret=access_key_secret)
368368
return credential
@@ -441,7 +441,7 @@ def load(self):
441441
role_name = meta_data
442442
fetcher = InstanceMetadataFetcher(role_name)
443443
profile = fetcher.get_profile()
444-
credentials = SecurityCredential(profile)
444+
credentials = SecurityCredentials(profile)
445445
return credentials
446446
else:
447447
return None

0 commit comments

Comments
 (0)