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.
Files changed (51) hide show
  1. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/PKG-INFO +5 -1
  2. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/README.md +4 -0
  3. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/setup.py +1 -1
  4. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/config.py +2 -0
  5. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/ip_session_service.py +54 -3
  6. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/logger/logger_service.py +2 -0
  7. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel.egg-info/PKG-INFO +5 -1
  8. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/setup.cfg +0 -0
  9. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/common.py +0 -0
  10. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/data_format_converter.py +0 -0
  11. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/database/__init__.py +0 -0
  12. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/database/audit_model.py +0 -0
  13. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/database/distributed_cache.py +0 -0
  14. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/database/mongo_generic_audit_repository.py +0 -0
  15. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/database/mongo_generic_repository.py +0 -0
  16. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/database/mongo_health_checker.py +0 -0
  17. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/database/pagination_response_dto.py +0 -0
  18. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/date_converter.py +0 -0
  19. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/diff_utils.py +0 -0
  20. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/enum/__init__.py +0 -0
  21. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/enum/error_code.py +0 -0
  22. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/enum/redis_mode_enum.py +0 -0
  23. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/enum/sort_order.py +0 -0
  24. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/exception/__init__.py +0 -0
  25. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/exception/exception.py +0 -0
  26. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/exception/exception_handlers.py +0 -0
  27. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/file_validation.py +0 -0
  28. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/jwt_service.py +0 -0
  29. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/logger/log_decorator.py +0 -0
  30. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/logger/log_dto.py +0 -0
  31. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/logger/log_enums.py +0 -0
  32. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/logger/log_info.py +0 -0
  33. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/logger/log_middlewares.py +0 -0
  34. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/multipart_upload.py +0 -0
  35. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/normalizer/__init__.py +0 -0
  36. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/normalizer/number_normalizer.py +0 -0
  37. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/normalizer/phone_number_normalizer.py +0 -0
  38. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/normalizer/string_normalizer.py +0 -0
  39. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/objects/__init__.py +0 -0
  40. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/objects/base_document.py +0 -0
  41. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/objects/json_string_model.py +0 -0
  42. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/objects/jwt_model.py +0 -0
  43. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/objects/result.py +0 -0
  44. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/objects/user_info.py +0 -0
  45. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/regex_masking.py +0 -0
  46. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/s3_uploader.py +0 -0
  47. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel/string_extentions.py +0 -0
  48. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel.egg-info/SOURCES.txt +0 -0
  49. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel.egg-info/dependency_links.txt +0 -0
  50. {sharedkernel-2.6.1 → sharedkernel-2.6.3}/sharedkernel.egg-info/requires.txt +0 -0
  51. {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.1
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
@@ -2,6 +2,10 @@
2
2
  this is a shared kernel package
3
3
 
4
4
  # Change Log
5
+ ### Version 2.6.3
6
+ - fix bug ip-header-name
7
+ ### Version 2.6.2
8
+ - Add Verbose
5
9
  ### Version 2.6.1
6
10
  - hotfix namings
7
11
  ### Version 2.6.0
@@ -40,7 +40,7 @@ setup(
40
40
  "redis",
41
41
  ],
42
42
  # *strongly* suggested for sharing
43
- version="2.6.1",
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 = request.headers.get(config.IP_HEADER_NAME)
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")
@@ -92,6 +92,8 @@ class LoggerService:
92
92
 
93
93
 
94
94
  def emit(self, log: LogDTO):
95
+ # if config.VERBOSE:
96
+ # print("LOGGER | INFO | Emitting log:\n", log)
95
97
  self.publish(log)
96
98
 
97
99
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sharedkernel
3
- Version: 2.6.1
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