Spaces:
Runtime error
Runtime error
远兮
commited on
Commit
·
550a205
1
Parent(s):
d90c3f6
修改message为中文
Browse files- chatgpt-next-web/OnSalesData.py +0 -5
- chatgpt-next-web/service.py +29 -103
chatgpt-next-web/OnSalesData.py
DELETED
@@ -1,5 +0,0 @@
|
|
1 |
-
class OnSalesData:
|
2 |
-
def __init__(self, currentPackage, packages):
|
3 |
-
self.currentPackage = currentPackage
|
4 |
-
self.packages = packages
|
5 |
-
|
|
|
|
|
|
|
|
|
|
|
|
chatgpt-next-web/service.py
CHANGED
@@ -13,7 +13,6 @@ from flask import Flask, request, jsonify, Request, Response
|
|
13 |
from redis import Redis
|
14 |
from utils import nowtime
|
15 |
import pay_package
|
16 |
-
from OnSalesData import OnSalesData
|
17 |
from ApiResponse import ApiResponse
|
18 |
from flask_cors import CORS
|
19 |
from mail import MyEmail
|
@@ -60,7 +59,7 @@ def send_verification_code_endpoint():
|
|
60 |
# 保存验证码到Redis,并设置过期时间(例如,5分钟)
|
61 |
redis.setex(email, 300, verification_code)
|
62 |
|
63 |
-
return jsonify({'code': 0, 'message': '
|
64 |
|
65 |
|
66 |
# 用户注册
|
@@ -74,15 +73,15 @@ def register():
|
|
74 |
|
75 |
if is_email_registered(email):
|
76 |
return jsonify({'code': 400, 'message': '邮箱已被注册'})
|
|
|
|
|
|
|
|
|
77 |
|
78 |
# 检查验证码是否匹配
|
79 |
stored_code = redis.get(email)
|
80 |
if stored_code is None or verification_code != stored_code.decode('utf-8'):
|
81 |
-
return jsonify({'code': 400, 'message': '
|
82 |
-
|
83 |
-
# 检查用户名是否已被注册
|
84 |
-
if redis.hexists('users', username):
|
85 |
-
return jsonify({'code': 400, 'message': 'Username already exists'})
|
86 |
|
87 |
# 生成唯一的用户ID
|
88 |
user_id = str(uuid.uuid4())
|
@@ -104,7 +103,7 @@ def register():
|
|
104 |
|
105 |
return jsonify({
|
106 |
'code': 0,
|
107 |
-
'message': '
|
108 |
})
|
109 |
|
110 |
|
@@ -118,11 +117,11 @@ def login():
|
|
118 |
# 检查用户名和密码是否匹配
|
119 |
user_data = redis.hget('users', username)
|
120 |
if not user_data:
|
121 |
-
return jsonify({'code': 400, 'message': '
|
122 |
|
123 |
user_data = user_data.decode('utf-8')
|
124 |
if password != eval(user_data)['password']:
|
125 |
-
return jsonify({'code': 400, 'message': '
|
126 |
|
127 |
# 生成令牌
|
128 |
token = generate_token(eval(user_data)['user_id'], username)
|
@@ -136,18 +135,6 @@ def login():
|
|
136 |
})
|
137 |
|
138 |
|
139 |
-
# 需要验证登录状态的接口
|
140 |
-
@app.route('/protected', methods=['GET'])
|
141 |
-
def protected():
|
142 |
-
token = parse_token(request)
|
143 |
-
# 验证令牌
|
144 |
-
if not validate_token(token):
|
145 |
-
return jsonify({'code': 401, 'message': 'Invalid token'}), 200
|
146 |
-
|
147 |
-
# 如果用户未登录,则返回未授权的响应
|
148 |
-
return jsonify({'code': 401, 'message': 'Unauthorized'})
|
149 |
-
|
150 |
-
|
151 |
@app.route('/resetPassword', methods=['POST'])
|
152 |
def reset_password():
|
153 |
email = request.json.get('email')
|
@@ -157,7 +144,7 @@ def reset_password():
|
|
157 |
# 检查验证码是否匹配
|
158 |
stored_code = redis.get(email)
|
159 |
if stored_code is None or verification_code != stored_code.decode('utf-8'):
|
160 |
-
return jsonify({'code': 400, 'message': '
|
161 |
|
162 |
if not is_email_registered(email):
|
163 |
return jsonify({'code': 400, 'message': '邮箱未注册'})
|
@@ -175,7 +162,7 @@ def logout():
|
|
175 |
if not validate_token(token):
|
176 |
# 将令牌添加到 Redis 黑名单
|
177 |
redis.set(token, 'revoked')
|
178 |
-
return jsonify({'code': 0, 'message': '
|
179 |
|
180 |
|
181 |
@app.route('/create_order', methods=['POST'])
|
@@ -186,17 +173,17 @@ def create_order():
|
|
186 |
|
187 |
# 验证令牌
|
188 |
if not validate_token(token):
|
189 |
-
return jsonify({'code': 401, 'message': '
|
190 |
|
191 |
# 根据套餐ID获取套餐信息
|
192 |
package = pay_package.get_package_by_id(package_id)
|
193 |
if not package:
|
194 |
-
return jsonify({'code': 400, 'message': '
|
195 |
|
196 |
# 获取用户ID
|
197 |
user_id = get_user_id_from_token(token)
|
198 |
if not user_id:
|
199 |
-
return jsonify({'code': 400, 'message': '
|
200 |
# 创建订单
|
201 |
order_id = generate_order_id()
|
202 |
order_data = {
|
@@ -243,12 +230,12 @@ def order_center():
|
|
243 |
|
244 |
# 验证令牌
|
245 |
if not validate_token(token):
|
246 |
-
return jsonify({'code': 401, 'message': '
|
247 |
|
248 |
# 获取用户ID
|
249 |
user_id = get_user_id_from_token(token)
|
250 |
if not user_id:
|
251 |
-
return jsonify({'code': 400, 'message': '
|
252 |
|
253 |
# 获取用户的所有订单
|
254 |
user_orders = get_user_orders(user_id)
|
@@ -281,12 +268,12 @@ def query_order():
|
|
281 |
|
282 |
# 验证令牌
|
283 |
if not validate_token(token):
|
284 |
-
return jsonify({'code': 401, 'message': '
|
285 |
|
286 |
# 获取用户ID
|
287 |
user_id = get_user_id_from_token(token)
|
288 |
if not user_id:
|
289 |
-
return jsonify({'code': 400, 'message': '
|
290 |
|
291 |
order_id = data['order_id']
|
292 |
|
@@ -295,7 +282,7 @@ def query_order():
|
|
295 |
order_data = redis.hgetall(order_key)
|
296 |
|
297 |
if not order_data:
|
298 |
-
return jsonify({'code': 404, 'message': '
|
299 |
|
300 |
# 将bytes类型的键和值转换为str类型
|
301 |
order_data_str = {
|
@@ -334,12 +321,12 @@ def get_user_profile():
|
|
334 |
|
335 |
# 验证令牌
|
336 |
if not validate_token(token):
|
337 |
-
return jsonify({'code': 401, 'message': '
|
338 |
|
339 |
# 获取用户ID
|
340 |
user_id = get_user_id_from_token(token)
|
341 |
if not user_id:
|
342 |
-
return jsonify({'code': 400, 'message': '
|
343 |
|
344 |
free_count = get_free_count(user_id)
|
345 |
package = get_user_package(user_id)
|
@@ -348,7 +335,6 @@ def get_user_profile():
|
|
348 |
|
349 |
user_package_key = f'user:{user_id}:package'
|
350 |
expiration_seconds = redis.ttl(user_package_key)
|
351 |
-
print("expiration_seconds = ", expiration_seconds, "is_package_expired = ", is_package_expired(user_id))
|
352 |
formatted_expiration = ""
|
353 |
if expiration_seconds > 0:
|
354 |
expiration_datetime = (
|
@@ -419,66 +405,6 @@ def is_order_expired(order_data):
|
|
419 |
return (current_time - created_at) >= expiration_time
|
420 |
|
421 |
|
422 |
-
# 购买支付套餐
|
423 |
-
@app.route('/purchase', methods=['POST'])
|
424 |
-
def purchase():
|
425 |
-
package_id = request.json.get('package_id')
|
426 |
-
token = parse_token(request)
|
427 |
-
|
428 |
-
# 验证令牌
|
429 |
-
if not validate_token(token):
|
430 |
-
return jsonify({'code': 401, 'message': 'Invalid token'})
|
431 |
-
|
432 |
-
# 根据套餐ID获取套餐信息
|
433 |
-
package = pay_package.get_package_by_id(package_id)
|
434 |
-
if not package:
|
435 |
-
return jsonify({'code': 400, 'message': 'Invalid package ID'})
|
436 |
-
|
437 |
-
user_id = get_user_id_from_token(token)
|
438 |
-
if not user_id:
|
439 |
-
return jsonify({'code': 400, 'message': 'User not found'})
|
440 |
-
|
441 |
-
# 检查用户是否已经支付过当前套餐
|
442 |
-
if not is_package_expired(user_id) and has_purchased_package(user_id, package_id):
|
443 |
-
return jsonify({'code': 400, 'message': 'Package already purchased'})
|
444 |
-
|
445 |
-
# 检查如果用户已经支付了高级套餐,则不能支付比高级套餐更低级的基础套餐
|
446 |
-
if not is_package_expired(user_id) and has_purchased_advanced_package(user_id) and package_id == '1':
|
447 |
-
return jsonify({'code': 400, 'message': 'Cannot purchase lower level package'})
|
448 |
-
|
449 |
-
# 存储用户套餐信息到Redis
|
450 |
-
store_user_package(user_id, package)
|
451 |
-
|
452 |
-
return jsonify({'code': 0, 'message': 'Purchase successful'})
|
453 |
-
|
454 |
-
|
455 |
-
# 验证用户聊天次数
|
456 |
-
@app.route('/validate', methods=['POST'])
|
457 |
-
def validate():
|
458 |
-
token = parse_token(request)
|
459 |
-
model = request.json.get('model')
|
460 |
-
|
461 |
-
# 验证令牌
|
462 |
-
if not validate_token(token):
|
463 |
-
return jsonify({'code': 401, 'message': 'Invalid token'})
|
464 |
-
|
465 |
-
user_id = get_user_id_from_token(token)
|
466 |
-
|
467 |
-
if not user_id:
|
468 |
-
return jsonify({'code': 400, 'message': 'User not found'})
|
469 |
-
|
470 |
-
# 获取用户套餐信息
|
471 |
-
package = get_user_package(user_id)
|
472 |
-
if not package and get_free_count(user_id) <= 0:
|
473 |
-
return jsonify({'code': 400, 'message': '聊天次数已用完,请购买套餐'})
|
474 |
-
|
475 |
-
# 检查用户聊天次数是否超过限制
|
476 |
-
if exceeded_chat_limit(user_id, package, model):
|
477 |
-
return jsonify({'code': 400, 'message': 'Chat limit exceeded'})
|
478 |
-
|
479 |
-
return jsonify({'code': 0, 'message': 'Chat limit not exceeded'})
|
480 |
-
|
481 |
-
|
482 |
@app.route('/v1/chat/completions', methods=['POST'])
|
483 |
def proxy_chat_completions():
|
484 |
token = parse_token(request)
|
@@ -486,12 +412,12 @@ def proxy_chat_completions():
|
|
486 |
|
487 |
# 验证令牌
|
488 |
if not validate_token(token):
|
489 |
-
return jsonify({'code': 401, 'message': '
|
490 |
|
491 |
user_id = get_user_id_from_token(token)
|
492 |
|
493 |
if not user_id:
|
494 |
-
return jsonify({'code': 400, 'message': '
|
495 |
|
496 |
# 获取用户套餐信息
|
497 |
package = get_user_package(user_id)
|
@@ -557,12 +483,12 @@ def handle_pick_up_free_chat_count():
|
|
557 |
|
558 |
# 验证令牌
|
559 |
if not validate_token(token):
|
560 |
-
return jsonify({'code': 401, 'message': '
|
561 |
|
562 |
user_id = get_user_id_from_token(token)
|
563 |
|
564 |
if not user_id:
|
565 |
-
return jsonify({'code': 400, 'message': '
|
566 |
|
567 |
# 领取赠送的聊天次数
|
568 |
success = pick_up_free_chat_count(user_id)
|
@@ -579,13 +505,13 @@ def packageOnSales():
|
|
579 |
|
580 |
# 验证令牌
|
581 |
if not validate_token(token):
|
582 |
-
return jsonify({'code': 401, 'message': '
|
583 |
|
584 |
user_id = get_user_id_from_token(token)
|
585 |
|
586 |
if not user_id:
|
587 |
-
return jsonify({'code': 400, 'message': '
|
588 |
-
|
589 |
current_package = get_user_package(user_id)
|
590 |
onSalesData = {
|
591 |
'currentPackage': int(current_package.get(b'id', 0)),
|
@@ -787,7 +713,7 @@ def initialize_user_free_data(user_id):
|
|
787 |
|
788 |
|
789 |
# 每天领取免费次数
|
790 |
-
def pick_up_free_chat_count(user_id, basic_free_count
|
791 |
free_data = get_user_free_data(user_id)
|
792 |
if not free_data:
|
793 |
free_data = initialize_user_free_data(user_id)
|
|
|
13 |
from redis import Redis
|
14 |
from utils import nowtime
|
15 |
import pay_package
|
|
|
16 |
from ApiResponse import ApiResponse
|
17 |
from flask_cors import CORS
|
18 |
from mail import MyEmail
|
|
|
59 |
# 保存验证码到Redis,并设置过期时间(例如,5分钟)
|
60 |
redis.setex(email, 300, verification_code)
|
61 |
|
62 |
+
return jsonify({'code': 0, 'message': '验证码已发送'})
|
63 |
|
64 |
|
65 |
# 用户注册
|
|
|
73 |
|
74 |
if is_email_registered(email):
|
75 |
return jsonify({'code': 400, 'message': '邮箱已被注册'})
|
76 |
+
|
77 |
+
# 检查用户名是否已被注册
|
78 |
+
if redis.hexists('users', username):
|
79 |
+
return jsonify({'code': 400, 'message': '用户名已存在'})
|
80 |
|
81 |
# 检查验证码是否匹配
|
82 |
stored_code = redis.get(email)
|
83 |
if stored_code is None or verification_code != stored_code.decode('utf-8'):
|
84 |
+
return jsonify({'code': 400, 'message': '验证码无效'})
|
|
|
|
|
|
|
|
|
85 |
|
86 |
# 生成唯一的用户ID
|
87 |
user_id = str(uuid.uuid4())
|
|
|
103 |
|
104 |
return jsonify({
|
105 |
'code': 0,
|
106 |
+
'message': '注册成功'
|
107 |
})
|
108 |
|
109 |
|
|
|
117 |
# 检查用户名和密码是否匹配
|
118 |
user_data = redis.hget('users', username)
|
119 |
if not user_data:
|
120 |
+
return jsonify({'code': 400, 'message': '用户名无效'})
|
121 |
|
122 |
user_data = user_data.decode('utf-8')
|
123 |
if password != eval(user_data)['password']:
|
124 |
+
return jsonify({'code': 400, 'message': '密码错误'})
|
125 |
|
126 |
# 生成令牌
|
127 |
token = generate_token(eval(user_data)['user_id'], username)
|
|
|
135 |
})
|
136 |
|
137 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
138 |
@app.route('/resetPassword', methods=['POST'])
|
139 |
def reset_password():
|
140 |
email = request.json.get('email')
|
|
|
144 |
# 检查验证码是否匹配
|
145 |
stored_code = redis.get(email)
|
146 |
if stored_code is None or verification_code != stored_code.decode('utf-8'):
|
147 |
+
return jsonify({'code': 400, 'message': '验证码无效'})
|
148 |
|
149 |
if not is_email_registered(email):
|
150 |
return jsonify({'code': 400, 'message': '邮箱未注册'})
|
|
|
162 |
if not validate_token(token):
|
163 |
# 将令牌添加到 Redis 黑名单
|
164 |
redis.set(token, 'revoked')
|
165 |
+
return jsonify({'code': 0, 'message': '已登出'})
|
166 |
|
167 |
|
168 |
@app.route('/create_order', methods=['POST'])
|
|
|
173 |
|
174 |
# 验证令牌
|
175 |
if not validate_token(token):
|
176 |
+
return jsonify({'code': 401, 'message': '请重新登录'})
|
177 |
|
178 |
# 根据套餐ID获取套餐信息
|
179 |
package = pay_package.get_package_by_id(package_id)
|
180 |
if not package:
|
181 |
+
return jsonify({'code': 400, 'message': '套餐不存在'})
|
182 |
|
183 |
# 获取用户ID
|
184 |
user_id = get_user_id_from_token(token)
|
185 |
if not user_id:
|
186 |
+
return jsonify({'code': 400, 'message': '用户不存在'})
|
187 |
# 创建订单
|
188 |
order_id = generate_order_id()
|
189 |
order_data = {
|
|
|
230 |
|
231 |
# 验证令牌
|
232 |
if not validate_token(token):
|
233 |
+
return jsonify({'code': 401, 'message': '请重新登录'})
|
234 |
|
235 |
# 获取用户ID
|
236 |
user_id = get_user_id_from_token(token)
|
237 |
if not user_id:
|
238 |
+
return jsonify({'code': 400, 'message': '用户不存在'})
|
239 |
|
240 |
# 获取用户的所有订单
|
241 |
user_orders = get_user_orders(user_id)
|
|
|
268 |
|
269 |
# 验证令牌
|
270 |
if not validate_token(token):
|
271 |
+
return jsonify({'code': 401, 'message': '请重���登录'})
|
272 |
|
273 |
# 获取用户ID
|
274 |
user_id = get_user_id_from_token(token)
|
275 |
if not user_id:
|
276 |
+
return jsonify({'code': 400, 'message': '用户不存在'})
|
277 |
|
278 |
order_id = data['order_id']
|
279 |
|
|
|
282 |
order_data = redis.hgetall(order_key)
|
283 |
|
284 |
if not order_data:
|
285 |
+
return jsonify({'code': 404, 'message': '订单无效'})
|
286 |
|
287 |
# 将bytes类型的键和值转换为str类型
|
288 |
order_data_str = {
|
|
|
321 |
|
322 |
# 验证令牌
|
323 |
if not validate_token(token):
|
324 |
+
return jsonify({'code': 401, 'message': '请重新登录'})
|
325 |
|
326 |
# 获取用户ID
|
327 |
user_id = get_user_id_from_token(token)
|
328 |
if not user_id:
|
329 |
+
return jsonify({'code': 400, 'message': '用户不存在'})
|
330 |
|
331 |
free_count = get_free_count(user_id)
|
332 |
package = get_user_package(user_id)
|
|
|
335 |
|
336 |
user_package_key = f'user:{user_id}:package'
|
337 |
expiration_seconds = redis.ttl(user_package_key)
|
|
|
338 |
formatted_expiration = ""
|
339 |
if expiration_seconds > 0:
|
340 |
expiration_datetime = (
|
|
|
405 |
return (current_time - created_at) >= expiration_time
|
406 |
|
407 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
408 |
@app.route('/v1/chat/completions', methods=['POST'])
|
409 |
def proxy_chat_completions():
|
410 |
token = parse_token(request)
|
|
|
412 |
|
413 |
# 验证令牌
|
414 |
if not validate_token(token):
|
415 |
+
return jsonify({'code': 401, 'message': '请重新登录'})
|
416 |
|
417 |
user_id = get_user_id_from_token(token)
|
418 |
|
419 |
if not user_id:
|
420 |
+
return jsonify({'code': 400, 'message': '用户不存在'})
|
421 |
|
422 |
# 获取用户套餐信息
|
423 |
package = get_user_package(user_id)
|
|
|
483 |
|
484 |
# 验证令牌
|
485 |
if not validate_token(token):
|
486 |
+
return jsonify({'code': 401, 'message': '请重新登录'})
|
487 |
|
488 |
user_id = get_user_id_from_token(token)
|
489 |
|
490 |
if not user_id:
|
491 |
+
return jsonify({'code': 400, 'message': '用户不存在'})
|
492 |
|
493 |
# 领取赠送的聊天次数
|
494 |
success = pick_up_free_chat_count(user_id)
|
|
|
505 |
|
506 |
# 验证令牌
|
507 |
if not validate_token(token):
|
508 |
+
return jsonify({'code': 401, 'message': '请重新登录'})
|
509 |
|
510 |
user_id = get_user_id_from_token(token)
|
511 |
|
512 |
if not user_id:
|
513 |
+
return jsonify({'code': 400, 'message': '用户不存在'})
|
514 |
+
|
515 |
current_package = get_user_package(user_id)
|
516 |
onSalesData = {
|
517 |
'currentPackage': int(current_package.get(b'id', 0)),
|
|
|
713 |
|
714 |
|
715 |
# 每天领取免费次数
|
716 |
+
def pick_up_free_chat_count(user_id, basic_free_count=5):
|
717 |
free_data = get_user_free_data(user_id)
|
718 |
if not free_data:
|
719 |
free_data = initialize_user_free_data(user_id)
|