修复问题

This commit is contained in:
fanbook-wangdage
2026-01-25 18:49:34 +08:00
parent cd31c409d7
commit c1339a9858
5 changed files with 41 additions and 37 deletions

View File

@@ -5,3 +5,4 @@ PyJWT==2.10.1
pymongo==4.15.5 pymongo==4.15.5
Werkzeug==3.1.4 Werkzeug==3.1.4
sentry-sdk[flask] sentry-sdk[flask]
gunicorn

View File

@@ -4,7 +4,7 @@ from services.auth_service import (
decrypt_data, send_verification_email, verify_user_credentials, decrypt_data, send_verification_email, verify_user_credentials,
create_user_account, get_user_by_id create_user_account, get_user_by_id
) )
from app.extensions import generate_code, logger from app.extensions import generate_code, logger , config_loader
auth_bp = Blueprint("auth", __name__) auth_bp = Blueprint("auth", __name__)
@@ -148,7 +148,7 @@ def passport_login():
"data": { "data": {
"AccessToken": access_token, "AccessToken": access_token,
"RefreshToken": access_token, "RefreshToken": access_token,
"ExpiresIn": 3600 "ExpiresIn": config_loader.JWT_EXPIRATION_HOURS * 3600
} }
}) })
@@ -225,7 +225,7 @@ def passport_refresh_token():
"data": { "data": {
"AccessToken": access_token, "AccessToken": access_token,
"RefreshToken": access_token, "RefreshToken": access_token,
"ExpiresIn": 3600 "ExpiresIn": config_loader.JWT_EXPIRATION_HOURS * 3600
} }
}) })

View File

@@ -4,7 +4,7 @@ from flask import Blueprint, request, jsonify
from app.utils.jwt_utils import verify_token, create_token from app.utils.jwt_utils import verify_token, create_token
from services.auth_service import verify_user_credentials, get_users_with_search from services.auth_service import verify_user_credentials, get_users_with_search
from app.decorators import require_maintainer_permission from app.decorators import require_maintainer_permission
from app.extensions import generate_numeric_id, client, logger from app.extensions import generate_numeric_id, client, logger, config_loader
web_api_bp = Blueprint("web_api", __name__) web_api_bp = Blueprint("web_api", __name__)
@@ -36,7 +36,7 @@ def web_api_login():
"message": "success", "message": "success",
"data": { "data": {
"access_token": access_token, "access_token": access_token,
"expires_in": 3600 "expires_in": config_loader.JWT_EXPIRATION_HOURS * 3600
} }
}) })

21
run.py
View File

@@ -1,6 +1,21 @@
from app import create_app from app.init import create_app
from app.config_loader import config_loader
import sentry_sdk
sentry_sdk.init(
dsn="https://d1cad1d2b442cf8431df3ee4bab925e0@o4507525750521856.ingest.us.sentry.io/4510623668830208",
# Add data like request headers and IP for users,
# see https://docs.sentry.io/platforms/python/data-management/data-collected/ for more info
send_default_pii=True,
traces_sample_rate=1.0,
)
# 创建应用实例
app = create_app() app = create_app()
if __name__ == "__main__": if __name__ == '__main__':
app.run(debug=True) app.run(
host=config_loader.SERVER_HOST,
port=config_loader.SERVER_PORT,
debug=config_loader.SERVER_DEBUG
)

View File

@@ -1,20 +1,23 @@
import datetime
from bson import ObjectId from bson import ObjectId
from werkzeug.security import generate_password_hash, check_password_hash from werkzeug.security import generate_password_hash, check_password_hash
from app.extensions import client, logger from app.extensions import client, logger
from app.config import Config from app.config import Config
from Crypto.Cipher import PKCS1_OAEP
from Crypto.PublicKey import RSA
from app.config_loader import config_loader
from datetime import timezone
from zoneinfo import ZoneInfo
import datetime
import SendEmailTool
import re
import base64
def decrypt_data(encrypted_data): def decrypt_data(encrypted_data):
"""使用RSA私钥解密数据""" """使用RSA私钥解密数据"""
try: try:
from Crypto.Cipher import PKCS1_OAEP
from Crypto.PublicKey import RSA
import base64
from app.config_loader import config_loader
private_key_file = config_loader.RSA_PRIVATE_KEY_FILE private_key_file = config_loader.RSA_PRIVATE_KEY_FILE
private_key = RSA.import_key(open(private_key_file).read()) with open(private_key_file, 'r') as f:
private_key = RSA.import_key(f.read())
cipher = PKCS1_OAEP.new(private_key) cipher = PKCS1_OAEP.new(private_key)
decrypted_data = cipher.decrypt(base64.b64decode(encrypted_data)) decrypted_data = cipher.decrypt(base64.b64decode(encrypted_data))
return decrypted_data.decode() return decrypted_data.decode()
@@ -26,8 +29,6 @@ def decrypt_data(encrypted_data):
def send_verification_email(email, code): def send_verification_email(email, code):
"""发送验证码邮件""" """发送验证码邮件"""
try: try:
import SendEmailTool
subject = "Snap Hutao 验证码" subject = "Snap Hutao 验证码"
body = f"您的验证码是: {code}" body = f"您的验证码是: {code}"
@@ -74,8 +75,9 @@ def create_user_account(email, password):
"CreatedAt": datetime.datetime.utcnow(), "CreatedAt": datetime.datetime.utcnow(),
"IsLicensedDeveloper": False, "IsLicensedDeveloper": False,
"IsMaintainer": False, "IsMaintainer": False,
"GachaLogExpireAt": "2026-01-01T00:00:00Z", # 现在默认用户的上传权限不过期
"CdnExpireAt": "2026-01-01T00:00:00Z" "GachaLogExpireAt": "2099-01-01T00:00:00Z",
"CdnExpireAt": "2099-01-01T00:00:00Z"
} }
result = client.ht_server.users.insert_one(new_user) result = client.ht_server.users.insert_one(new_user)
@@ -91,7 +93,8 @@ def get_user_by_id(user_id):
if user: if user:
user['_id'] = str(user['_id']) user['_id'] = str(user['_id'])
return user return user
except: except Exception as e:
logger.error(f"Error retrieving user by ID: {e}")
return None return None
@@ -119,18 +122,6 @@ def get_users_with_search(query_text=""):
or_conditions.append({ or_conditions.append({
"_id": ObjectId(query_text) "_id": ObjectId(query_text)
}) })
else:
# 允许部分 ObjectId 搜索(转字符串后匹配)
or_conditions.append({
"_id": {
"$in": [
u["_id"] for u in client.ht_server.users.find(
{},
{"_id": 1}
) if query_text.lower() in str(u["_id"]).lower()
]
}
})
query = {"$or": or_conditions} query = {"$or": or_conditions}
@@ -145,9 +136,6 @@ def get_users_with_search(query_text=""):
users = list(users_map.values()) users = list(users_map.values())
# 数据格式化 # 数据格式化
from datetime import timezone
from zoneinfo import ZoneInfo
CST = ZoneInfo("Asia/Shanghai") CST = ZoneInfo("Asia/Shanghai")
for u in users: for u in users: