lesscode-flask 0.2.14__tar.gz → 0.2.15__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 (69) hide show
  1. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/PKG-INFO +1 -1
  2. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/__init__.py +1 -1
  3. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/model/user_limit_policy.py +2 -2
  4. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/setting/__init__.py +2 -1
  5. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/fs_util.py +15 -15
  6. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/limit/req/rate_limiter_handler.py +18 -5
  7. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/limit/req_count/count_limiter_handler.py +15 -5
  8. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask.egg-info/PKG-INFO +1 -1
  9. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/README.md +0 -0
  10. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/app.py +0 -0
  11. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/db/__init__.py +0 -0
  12. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/db/datasource.py +0 -0
  13. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/db/executor.py +0 -0
  14. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/export_data/__init__.py +0 -0
  15. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/export_data/data_download_handler.py +0 -0
  16. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/log/access_log_handler.py +0 -0
  17. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/model/access_log.py +0 -0
  18. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/model/base_model.py +0 -0
  19. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/model/parameterized_query.py +0 -0
  20. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/model/resource_param_template.py +0 -0
  21. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/model/response_result.py +0 -0
  22. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/model/user.py +0 -0
  23. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/service/access_log_service.py +0 -0
  24. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/service/base_service.py +0 -0
  25. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/service/resource_param_template_service.py +0 -0
  26. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/setup/__init__.py +0 -0
  27. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/signals.py +0 -0
  28. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/static/swagger.py +0 -0
  29. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/decorator/__init__.py +0 -0
  30. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/decorator/cache.py +0 -0
  31. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/decorator/sql_injection.py +0 -0
  32. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/decorator/swagger.py +0 -0
  33. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/dify_utils.py +0 -0
  34. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/file/file_exporter.py +0 -0
  35. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/file/file_utils.py +0 -0
  36. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/helpers.py +0 -0
  37. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/json/NotSortJSONProvider.py +0 -0
  38. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/limit/__init__.py +0 -0
  39. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/limit/limit_util.py +0 -0
  40. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/limit/req/redis_rate_limiter.py +0 -0
  41. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/limit/req_count/redis_count_limiter.py +0 -0
  42. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/oss/__init__.py +0 -0
  43. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/oss/aliyun_oss.py +0 -0
  44. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/oss/ks3_oss.py +0 -0
  45. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/oss/minio_oss.py +0 -0
  46. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/redis/redis_helper.py +0 -0
  47. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/request/request.py +0 -0
  48. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/swagger/swagger_template.py +0 -0
  49. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/swagger/swagger_util.py +0 -0
  50. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/task/__init__.py +0 -0
  51. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/task/task_helper.py +0 -0
  52. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/utils/thread/thread_utils.py +0 -0
  53. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask/wsgi.py +0 -0
  54. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask.egg-info/SOURCES.txt +0 -0
  55. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask.egg-info/dependency_links.txt +0 -0
  56. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask.egg-info/requires.txt +0 -0
  57. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/lesscode_flask.egg-info/top_level.txt +0 -0
  58. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/redash/query_runner/__init__.py +0 -0
  59. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/redash/query_runner/clickhouse.py +0 -0
  60. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/redash/query_runner/elasticsearch.py +0 -0
  61. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/redash/query_runner/kingbase.py +0 -0
  62. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/redash/query_runner/mysql.py +0 -0
  63. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/redash/query_runner/pg.py +0 -0
  64. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/redash/settings/__init__.py +0 -0
  65. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/redash/settings/helpers.py +0 -0
  66. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/redash/utils/__init__.py +0 -0
  67. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/redash/utils/requests_session.py +0 -0
  68. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/setup.cfg +0 -0
  69. {lesscode_flask-0.2.14 → lesscode_flask-0.2.15}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lesscode-flask
3
- Version: 0.2.14
3
+ Version: 0.2.15
4
4
  Summary: lesscode-flask 是基于flask的web开发脚手架项目,该项目初衷为简化开发过程,让研发人员更加关注业务。
