rainycode 1.4.2__tar.gz → 1.4.4__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.
- {rainycode-1.4.2 → rainycode-1.4.4}/PKG-INFO +1 -1
- {rainycode-1.4.2 → rainycode-1.4.4}/common_utils/captcha_util.py +3 -1
- rainycode-1.4.4/common_utils/datetime_util.py +12 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/pyproject.toml +1 -1
- {rainycode-1.4.2 → rainycode-1.4.4}/rainycode.egg-info/PKG-INFO +1 -1
- {rainycode-1.4.2 → rainycode-1.4.4}/rainycode.egg-info/SOURCES.txt +1 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/common_base/aiorequests.py +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/common_base/consts.py +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/common_base/exception.py +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/common_base/logging.py +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/common_base/response.py +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/common_depends/auth_depend.py +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/common_models/__init__.py +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/common_models/base_model.py +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/common_models/user_model.py +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/common_models/wechat_model.py +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/common_servers/api/auth_api.py +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/common_servers/api/wechat_api.py +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/common_servers/router.py +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/common_servers/schemas/auth_schema.py +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/common_servers/service/auth_svc.py +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/common_servers/service/wechat_svc.py +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/common_utils/bcrypt_util.py +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/common_utils/ip_util.py +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/common_utils/jwt_util.py +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/common_utils/snowflake_util.py +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/common_utils/wechat_util.py +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/core/base_config.py +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/core/databases/aiodb.py +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/core/databases/aioredis.py +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/core/middleware/http_middleware.py +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/core/start.py +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/rainycode.egg-info/dependency_links.txt +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/rainycode.egg-info/requires.txt +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/rainycode.egg-info/top_level.txt +0 -0
- {rainycode-1.4.2 → rainycode-1.4.4}/setup.cfg +0 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import base64
|
|
2
2
|
import random
|
|
3
|
+
import secrets
|
|
3
4
|
import string
|
|
4
5
|
from io import BytesIO
|
|
5
6
|
|
|
@@ -17,7 +18,8 @@ class CaptchaUtil:
|
|
|
17
18
|
字符集去 0/O、1/I/L,避免误读
|
|
18
19
|
"""
|
|
19
20
|
alphabet = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789"
|
|
20
|
-
|
|
21
|
+
# secrets.choice:加密安全随机,避免 6 位码可被预测而削弱防枚举
|
|
22
|
+
return "".join(secrets.choice(alphabet) for _ in range(length))
|
|
21
23
|
|
|
22
24
|
@classmethod
|
|
23
25
|
def generate_captcha(cls) -> tuple[str, str]:
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from datetime import datetime
|
|
2
|
+
from zoneinfo import ZoneInfo
|
|
3
|
+
|
|
4
|
+
# 应用时区:与 core.databases.aiodb 的 timezone='Asia/Shanghai' 保持一致。
|
|
5
|
+
# DB 读回的 aware datetime 带 +08:00(tzinfo=Asia/Shanghai);写入/计算统一用
|
|
6
|
+
# aware Shanghai,墙钟保持北京时间(不偏移),又可与读回值直接相减。
|
|
7
|
+
CN_TZ = ZoneInfo('Asia/Shanghai')
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def now_app() -> datetime:
|
|
11
|
+
"""返回当前时刻的 aware Asia/Shanghai datetime(与 DB 读回值时间基准一致)。"""
|
|
12
|
+
return datetime.now(CN_TZ)
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|