eclinical-requester 1.0.12__tar.gz → 1.0.14__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.
Files changed (74) hide show
  1. {eclinical_requester-1.0.12/src/eclinical_requester.egg-info → eclinical_requester-1.0.14}/PKG-INFO +1 -1
  2. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/__init__.py +1 -1
  3. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/http/authorize_ediary.py +1 -1
  4. eclinical_requester-1.0.14/src/api_requester/utils/decrypt.py +40 -0
  5. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14/src/eclinical_requester.egg-info}/PKG-INFO +1 -1
  6. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/eclinical_requester.egg-info/SOURCES.txt +1 -0
  7. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/tests/test_api_requester.py +19 -0
  8. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/LICENSE +0 -0
  9. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/MANIFEST.in +0 -0
  10. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/README.md +0 -0
  11. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/pyproject.toml +0 -0
  12. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/setup.cfg +0 -0
  13. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/setup.py +0 -0
  14. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/__init__.py +0 -0
  15. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/admin/__init__.py +0 -0
  16. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/admin/api/__init__.py +0 -0
  17. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/admin/api/auth_api.py +0 -0
  18. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/admin/api/ecoa_auth_api.py +0 -0
  19. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/admin/api/subject_auth_api.py +0 -0
  20. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/admin/api/user_on_board_application_api.py +0 -0
  21. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/admin/dto/__init__.py +0 -0
  22. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/admin/dto/cross_user_user_on_board_dto.py +0 -0
  23. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/admin/dto/ecoa_onboard_request_dto.py +0 -0
  24. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/admin/dto/jwt_authentication_request.py +0 -0
  25. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/admin/dto/reset_password_email_request_dto.py +0 -0
  26. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/admin/dto/sso_token_retrieve_dto.py +0 -0
  27. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/admin/dto/subject_jwt_authentication_request.py +0 -0
  28. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/admin/dto/user_on_board_dto.py +0 -0
  29. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/admin/service/__init__.py +0 -0
  30. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/admin/service/auth_service.py +0 -0
  31. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/admin/service/ecoa_auth_service.py +0 -0
  32. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/admin/service/impl/__init__.py +0 -0
  33. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/admin/service/impl/system_env_service_impl.py +0 -0
  34. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/admin/service/impl/user_on_board_application_service_impl.py +0 -0
  35. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/admin/service/subject_auth_service.py +0 -0
  36. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/admin/service/user_on_board_application_service.py +0 -0
  37. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/call_api.py +0 -0
  38. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/common/__init__.py +0 -0
  39. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/common/api/__init__.py +0 -0
  40. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/common/api/ecoa_auth_api.py +0 -0
  41. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/common/api/subject_auth_api.py +0 -0
  42. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/common/api/system_env_api.py +0 -0
  43. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/common/dto/portal_login_t_ime.py +0 -0
  44. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/common/service/__init__.py +0 -0
  45. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/common/service/ecoa_auth_service.py +0 -0
  46. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/common/service/subject_auth_service.py +0 -0
  47. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/core/common/service/system_env_service.py +0 -0
  48. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/docs/application.yaml +0 -0
  49. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/dto/__init__.py +0 -0
  50. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/dto/base_dto.py +0 -0
  51. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/dto/biz_base.py +0 -0
  52. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/dto/user.py +0 -0
  53. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/http/__init__.py +0 -0
  54. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/http/app_url.py +0 -0
  55. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/http/authorize.py +0 -0
  56. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/http/authorize_ecoa.py +0 -0
  57. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/http/eclinical_requests.py +0 -0
  58. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/http/exceptions.py +0 -0
  59. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/http/gateway.py +0 -0
  60. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/http/sample_headers.py +0 -0
  61. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/http/token_manager.py +0 -0
  62. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/utils/__init__.py +0 -0
  63. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/utils/constant.py +0 -0
  64. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/utils/json_utils.py +0 -0
  65. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/utils/lib.py +0 -0
  66. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/utils/logger.py +0 -0
  67. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/utils/path.py +0 -0
  68. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/utils/placeholder_replacer.py +0 -0
  69. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/utils/read_file.py +0 -0
  70. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/utils/rsa.py +0 -0
  71. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/api_requester/utils/time_utils.py +0 -0
  72. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/eclinical_requester.egg-info/dependency_links.txt +0 -0
  73. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/eclinical_requester.egg-info/requires.txt +0 -0
  74. {eclinical_requester-1.0.12 → eclinical_requester-1.0.14}/src/eclinical_requester.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: eclinical_requester
3
- Version: 1.0.12
3
+ Version: 1.0.14
4
4
  Summary: edetek api requester
5
5
  Home-page: http://example.com
6
6
  Author: xiaodong.li
