skyplatform-iam 1.0.5__py3-none-any.whl → 1.1.0__py3-none-any.whl
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.
- skyplatform_iam/__init__.py +73 -69
- skyplatform_iam/config.py +18 -173
- skyplatform_iam/connect_agenterra_iam.py +88 -127
- skyplatform_iam/middleware.py +31 -138
- {skyplatform_iam-1.0.5.dist-info → skyplatform_iam-1.1.0.dist-info}/METADATA +1 -1
- skyplatform_iam-1.1.0.dist-info/RECORD +8 -0
- skyplatform_iam/api.py +0 -366
- skyplatform_iam/global_manager.py +0 -272
- skyplatform_iam-1.0.5.dist-info/RECORD +0 -10
- {skyplatform_iam-1.0.5.dist-info → skyplatform_iam-1.1.0.dist-info}/WHEEL +0 -0
|
@@ -83,53 +83,6 @@ class ConnectAgenterraIam(object):
|
|
|
83
83
|
# 标记为已初始化
|
|
84
84
|
self._initialized = True
|
|
85
85
|
|
|
86
|
-
@classmethod
|
|
87
|
-
def get_instance(cls):
|
|
88
|
-
"""
|
|
89
|
-
获取已初始化的ConnectAgenterraIam单例实例
|
|
90
|
-
|
|
91
|
-
如果实例尚未初始化,会抛出异常提示用户先进行配置
|
|
92
|
-
这个方法通常在用户已经通过setup_auth()进行配置后使用
|
|
93
|
-
|
|
94
|
-
返回:
|
|
95
|
-
- ConnectAgenterraIam: 已初始化的单例实例
|
|
96
|
-
|
|
97
|
-
异常:
|
|
98
|
-
- RuntimeError: 当实例未初始化时抛出
|
|
99
|
-
"""
|
|
100
|
-
if cls._instance is None or not cls._initialized:
|
|
101
|
-
raise RuntimeError(
|
|
102
|
-
"ConnectAgenterraIam实例尚未初始化。请先使用以下方式之一进行配置:\n"
|
|
103
|
-
"1. 使用setup_auth()进行一键配置\n"
|
|
104
|
-
"2. 手动创建ConnectAgenterraIam实例:ConnectAgenterraIam(config=your_config)"
|
|
105
|
-
)
|
|
106
|
-
return cls._instance
|
|
107
|
-
|
|
108
|
-
@classmethod
|
|
109
|
-
def get_instance_lazy(cls):
|
|
110
|
-
"""
|
|
111
|
-
获取已初始化的单例实例(延迟模式)
|
|
112
|
-
|
|
113
|
-
此方法支持延迟初始化,当实例未初始化时返回 None 而不是抛出异常。
|
|
114
|
-
适用于在模块导入时需要获取实例但可能尚未初始化的场景。
|
|
115
|
-
|
|
116
|
-
返回:
|
|
117
|
-
- ConnectAgenterraIam: 已初始化的单例实例,如果未初始化则返回 None
|
|
118
|
-
"""
|
|
119
|
-
if cls._instance is None or not cls._initialized:
|
|
120
|
-
return None
|
|
121
|
-
return cls._instance
|
|
122
|
-
|
|
123
|
-
@classmethod
|
|
124
|
-
def is_initialized(cls):
|
|
125
|
-
"""
|
|
126
|
-
检查单例实例是否已初始化
|
|
127
|
-
|
|
128
|
-
返回:
|
|
129
|
-
- bool: 如果实例已初始化返回 True,否则返回 False
|
|
130
|
-
"""
|
|
131
|
-
return cls._instance is not None and cls._initialized
|
|
132
|
-
|
|
133
86
|
def reload_config(self, config):
|
|
134
87
|
"""
|
|
135
88
|
重新加载配置
|
|
@@ -236,7 +189,7 @@ class ConnectAgenterraIam(object):
|
|
|
236
189
|
self.logger.info(f"[{method_name}] 响应状态码: {response.status_code}")
|
|
237
190
|
self.logger.info(f"[{method_name}] 响应内容解析失败: {str(e)}")
|
|
238
191
|
|
|
239
|
-
def register(self, cred_type=None, cred_value=None, password=None, nickname=None, avatar_url=None,
|
|
192
|
+
def register(self, cred_type=None, cred_value=None, password=None, nickname=None, avatar_url=None,
|
|
240
193
|
username=None, phone=None):
|
|
241
194
|
"""
|
|
242
195
|
注册用户时,同步至iam
|
|
@@ -259,8 +212,9 @@ class ConnectAgenterraIam(object):
|
|
|
259
212
|
- 失败: 返回False
|
|
260
213
|
"""
|
|
261
214
|
method_name = "register"
|
|
262
|
-
self.logger.info(
|
|
263
|
-
|
|
215
|
+
self.logger.info(
|
|
216
|
+
f"[{method_name}] 开始用户注册 - cred_type: {cred_type}, cred_value: {self._mask_sensitive(str(cred_value))}")
|
|
217
|
+
|
|
264
218
|
try:
|
|
265
219
|
# 参数映射:支持旧的调用方式
|
|
266
220
|
if cred_type is None and cred_value is None:
|
|
@@ -296,10 +250,10 @@ class ConnectAgenterraIam(object):
|
|
|
296
250
|
|
|
297
251
|
uri = "/api/v2/service/register"
|
|
298
252
|
url = self.agenterra_iam_host + uri
|
|
299
|
-
|
|
253
|
+
|
|
300
254
|
# 记录请求信息
|
|
301
255
|
self._log_request(method_name, url, self.headers, body)
|
|
302
|
-
|
|
256
|
+
|
|
303
257
|
response = requests.post(
|
|
304
258
|
url=url,
|
|
305
259
|
headers=self.headers,
|
|
@@ -319,7 +273,7 @@ class ConnectAgenterraIam(object):
|
|
|
319
273
|
self.logger.warning(f"[{method_name}] 用户注册失败 - 响应: {result}")
|
|
320
274
|
else:
|
|
321
275
|
self.logger.warning(f"[{method_name}] 用户注册失败 - 状态码: {response.status_code}")
|
|
322
|
-
|
|
276
|
+
|
|
323
277
|
return False
|
|
324
278
|
except Exception as e:
|
|
325
279
|
self.logger.error(f"[{method_name}] 注册请求异常: {str(e)}")
|
|
@@ -327,7 +281,7 @@ class ConnectAgenterraIam(object):
|
|
|
327
281
|
return False
|
|
328
282
|
|
|
329
283
|
def login_with_password(self, cred_type=None, cred_value=None, password=None, ip_address=None, user_agent=None,
|
|
330
|
-
|
|
284
|
+
username=None):
|
|
331
285
|
"""
|
|
332
286
|
账号密码登陆时,同步至iam,由iam签发token
|
|
333
287
|
|
|
@@ -343,8 +297,9 @@ class ConnectAgenterraIam(object):
|
|
|
343
297
|
- password: 用户密码
|
|
344
298
|
"""
|
|
345
299
|
method_name = "login_with_password"
|
|
346
|
-
self.logger.info(
|
|
347
|
-
|
|
300
|
+
self.logger.info(
|
|
301
|
+
f"[{method_name}] 开始密码登录 - cred_type: {cred_type}, cred_value: {self._mask_sensitive(str(cred_value))}")
|
|
302
|
+
|
|
348
303
|
try:
|
|
349
304
|
# 参数映射:支持旧的调用方式
|
|
350
305
|
if cred_type is None and cred_value is None:
|
|
@@ -375,10 +330,10 @@ class ConnectAgenterraIam(object):
|
|
|
375
330
|
|
|
376
331
|
uri = "/api/v2/service/login"
|
|
377
332
|
url = self.agenterra_iam_host + uri
|
|
378
|
-
|
|
333
|
+
|
|
379
334
|
# 记录请求信息
|
|
380
335
|
self._log_request(method_name, url, self.headers, body)
|
|
381
|
-
|
|
336
|
+
|
|
382
337
|
response = requests.post(
|
|
383
338
|
url=url,
|
|
384
339
|
headers=self.headers,
|
|
@@ -394,7 +349,7 @@ class ConnectAgenterraIam(object):
|
|
|
394
349
|
return response
|
|
395
350
|
else:
|
|
396
351
|
self.logger.warning(f"[{method_name}] 密码登录失败 - 状态码: {response.status_code}")
|
|
397
|
-
|
|
352
|
+
|
|
398
353
|
return False
|
|
399
354
|
except Exception as e:
|
|
400
355
|
self.logger.error(f"[{method_name}] 密码登录请求异常: {str(e)}")
|
|
@@ -402,7 +357,7 @@ class ConnectAgenterraIam(object):
|
|
|
402
357
|
return False
|
|
403
358
|
|
|
404
359
|
def login_without_password(self, cred_type=None, cred_value=None, ip_address=None, user_agent=None,
|
|
405
|
-
|
|
360
|
+
username=None):
|
|
406
361
|
"""
|
|
407
362
|
短信验证码登陆时,机机接口请求token
|
|
408
363
|
|
|
@@ -418,8 +373,9 @@ class ConnectAgenterraIam(object):
|
|
|
418
373
|
返回: response对象或False
|
|
419
374
|
"""
|
|
420
375
|
method_name = "login_without_password"
|
|
421
|
-
self.logger.info(
|
|
422
|
-
|
|
376
|
+
self.logger.info(
|
|
377
|
+
f"[{method_name}] 开始免密登录 - cred_type: {cred_type}, cred_value: {self._mask_sensitive(str(cred_value))}")
|
|
378
|
+
|
|
423
379
|
try:
|
|
424
380
|
# 参数映射:支持旧的调用方式
|
|
425
381
|
if cred_type is None and cred_value is None:
|
|
@@ -449,10 +405,10 @@ class ConnectAgenterraIam(object):
|
|
|
449
405
|
|
|
450
406
|
uri = "/api/v2/service/login_without_password"
|
|
451
407
|
url = self.agenterra_iam_host + uri
|
|
452
|
-
|
|
408
|
+
|
|
453
409
|
# 记录请求信息
|
|
454
410
|
self._log_request(method_name, url, self.headers, body)
|
|
455
|
-
|
|
411
|
+
|
|
456
412
|
response = requests.post(
|
|
457
413
|
url=url,
|
|
458
414
|
headers=self.headers,
|
|
@@ -468,7 +424,7 @@ class ConnectAgenterraIam(object):
|
|
|
468
424
|
return response
|
|
469
425
|
else:
|
|
470
426
|
self.logger.warning(f"[{method_name}] 免密登录失败 - 状态码: {response.status_code}")
|
|
471
|
-
|
|
427
|
+
|
|
472
428
|
return False
|
|
473
429
|
except Exception as e:
|
|
474
430
|
self.logger.error(f"[{method_name}] 免密登录请求异常: {str(e)}")
|
|
@@ -483,7 +439,7 @@ class ConnectAgenterraIam(object):
|
|
|
483
439
|
"""
|
|
484
440
|
method_name = "logout"
|
|
485
441
|
self.logger.info(f"[{method_name}] 开始用户登出 - token: {self._mask_sensitive(token)}")
|
|
486
|
-
|
|
442
|
+
|
|
487
443
|
try:
|
|
488
444
|
body = {
|
|
489
445
|
"server_name": self.server_name,
|
|
@@ -492,7 +448,7 @@ class ConnectAgenterraIam(object):
|
|
|
492
448
|
}
|
|
493
449
|
uri = "/api/v2/service/logout"
|
|
494
450
|
url = self.agenterra_iam_host + uri
|
|
495
|
-
|
|
451
|
+
|
|
496
452
|
# 记录请求信息
|
|
497
453
|
self._log_request(method_name, url, self.headers, body)
|
|
498
454
|
|
|
@@ -511,7 +467,7 @@ class ConnectAgenterraIam(object):
|
|
|
511
467
|
return True
|
|
512
468
|
else:
|
|
513
469
|
self.logger.warning(f"[{method_name}] 用户登出失败 - 状态码: {response.status_code}")
|
|
514
|
-
|
|
470
|
+
|
|
515
471
|
return False
|
|
516
472
|
except Exception as e:
|
|
517
473
|
self.logger.error(f"[{method_name}] 登出请求异常: {str(e)}")
|
|
@@ -531,8 +487,9 @@ class ConnectAgenterraIam(object):
|
|
|
531
487
|
- token无效或其他错误: 返回None
|
|
532
488
|
"""
|
|
533
489
|
method_name = "verify_token"
|
|
534
|
-
self.logger.info(
|
|
535
|
-
|
|
490
|
+
self.logger.info(
|
|
491
|
+
f"[{method_name}] 开始token验证 - api: {api}, method: {method}, token: {self._mask_sensitive(token)}")
|
|
492
|
+
|
|
536
493
|
try:
|
|
537
494
|
body = {
|
|
538
495
|
"server_name": self.server_name,
|
|
@@ -544,16 +501,16 @@ class ConnectAgenterraIam(object):
|
|
|
544
501
|
"server_sk": server_sk,
|
|
545
502
|
}
|
|
546
503
|
uri = "/api/v2/service/verify"
|
|
547
|
-
|
|
504
|
+
|
|
548
505
|
# 检查agenterra_iam_host是否为None
|
|
549
506
|
if self.agenterra_iam_host is None:
|
|
550
507
|
raise ValueError("AGENTERRA_IAM_HOST 配置未设置或为空,请确保传入正确的AuthConfig对象")
|
|
551
|
-
|
|
508
|
+
|
|
552
509
|
url = self.agenterra_iam_host + uri
|
|
553
|
-
|
|
510
|
+
|
|
554
511
|
# 记录请求信息
|
|
555
512
|
self._log_request(method_name, url, self.headers, body)
|
|
556
|
-
|
|
513
|
+
|
|
557
514
|
response = requests.post(
|
|
558
515
|
url=url,
|
|
559
516
|
headers=self.headers,
|
|
@@ -577,7 +534,8 @@ class ConnectAgenterraIam(object):
|
|
|
577
534
|
"microservice": result.get("microservice"),
|
|
578
535
|
"is_whitelist": result.get("is_whitelist", False)
|
|
579
536
|
}
|
|
580
|
-
self.logger.info(
|
|
537
|
+
self.logger.info(
|
|
538
|
+
f"[{method_name}] token验证成功,用户有权限 - user_id: {user_info.get('user_id')}")
|
|
581
539
|
return user_info
|
|
582
540
|
else:
|
|
583
541
|
# token有效但无权限,抛出403异常
|
|
@@ -587,7 +545,8 @@ class ConnectAgenterraIam(object):
|
|
|
587
545
|
detail=result.get("message", "用户无权限访问此API")
|
|
588
546
|
)
|
|
589
547
|
else:
|
|
590
|
-
self.logger.warning(
|
|
548
|
+
self.logger.warning(
|
|
549
|
+
f"[{method_name}] token验证失败 - success: {result.get('success')}, valid: {result.get('valid')}")
|
|
591
550
|
|
|
592
551
|
elif response.status_code == 403:
|
|
593
552
|
result = response.json()
|
|
@@ -623,11 +582,11 @@ class ConnectAgenterraIam(object):
|
|
|
623
582
|
"""
|
|
624
583
|
method_name = "reset_password"
|
|
625
584
|
self.logger.info(f"[{method_name}] 开始重置密码 - user_id: {user_id}")
|
|
626
|
-
|
|
585
|
+
|
|
627
586
|
# 记录旧参数格式的使用
|
|
628
587
|
if username or password:
|
|
629
588
|
self.logger.debug(f"[{method_name}] 检测到旧参数格式 - username: {username}")
|
|
630
|
-
|
|
589
|
+
|
|
631
590
|
try:
|
|
632
591
|
# 参数映射:支持旧的调用方式
|
|
633
592
|
if user_id is None and new_password is None:
|
|
@@ -646,26 +605,26 @@ class ConnectAgenterraIam(object):
|
|
|
646
605
|
}
|
|
647
606
|
uri = "/api/v2/service/reset_password"
|
|
648
607
|
url = self.agenterra_iam_host + uri
|
|
649
|
-
|
|
608
|
+
|
|
650
609
|
# 记录请求信息
|
|
651
610
|
self._log_request(method_name, url, self.headers, body)
|
|
652
|
-
|
|
611
|
+
|
|
653
612
|
response = requests.post(
|
|
654
613
|
url=url,
|
|
655
614
|
headers=self.headers,
|
|
656
615
|
json=body,
|
|
657
616
|
verify=False
|
|
658
617
|
)
|
|
659
|
-
|
|
618
|
+
|
|
660
619
|
# 记录响应信息
|
|
661
620
|
self._log_response(method_name, response)
|
|
662
|
-
|
|
621
|
+
|
|
663
622
|
if response.status_code == 200:
|
|
664
623
|
self.logger.info(f"[{method_name}] 密码重置成功")
|
|
665
624
|
return True
|
|
666
625
|
else:
|
|
667
626
|
self.logger.warning(f"[{method_name}] 密码重置失败 - 状态码: {response.status_code}")
|
|
668
|
-
|
|
627
|
+
|
|
669
628
|
return False
|
|
670
629
|
except Exception as e:
|
|
671
630
|
self.logger.error(f"[{method_name}] 重置密码请求异常: {str(e)}")
|
|
@@ -683,7 +642,7 @@ class ConnectAgenterraIam(object):
|
|
|
683
642
|
"""
|
|
684
643
|
method_name = "refresh_token"
|
|
685
644
|
self.logger.info(f"[{method_name}] 开始刷新令牌 - refresh_token: {self._mask_sensitive(refresh_token)}")
|
|
686
|
-
|
|
645
|
+
|
|
687
646
|
try:
|
|
688
647
|
body = {
|
|
689
648
|
"server_name": self.server_name,
|
|
@@ -692,10 +651,10 @@ class ConnectAgenterraIam(object):
|
|
|
692
651
|
}
|
|
693
652
|
uri = "/api/v2/service/refresh_token"
|
|
694
653
|
url = self.agenterra_iam_host + uri
|
|
695
|
-
|
|
654
|
+
|
|
696
655
|
# 记录请求信息
|
|
697
656
|
self._log_request(method_name, url, self.headers, body)
|
|
698
|
-
|
|
657
|
+
|
|
699
658
|
response = requests.post(
|
|
700
659
|
url=url,
|
|
701
660
|
headers=self.headers,
|
|
@@ -711,7 +670,7 @@ class ConnectAgenterraIam(object):
|
|
|
711
670
|
return response
|
|
712
671
|
else:
|
|
713
672
|
self.logger.warning(f"[{method_name}] 令牌刷新失败 - 状态码: {response.status_code}")
|
|
714
|
-
|
|
673
|
+
|
|
715
674
|
return False
|
|
716
675
|
except Exception as e:
|
|
717
676
|
self.logger.error(f"[{method_name}] 刷新令牌请求异常: {str(e)}")
|
|
@@ -730,7 +689,7 @@ class ConnectAgenterraIam(object):
|
|
|
730
689
|
"""
|
|
731
690
|
method_name = "assign_role_to_user"
|
|
732
691
|
self.logger.info(f"[{method_name}] 开始角色分配 - user_id: {user_id}, role_id: {role_id}")
|
|
733
|
-
|
|
692
|
+
|
|
734
693
|
try:
|
|
735
694
|
body = {
|
|
736
695
|
"server_name": self.server_name,
|
|
@@ -740,10 +699,10 @@ class ConnectAgenterraIam(object):
|
|
|
740
699
|
}
|
|
741
700
|
uri = "/api/v2/service/assign_role"
|
|
742
701
|
url = self.agenterra_iam_host + uri
|
|
743
|
-
|
|
702
|
+
|
|
744
703
|
# 记录请求信息
|
|
745
704
|
self._log_request(method_name, url, self.headers, body)
|
|
746
|
-
|
|
705
|
+
|
|
747
706
|
response = requests.post(
|
|
748
707
|
url=url,
|
|
749
708
|
headers=self.headers,
|
|
@@ -759,7 +718,7 @@ class ConnectAgenterraIam(object):
|
|
|
759
718
|
return True
|
|
760
719
|
else:
|
|
761
720
|
self.logger.warning(f"[{method_name}] 角色分配失败 - 状态码: {response.status_code}")
|
|
762
|
-
|
|
721
|
+
|
|
763
722
|
return False
|
|
764
723
|
except Exception as e:
|
|
765
724
|
self.logger.error(f"[{method_name}] 角色分配请求异常: {str(e)}")
|
|
@@ -772,7 +731,7 @@ class ConnectAgenterraIam(object):
|
|
|
772
731
|
"""
|
|
773
732
|
method_name = "get_userinfo_by_token"
|
|
774
733
|
self.logger.info(f"[{method_name}] 开始获取用户信息 - token: {self._mask_sensitive(token)}")
|
|
775
|
-
|
|
734
|
+
|
|
776
735
|
try:
|
|
777
736
|
body = {
|
|
778
737
|
"server_name": self.server_name,
|
|
@@ -781,10 +740,10 @@ class ConnectAgenterraIam(object):
|
|
|
781
740
|
}
|
|
782
741
|
uri = "/api/v2/service/token"
|
|
783
742
|
url = self.agenterra_iam_host + uri
|
|
784
|
-
|
|
743
|
+
|
|
785
744
|
# 记录请求信息
|
|
786
745
|
self._log_request(method_name, url, self.headers, body)
|
|
787
|
-
|
|
746
|
+
|
|
788
747
|
response = requests.post(
|
|
789
748
|
url=url,
|
|
790
749
|
headers=self.headers,
|
|
@@ -800,7 +759,7 @@ class ConnectAgenterraIam(object):
|
|
|
800
759
|
return response
|
|
801
760
|
else:
|
|
802
761
|
self.logger.warning(f"[{method_name}] 获取用户信息失败 - 状态码: {response.status_code}")
|
|
803
|
-
|
|
762
|
+
|
|
804
763
|
return False
|
|
805
764
|
except Exception as e:
|
|
806
765
|
self.logger.error(f"[{method_name}] 获取用户信息请求异常: {str(e)}")
|
|
@@ -810,7 +769,7 @@ class ConnectAgenterraIam(object):
|
|
|
810
769
|
def add_custom_config(self, user_id, config_name, config_value=None):
|
|
811
770
|
"""
|
|
812
771
|
机机接口:添加用户自定义配置
|
|
813
|
-
|
|
772
|
+
|
|
814
773
|
为指定用户添加或更新自定义属性配置。
|
|
815
774
|
|
|
816
775
|
参数:
|
|
@@ -818,13 +777,13 @@ class ConnectAgenterraIam(object):
|
|
|
818
777
|
- config_name: 配置项名称
|
|
819
778
|
- config_value: 配置项值(可选)
|
|
820
779
|
|
|
821
|
-
返回:
|
|
780
|
+
返回:
|
|
822
781
|
- 成功: 返回响应对象
|
|
823
782
|
- 失败: 返回False
|
|
824
783
|
"""
|
|
825
784
|
method_name = "add_custom_config"
|
|
826
785
|
self.logger.info(f"[{method_name}] 开始添加用户自定义配置 - user_id: {user_id}, config_name: {config_name}")
|
|
827
|
-
|
|
786
|
+
|
|
828
787
|
try:
|
|
829
788
|
body = {
|
|
830
789
|
"server_name": self.server_name,
|
|
@@ -839,10 +798,10 @@ class ConnectAgenterraIam(object):
|
|
|
839
798
|
|
|
840
799
|
uri = "/api/v2/service/add_custom_config"
|
|
841
800
|
url = self.agenterra_iam_host + uri
|
|
842
|
-
|
|
801
|
+
|
|
843
802
|
# 记录请求信息
|
|
844
803
|
self._log_request(method_name, url, self.headers, body)
|
|
845
|
-
|
|
804
|
+
|
|
846
805
|
response = requests.post(
|
|
847
806
|
url=url,
|
|
848
807
|
headers=self.headers,
|
|
@@ -858,7 +817,7 @@ class ConnectAgenterraIam(object):
|
|
|
858
817
|
return response
|
|
859
818
|
else:
|
|
860
819
|
self.logger.warning(f"[{method_name}] 添加用户自定义配置失败 - 状态码: {response.status_code}")
|
|
861
|
-
|
|
820
|
+
|
|
862
821
|
return False
|
|
863
822
|
except Exception as e:
|
|
864
823
|
self.logger.error(f"[{method_name}] 添加用户自定义配置请求异常: {str(e)}")
|
|
@@ -868,19 +827,19 @@ class ConnectAgenterraIam(object):
|
|
|
868
827
|
def get_custom_configs(self, user_id):
|
|
869
828
|
"""
|
|
870
829
|
机机接口:获取用户自定义配置
|
|
871
|
-
|
|
830
|
+
|
|
872
831
|
获取指定用户的所有自定义属性配置。
|
|
873
832
|
|
|
874
833
|
参数:
|
|
875
834
|
- user_id: 用户ID
|
|
876
835
|
|
|
877
|
-
返回:
|
|
836
|
+
返回:
|
|
878
837
|
- 成功: 返回响应对象
|
|
879
838
|
- 失败: 返回False
|
|
880
839
|
"""
|
|
881
840
|
method_name = "get_custom_configs"
|
|
882
841
|
self.logger.info(f"[{method_name}] 开始获取用户自定义配置 - user_id: {user_id}")
|
|
883
|
-
|
|
842
|
+
|
|
884
843
|
try:
|
|
885
844
|
body = {
|
|
886
845
|
"server_name": self.server_name,
|
|
@@ -890,10 +849,10 @@ class ConnectAgenterraIam(object):
|
|
|
890
849
|
|
|
891
850
|
uri = "/api/v2/service/get_custom_configs"
|
|
892
851
|
url = self.agenterra_iam_host + uri
|
|
893
|
-
|
|
852
|
+
|
|
894
853
|
# 记录请求信息
|
|
895
854
|
self._log_request(method_name, url, self.headers, body)
|
|
896
|
-
|
|
855
|
+
|
|
897
856
|
response = requests.post(
|
|
898
857
|
url=url,
|
|
899
858
|
headers=self.headers,
|
|
@@ -909,7 +868,7 @@ class ConnectAgenterraIam(object):
|
|
|
909
868
|
return response
|
|
910
869
|
else:
|
|
911
870
|
self.logger.warning(f"[{method_name}] 获取用户自定义配置失败 - 状态码: {response.status_code}")
|
|
912
|
-
|
|
871
|
+
|
|
913
872
|
return False
|
|
914
873
|
except Exception as e:
|
|
915
874
|
self.logger.error(f"[{method_name}] 获取用户自定义配置请求异常: {str(e)}")
|
|
@@ -919,20 +878,20 @@ class ConnectAgenterraIam(object):
|
|
|
919
878
|
def delete_custom_config(self, user_id, config_name):
|
|
920
879
|
"""
|
|
921
880
|
机机接口:删除用户自定义配置
|
|
922
|
-
|
|
881
|
+
|
|
923
882
|
删除指定用户的指定自定义属性配置。
|
|
924
883
|
|
|
925
884
|
参数:
|
|
926
885
|
- user_id: 用户ID
|
|
927
886
|
- config_name: 配置项名称
|
|
928
887
|
|
|
929
|
-
返回:
|
|
888
|
+
返回:
|
|
930
889
|
- 成功: 返回响应对象
|
|
931
890
|
- 失败: 返回False
|
|
932
891
|
"""
|
|
933
892
|
method_name = "delete_custom_config"
|
|
934
893
|
self.logger.info(f"[{method_name}] 开始删除用户自定义配置 - user_id: {user_id}, config_name: {config_name}")
|
|
935
|
-
|
|
894
|
+
|
|
936
895
|
try:
|
|
937
896
|
body = {
|
|
938
897
|
"server_name": self.server_name,
|
|
@@ -943,10 +902,10 @@ class ConnectAgenterraIam(object):
|
|
|
943
902
|
|
|
944
903
|
uri = "/api/v2/service/delete_custom_config"
|
|
945
904
|
url = self.agenterra_iam_host + uri
|
|
946
|
-
|
|
905
|
+
|
|
947
906
|
# 记录请求信息
|
|
948
907
|
self._log_request(method_name, url, self.headers, body)
|
|
949
|
-
|
|
908
|
+
|
|
950
909
|
response = requests.post(
|
|
951
910
|
url=url,
|
|
952
911
|
headers=self.headers,
|
|
@@ -962,7 +921,7 @@ class ConnectAgenterraIam(object):
|
|
|
962
921
|
return response
|
|
963
922
|
else:
|
|
964
923
|
self.logger.warning(f"[{method_name}] 删除用户自定义配置失败 - 状态码: {response.status_code}")
|
|
965
|
-
|
|
924
|
+
|
|
966
925
|
return False
|
|
967
926
|
except Exception as e:
|
|
968
927
|
self.logger.error(f"[{method_name}] 删除用户自定义配置请求异常: {str(e)}")
|
|
@@ -972,7 +931,7 @@ class ConnectAgenterraIam(object):
|
|
|
972
931
|
def merge_credential(self, target_user_id, cred_type, cred_value, merge_reason=None):
|
|
973
932
|
"""
|
|
974
933
|
机机接口:凭证合并
|
|
975
|
-
|
|
934
|
+
|
|
976
935
|
为第三方服务提供凭证合并功能,处理用户绑定新凭证时的账号合并场景。
|
|
977
936
|
例如用户先用账号密码注册,后续又绑定手机号时的账号合并需求。
|
|
978
937
|
|
|
@@ -982,13 +941,14 @@ class ConnectAgenterraIam(object):
|
|
|
982
941
|
- cred_value: 要绑定的凭证值
|
|
983
942
|
- merge_reason: 合并原因(可选)
|
|
984
943
|
|
|
985
|
-
返回:
|
|
944
|
+
返回:
|
|
986
945
|
- 成功: 返回响应对象
|
|
987
946
|
- 失败: 返回False
|
|
988
947
|
"""
|
|
989
948
|
method_name = "merge_credential"
|
|
990
|
-
self.logger.info(
|
|
991
|
-
|
|
949
|
+
self.logger.info(
|
|
950
|
+
f"[{method_name}] 开始凭证合并 - target_user_id: {target_user_id}, cred_type: {cred_type}, cred_value: {self._mask_sensitive(cred_value)}")
|
|
951
|
+
|
|
992
952
|
try:
|
|
993
953
|
# 验证凭证类型
|
|
994
954
|
if isinstance(cred_type, str):
|
|
@@ -1009,10 +969,10 @@ class ConnectAgenterraIam(object):
|
|
|
1009
969
|
|
|
1010
970
|
uri = "/api/v2/service/merge_credential"
|
|
1011
971
|
url = self.agenterra_iam_host + uri
|
|
1012
|
-
|
|
972
|
+
|
|
1013
973
|
# 记录请求信息
|
|
1014
974
|
self._log_request(method_name, url, self.headers, body)
|
|
1015
|
-
|
|
975
|
+
|
|
1016
976
|
response = requests.post(
|
|
1017
977
|
url=url,
|
|
1018
978
|
headers=self.headers,
|
|
@@ -1028,7 +988,7 @@ class ConnectAgenterraIam(object):
|
|
|
1028
988
|
return response
|
|
1029
989
|
else:
|
|
1030
990
|
self.logger.warning(f"[{method_name}] 凭证合并失败 - 状态码: {response.status_code}")
|
|
1031
|
-
|
|
991
|
+
|
|
1032
992
|
return False
|
|
1033
993
|
except Exception as e:
|
|
1034
994
|
self.logger.error(f"[{method_name}] 凭证合并请求异常: {str(e)}")
|
|
@@ -1038,20 +998,21 @@ class ConnectAgenterraIam(object):
|
|
|
1038
998
|
def get_user_by_credential(self, cred_type, cred_value):
|
|
1039
999
|
"""
|
|
1040
1000
|
机机接口:通过凭证获取用户信息
|
|
1041
|
-
|
|
1001
|
+
|
|
1042
1002
|
为第三方服务提供通过用户名或手机号等认证凭据获取用户信息的功能。
|
|
1043
1003
|
|
|
1044
1004
|
参数:
|
|
1045
1005
|
- cred_type: 凭证类型 (CredentialTypeEnum: username, email, phone, wechat_openid)
|
|
1046
1006
|
- cred_value: 凭证值
|
|
1047
1007
|
|
|
1048
|
-
返回:
|
|
1008
|
+
返回:
|
|
1049
1009
|
- 成功: 返回响应对象
|
|
1050
1010
|
- 失败: 返回False
|
|
1051
1011
|
"""
|
|
1052
1012
|
method_name = "get_user_by_credential"
|
|
1053
|
-
self.logger.info(
|
|
1054
|
-
|
|
1013
|
+
self.logger.info(
|
|
1014
|
+
f"[{method_name}] 开始获取用户信息 - cred_type: {cred_type}, cred_value: {self._mask_sensitive(cred_value)}")
|
|
1015
|
+
|
|
1055
1016
|
try:
|
|
1056
1017
|
# 验证凭证类型
|
|
1057
1018
|
if isinstance(cred_type, str):
|
|
@@ -1066,10 +1027,10 @@ class ConnectAgenterraIam(object):
|
|
|
1066
1027
|
|
|
1067
1028
|
uri = "/api/v2/service/get_user_by_credential"
|
|
1068
1029
|
url = self.agenterra_iam_host + uri
|
|
1069
|
-
|
|
1030
|
+
|
|
1070
1031
|
# 记录请求信息
|
|
1071
1032
|
self._log_request(method_name, url, self.headers, body)
|
|
1072
|
-
|
|
1033
|
+
|
|
1073
1034
|
response = requests.post(
|
|
1074
1035
|
url=url,
|
|
1075
1036
|
headers=self.headers,
|
|
@@ -1085,7 +1046,7 @@ class ConnectAgenterraIam(object):
|
|
|
1085
1046
|
return response
|
|
1086
1047
|
else:
|
|
1087
1048
|
self.logger.warning(f"[{method_name}] 获取用户信息失败 - 状态码: {response.status_code}")
|
|
1088
|
-
|
|
1049
|
+
|
|
1089
1050
|
return False
|
|
1090
1051
|
except Exception as e:
|
|
1091
1052
|
self.logger.error(f"[{method_name}] 获取用户信息请求异常: {str(e)}")
|