sharedkernel 2.6.1__tar.gz → 2.6.3__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.
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/PKG-INFO +5 -1
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/README.md +4 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/setup.py +1 -1
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/config.py +2 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/ip_session_service.py +54 -3
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/logger/logger_service.py +2 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel.egg-info/PKG-INFO +5 -1
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/setup.cfg +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/common.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/data_format_converter.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/database/__init__.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/database/audit_model.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/database/distributed_cache.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/database/mongo_generic_audit_repository.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/database/mongo_generic_repository.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/database/mongo_health_checker.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/database/pagination_response_dto.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/date_converter.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/diff_utils.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/enum/__init__.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/enum/error_code.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/enum/redis_mode_enum.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/enum/sort_order.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/exception/__init__.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/exception/exception.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/exception/exception_handlers.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/file_validation.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/jwt_service.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/logger/log_decorator.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/logger/log_dto.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/logger/log_enums.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/logger/log_info.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/logger/log_middlewares.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/multipart_upload.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/normalizer/__init__.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/normalizer/number_normalizer.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/normalizer/phone_number_normalizer.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/normalizer/string_normalizer.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/objects/__init__.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/objects/base_document.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/objects/json_string_model.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/objects/jwt_model.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/objects/result.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/objects/user_info.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/regex_masking.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/s3_uploader.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/string_extentions.py +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel.egg-info/SOURCES.txt +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel.egg-info/dependency_links.txt +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel.egg-info/requires.txt +0 -0
- {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sharedkernel
|
|
3
|
-
Version: 2.6.
|
|
3
|
+
Version: 2.6.3
|
|
4
4
|
Summary: sharekernel is a shared package between all python projects
|
|
5
5
|
Author: Smilinno
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
@@ -31,6 +31,10 @@ Dynamic: summary
|
|
|
31
31
|
this is a shared kernel package
|
|
32
32
|
|
|
33
33
|
# Change Log
|
|
34
|
+
### Version 2.6.3
|
|
35
|
+
- fix bug ip-header-name
|
|
36
|
+
### Version 2.6.2
|
|
37
|
+
- Add Verbose
|
|
34
38
|
### Version 2.6.1
|
|
35
39
|
- hotfix namings
|
|
36
40
|
### Version 2.6.0
|
|
@@ -40,7 +40,7 @@ setup(
|
|
|
40
40
|
"redis",
|
|
41
41
|
],
|
|
42
42
|
# *strongly* suggested for sharing
|
|
43
|
-
version="2.6.
|
|
43
|
+
version="2.6.3",
|
|
44
44
|
description="sharekernel is a shared package between all python projects",
|
|
45
45
|
long_description=long_description,
|
|
46
46
|
long_description_content_type="text/markdown",
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import os
|
|
2
2
|
|
|
3
|
+
VERBOSE = True if os.getenv("VERBOSE", "False").lower() == "true" else False
|
|
4
|
+
|
|
3
5
|
# Log *******************************************************************************
|
|
4
6
|
LOG_ENABLE = True if os.getenv("LOG_ENABLE", "False").lower() == "true" else False
|
|
5
7
|
RABBITMQ_USER = os.getenv("RABBITMQ_USER")
|
|
@@ -60,55 +60,106 @@ class IPSessionAuth:
|
|
|
60
60
|
except (ValueError, TypeError, json.JSONDecodeError):
|
|
61
61
|
raise BusinessException(ErrorCode.Internal_Server)
|
|
62
62
|
|
|
63
|
+
def _get_ip_from_request(self, request: dict, ip_header_name: str) -> str:
|
|
64
|
+
ip_address = request.headers.get(ip_header_name)
|
|
65
|
+
|
|
66
|
+
if not ip_address:
|
|
67
|
+
return None
|
|
68
|
+
|
|
69
|
+
if ip_header_name.lower() == "x-forwarded-for":
|
|
70
|
+
ip_address = ip_address.split(",")[0]
|
|
71
|
+
|
|
72
|
+
return ip_address
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
63
76
|
|
|
64
77
|
@unified_logger()
|
|
65
78
|
def ip_session_auth(self, request: Request):
|
|
66
79
|
|
|
67
80
|
if not config.IP_SESSION_AUTH_ENABLE:
|
|
81
|
+
if config.VERBOSE:
|
|
82
|
+
print("IP_SESSION_AUTH | OK | IP Session Auth is disabled")
|
|
68
83
|
return
|
|
69
84
|
|
|
85
|
+
if config.VERBOSE:
|
|
86
|
+
print("IP_SESSION_AUTH | INFO | Request Headers: ", request.headers)
|
|
87
|
+
|
|
70
88
|
api_key = request.headers.get(config.APIKEY_HEADER_NAME)
|
|
71
89
|
|
|
72
90
|
if api_key:
|
|
91
|
+
if config.VERBOSE:
|
|
92
|
+
print("IP_SESSION_AUTH | OK | API Key is provided")
|
|
73
93
|
return
|
|
74
94
|
|
|
75
95
|
state = getattr(request.state, "decoded_token", None)
|
|
96
|
+
if config.VERBOSE:
|
|
97
|
+
print("IP_SESSION_AUTH | INFO | State: ", state)
|
|
98
|
+
|
|
76
99
|
if not state:
|
|
100
|
+
if config.VERBOSE:
|
|
101
|
+
print("IP_SESSION_AUTH | ERROR | No state found")
|
|
77
102
|
raise UnAuthorizedException()
|
|
78
103
|
|
|
79
104
|
nameid = state.get("nameid")
|
|
80
105
|
sessionid = state.get("sessionId")
|
|
106
|
+
if config.VERBOSE:
|
|
107
|
+
print("IP_SESSION_AUTH | INFO | Nameid: ", nameid)
|
|
108
|
+
print("IP_SESSION_AUTH | INFO | Sessionid: ", sessionid)
|
|
81
109
|
|
|
82
110
|
if not nameid or not sessionid:
|
|
111
|
+
if config.VERBOSE:
|
|
112
|
+
print("IP_SESSION_AUTH | ERROR | No nameid or sessionid found")
|
|
83
113
|
raise UnAuthorizedException()
|
|
84
114
|
|
|
85
|
-
request_ip =
|
|
115
|
+
request_ip = self._get_ip_from_request(request, config.IP_HEADER_NAME)
|
|
116
|
+
|
|
86
117
|
if not request_ip:
|
|
118
|
+
if config.VERBOSE:
|
|
119
|
+
print("IP_SESSION_AUTH | ERROR | No request ip found")
|
|
87
120
|
raise UnAuthorizedException()
|
|
88
121
|
|
|
89
122
|
request_ip = request_ip.strip()
|
|
123
|
+
if config.VERBOSE:
|
|
124
|
+
print("IP_SESSION_AUTH | INFO | Request ip: ", request_ip)
|
|
90
125
|
|
|
91
126
|
if self._is_ip_allowed(request_ip):
|
|
127
|
+
if config.VERBOSE:
|
|
128
|
+
print("IP_SESSION_AUTH | OK | IP is in whitelist")
|
|
92
129
|
return
|
|
93
130
|
|
|
94
131
|
redis_key = f"userId:{nameid}:session:{sessionid}"
|
|
95
132
|
user_data = self.redis.get(redis_key)
|
|
133
|
+
if config.VERBOSE:
|
|
134
|
+
print("IP_SESSION_AUTH | INFO | User data: ", user_data)
|
|
96
135
|
|
|
97
136
|
if not user_data:
|
|
137
|
+
if config.VERBOSE:
|
|
138
|
+
print("IP_SESSION_AUTH | ERROR | No user data found")
|
|
98
139
|
raise UnAuthorizedException()
|
|
99
140
|
|
|
100
141
|
try:
|
|
101
142
|
payload = json.loads(user_data.decode())
|
|
102
143
|
except (ValueError, UnicodeDecodeError, TypeError):
|
|
144
|
+
if config.VERBOSE:
|
|
145
|
+
print("IP_SESSION_AUTH | ERROR | Error decoding user data")
|
|
103
146
|
raise UnAuthorizedException()
|
|
104
147
|
|
|
105
148
|
stored_ip = payload.get("Ip")
|
|
106
|
-
|
|
149
|
+
if config.VERBOSE:
|
|
150
|
+
print("IP_SESSION_AUTH | INFO | Stored ip: ", stored_ip)
|
|
151
|
+
|
|
107
152
|
if not stored_ip:
|
|
153
|
+
if config.VERBOSE:
|
|
154
|
+
print("IP_SESSION_AUTH | ERROR | No stored ip found")
|
|
108
155
|
raise UnAuthorizedException()
|
|
109
156
|
|
|
110
157
|
if stored_ip.strip() != request_ip:
|
|
158
|
+
if config.VERBOSE:
|
|
159
|
+
print("IP_SESSION_AUTH | ERROR | Stored ip does not match request ip")
|
|
111
160
|
raise UnAuthorizedException()
|
|
112
161
|
|
|
113
162
|
lifetime_minutes = self._get_lifetime()
|
|
114
|
-
self.redis.expire(redis_key, lifetime_minutes * 60)
|
|
163
|
+
self.redis.expire(redis_key, lifetime_minutes * 60)
|
|
164
|
+
if config.VERBOSE:
|
|
165
|
+
print("IP_SESSION_AUTH | OK | IP session auth successful")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sharedkernel
|
|
3
|
-
Version: 2.6.
|
|
3
|
+
Version: 2.6.3
|
|
4
4
|
Summary: sharekernel is a shared package between all python projects
|
|
5
5
|
Author: Smilinno
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
@@ -31,6 +31,10 @@ Dynamic: summary
|
|
|
31
31
|
this is a shared kernel package
|
|
32
32
|
|
|
33
33
|
# Change Log
|
|
34
|
+
### Version 2.6.3
|
|
35
|
+
- fix bug ip-header-name
|
|
36
|
+
### Version 2.6.2
|
|
37
|
+
- Add Verbose
|
|
34
38
|
### Version 2.6.1
|
|
35
39
|
- hotfix namings
|
|
36
40
|
### Version 2.6.0
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/database/mongo_generic_audit_repository.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
|
{sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/normalizer/phone_number_normalizer.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
|