5
5
  Home-page: https://lesscode-flask
6
6
  Author: Chao.yy
@@ -1,4 +1,4 @@
1
- __version__ = '0.2.14'
1
+ __version__ = '0.2.15'
2
2
 
3
3
  import functools
4
4
  import logging
@@ -11,8 +11,8 @@ class UserLimitPolicy():
11
11
  policy_name: str= None,
12
12
  client_id: str= None,
13
13
  rate_limit_enable: int = 0,
14
- rate_limit_window_sec: int = 10,
15
- rate_limit_rate: int = 5,
14
+ rate_limit_window_sec: int = 1,
15
+ rate_limit_rate: int = 1,
16
16
  rate_limit_burst: int = 0,
17
17
  count_limit_enable: int = 0,
18
18
  count_limit_window_sec: int = 43200,
@@ -122,7 +122,8 @@ class BaseConfig:
122
122
 
123
123
  # 飞书 webhook URL 常量定义 用于向指定的飞书机器人发送消息的 webhook 地址
124
124
  LIMIT_FS_WEBHOOK_URL = "https://open.feishu.cn/open-apis/bot/v2/hook/545140ef-8234-4167-9f0c-8ee72abae430"
125
-
125
+ # 在飞书运维聊天框中处理
126
+ FS_OAM_SERVICE_URL = "http://oam-service.internal:8080"
126
127
  # sql 注入验证器开关
127
128
  SQL_INJECTION_ENABLE = False
128
129
  #
@@ -6,33 +6,33 @@ import requests
6
6
 
7
7
  logger = logging.getLogger(__name__)
8
8
 
9
- def fs_webhook(webhook_url:str,title:str, content:[str,list]):
9
+ def fs_webhook(webhook_url:str,title:str, fs_content:list):
10
10
  """
11
11
  发送飞书 webhook 消息
12
12
 
13
13
  参数:
14
14
  webhook_url (str): 飞书 webhook 的 URL 地址
15
15
  title (str): 消息的标题
16
- content (str or list): 消息内容,可以是字符串或字符串列表
16
+ fs_content (str or list): 消息内容,可以是字符串或字符串列表
17
17
 
18
18
  返回值:
19
19
  无返回值,直接发送 HTTP 请求
20
20
  """
21
21
  headers = {'Content-Type': 'application/json;charset=utf-8'}
22
22
 
23
- # 根据内容类型构建飞书消息格式
24
- if isinstance(content, list):
25
- fs_content = []
26
- for i in content:
27
- fs_content.append({
28
- "tag": "text",
29
- "text": f"{i}\n"
30
- })
31
- else:
32
- fs_content = [{
33
- "tag": "text",
34
- "text": f"{content}\n"
35
- }]
23
+ # # 根据内容类型构建飞书消息格式
24
+ # if isinstance(content, list):
25
+ # fs_content = []
26
+ # for i in content:
27
+ # fs_content.append({
28
+ # "tag": "text",
29
+ # "text": f"{i}\n"
30
+ # })
31
+ # else:
32
+ # fs_content = [{
33
+ # "tag": "text",
34
+ # "text": f"{content}\n"
35
+ # }]
36
36
 
37
37
  # 构造飞书消息的 JSON 结构