@@ -6,4 +6,4 @@
6
6
  @Description: Description
7
7
  @File: __init__.py.py
8
8
  """
9
- __version__ = "1.0.12"
9
+ __version__ = "1.0.14"
@@ -46,7 +46,7 @@ class AuthorizeEdiary(BizBase, AdminSubjectAuthService, CommonSubjectAuthService
46
46
  self.time_mills = time.time()
47
47
  encrypt_pwd = encrypt_password(self.user.password)
48
48
  jwt_authentication_request_dto = SubjectJwtAuthenticationRequest(
49
- self.user.username, encrypt_pwd, self.user.org_code)
49
+ self.user.username, encrypt_pwd, organizationCode=self.user.org_code or None)
50
50
  response = self.auth_subject_login(jwt_authentication_request_dto)
51
51
  if response is None:
52
52
  raise Exception(f"LoginParams failed: {response}")
@@ -0,0 +1,40 @@
1
+ # !/usr/bin/python3
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ @Author: xiaodong.li
5
+ @Time: 5/22/2025 4:57 PM
6
+ @Description: Description
7
+ @File: decrypt.py
8
+ """
9
+ import base64
10
+ import re
11
+
12
+ from Crypto.Cipher import AES
13
+
14
+
15
+ def decrypt(str_base64: str, is_no_padding: bool = False) -> str:
16
+ key = b'1234567890123456'
17
+ iv = b'1234567890123456'
18
+
19
+ # Base64 解码
20
+ ciphertext = base64.b64decode(str_base64)
21
+
22
+ # 创建 AES 解密器
23
+ mode = AES.MODE_CBC
24
+ cipher = AES.new(key, mode, iv=iv)
25
+
26
+ # 解密
27
+ decrypted = cipher.decrypt(ciphertext)
28
+
29
+ if not is_no_padding:
30
+ # 去除 PKCS#7 padding
31
+ pad_len = decrypted[-1]
32
+ decrypted = decrypted[:-pad_len]
33
+
34
+ # 转成字符串(UTF-8 解码)
35
+ decrypted_str = decrypted.decode('utf-8', errors='replace')
36
+
37
+ # 替换不可见字符(与 JS 中 replace(/[\u0000-\u001F\u007F-\u009F]/g, ' ') 等效)
38
+ cleaned_str = re.sub(r'[\x00-\x1F\x7F-\x9F]', ' ', decrypted_str)
39
+
40
+ return cleaned_str
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: eclinical_requester
3
- Version: 1.0.12
3
+ Version: 1.0.14
4
4
  Summary: edetek api requester
5
5
  Home-page: http://example.com
6
6
  Author: xiaodong.li
@@ -55,6 +55,7 @@ src/api_requester/http/sample_headers.py
55
55
  src/api_requester/http/token_manager.py
56
56
  src/api_requester/utils/__init__.py
57
57
  src/api_requester/utils/constant.py
58
+ src/api_requester/utils/decrypt.py
58
59
  src/api_requester/utils/json_utils.py
59
60
  src/api_requester/utils/lib.py
60
61
  src/api_requester/utils/logger.py
@@ -6,10 +6,12 @@
6
6
  @Description: Description
7
7
  @File: test_api_requester.py
8
8
  """
9
+ import json
9
10
  import unittest
10
11
 
11
12
  from api_requester.core.call_api import ApiRequester
12
13
  from api_requester.utils.constant import AppEnum, EdcAppType
14
+ from api_requester.utils.decrypt import decrypt
13
15
 
14
16
 
15
17
  class TestApiRequester(unittest.TestCase):
@@ -41,3 +43,20 @@ class TestApiRequester(unittest.TestCase):
41
43
  c.login()
42
44
  response = c.request("get", "/study/information")
43
45
  assert response.json().get("payload").get("name") == "Study-113-963"
46
+
47
+ @staticmethod
48
+ def test_ediary_login_with_no_org_code():
49
+ c = ApiRequester("76548847", "340196", app=AppEnum.EDC.code, test_env="dev01", ttype=EdcAppType.EDIARY.name, org_code="")
50
+ c.login()
51
+ response = c.request("get", "/study/information")
52
+ assert response.json().get("payload").get("name") == "Study-113-963"
53
+
54
+ @staticmethod
55
+ def test_ediary_data_with_org_code():
56
+ c = ApiRequester("76548847", "340196", app=AppEnum.EDC.code, test_env="dev01", ttype=EdcAppType.EDIARY.name,
57
+ org_code="62B64A")
58
+ c.login()
59
+ response = c.request("post", "/e-diary-app/offline/subject-version")
60
+ payload = response.json().get("payload")
61
+ node = decrypt(payload, is_no_padding=True)
62
+ print(json.loads(node))