38
38
  json_text = {
@@ -35,12 +35,25 @@ class RateLimitHandler:
35
35
  content = []
36
36
  current_user = flask_login.current_user
37
37
  # 收集用户相关信息
38
- content.append(f"用户名称:{current_user.display_name}")
38
+ content.append({"tag": "text","text": f"用户名称:{current_user.display_name}\n"})
39
39
  phone_no = current_user.phone_no if current_user.phone_no is not None else "-"
40
- content.append(f"手机号:{phone_no}")
41
- content.append(f"用户IP:{request.remote_addr}")
42
- content.append(f"资源地址:{request.url_rule.rule}")
40
+ content.append({"tag": "text","text": f"手机号:{phone_no}\n"})
41
+ content.append({"tag": "text","text": f"用户IP:{request.remote_addr}\n"})
42
+ content.append({"tag": "text","text": f"资源地址:{request.url_rule.rule}\n"})
43
+ token = request.headers.get("Authorization", "").replace("Bearer ", "")
44
+ if token:
45
+ FS_OAM_SERVICE_URL = current_app.config.get("FS_OAM_SERVICE_URL")
46
+
47
+ content.append({"tag": "text","text": f"运维处理:\n"})
48
+ lock_account_url = f"{FS_OAM_SERVICE_URL}/icp/authUser/lock_account?id={current_user.id}"
49
+ url = f"{FS_OAM_SERVICE_URL}/icp/oauth/logout_token?token={token}"
50
+ content.append({"tag": "a","text": "强制下线","href": f"{url}"})
51
+ content.append({"tag": "a", "text": " 禁止登录 ", "href": f"{lock_account_url}"})
52
+ ban_ip_url = f"{FS_OAM_SERVICE_URL}/icp/accessLog/ban_ip?ip={request.remote_addr}"
53
+ content.append({"tag": "a", "text": "封禁IP ", "href": f"{ban_ip_url}"})
43
54
 
44
55
  # 发送飞书 webhook 告警
45
56
  fs_webhook(limit_fs_webhook_url, "触发频率限流告警", content)
46
- return ResponseResult.fail(status_code="403", http_code="403", message="请求过于频繁,请稍后再试!")
57
+ return ResponseResult.fail(status_code="403", http_code="403", message="请求过于频繁,请稍后再试!")
58
+
59
+
@@ -35,12 +35,22 @@ class CountLimitHandler:
35
35
  content = []
36
36
  current_user = flask_login.current_user
37
37
  # 收集用户相关信息
38
- content.append(f"用户名称:{current_user.display_name}")
38
+ current_user = flask_login.current_user
39
+ # 收集用户相关信息
40
+ content.append({"tag": "text","text": f"用户名称:{current_user.display_name}\n"})
39
41
  phone_no = current_user.phone_no if current_user.phone_no is not None else "-"
40
- content.append(f"手机号:{phone_no}")
41
- content.append(f"用户IP:{request.remote_addr}")
42
- content.append(f"资源地址:{request.url_rule.rule}")
43
-
42
+ content.append({"tag": "text","text": f"手机号:{phone_no}\n"})
43
+ content.append({"tag": "text","text": f"用户IP:{request.remote_addr}\n"})
44
+ content.append({"tag": "text","text": f"资源地址:{request.url_rule.rule}\n"})
45
+ token = request.headers.get("Authorization", "").replace("Bearer ", "")
46
+ if token:
47
+ content.append({"tag": "text","text": f"运维处理:\n"})
48
+ lock_account_url = f"http://127.0.0.1:8976/icp/authUser/lock_account?id={current_user.id}"
49
+ url = f"http://127.0.0.1:8976/icp/oauth/logout_token?token={token}"
50
+ content.append({"tag": "a","text": "强制下线","href": f"{url}"})
51
+ content.append({"tag": "a", "text": " 禁止登录 ", "href": f"{lock_account_url}"})
52
+ ban_ip_url = f"http://127.0.0.1:8976/icp/accessLog/ban_ip?ip={request.remote_addr}"
53
+ content.append({"tag": "a", "text": "封禁IP ", "href": f"{ban_ip_url}"})
44
54
  # 发送飞书 webhook 告警
45
55
  fs_webhook(limit_fs_webhook_url, "触发总量限流告警", content)
46
56
  return ResponseResult.fail(status_code="403", http_code="403", message="请求过于频繁,请稍后再试!")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lesscode-flask
3
- Version: 0.2.14
3
+ Version: 0.2.15
4
4
  Summary: lesscode-flask 是基于flask的web开发脚手架项目,该项目初衷为简化开发过程,让研发人员更加关注业务。
5
5
  Home-page: https://lesscode-flask
6
6
  Author: Chao.yy