Skip to content

Commit 307af94

Browse files
authored
新增token管理界面
1 parent f896d39 commit 307af94

1 file changed

Lines changed: 76 additions & 9 deletions

File tree

app.py

Lines changed: 76 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55
import base64
66
import sys
77
import inspect
8+
import secrets
89
from loguru import logger
910

1011
import requests
11-
from flask import Flask, request, Response, jsonify, stream_with_context
12+
from flask import Flask, request, Response, jsonify, stream_with_context, render_template, redirect, session
1213
from curl_cffi import requests as curl_requests
1314
from werkzeug.middleware.proxy_fix import ProxyFix
1415

15-
1616
class Logger:
1717
def __init__(self, level="INFO", colorize=True, format=None):
1818
logger.remove()
@@ -103,6 +103,10 @@ async def request_logger(self, request):
103103
"RETRY_TIME": 1000,
104104
"PROXY": os.environ.get("PROXY") or None
105105
},
106+
"ADMIN": {
107+
"MANAGER_SWITCH": os.environ.get("MANAGER_SWITCH") or None,
108+
"PASSWORD": os.environ.get("ADMINPASSWORD") or None
109+
},
106110
"SERVER": {
107111
"COOKIE": None,
108112
"CF_CLEARANCE":os.environ.get("CF_CLEARANCE") or None,
@@ -587,7 +591,6 @@ def prepare_chat_request(self, request):
587591
if last_message["role"] != 'user':
588592
raise ValueError('此模型最后一条消息必须是用户消息!')
589593
todo_messages = [last_message]
590-
591594
file_attachments = []
592595
messages = ''
593596
last_role = None
@@ -658,12 +661,12 @@ def process_content(content):
658661
message_length += len(messages)
659662
if message_length >= 40000:
660663
convert_to_file = True
664+
661665
if convert_to_file:
662666
file_id = self.upload_base64_file(messages, request["model"])
663667
if file_id:
664668
file_attachments.insert(0, file_id)
665669
messages = last_message_content.strip()
666-
667670
return {
668671
"temporary": CONFIG["API"].get("IS_TEMP_CONVERSATION", False),
669672
"modelName": self.model_id,
@@ -785,7 +788,7 @@ def handle_image_response(image_url):
785788
**DEFAULT_HEADERS,
786789
"Cookie":CONFIG["SERVER"]['COOKIE']
787790
},
788-
impersonate="chrome120",
791+
impersonate="chrome133a",
789792
**proxy_options
790793
)
791794

@@ -968,11 +971,76 @@ def initialization():
968971

969972
app = Flask(__name__)
970973
app.wsgi_app = ProxyFix(app.wsgi_app)
974+
app.secret_key = os.environ.get('FLASK_SECRET_KEY') or secrets.token_hex(16)
975+
app.json.sort_keys = False
976+
977+
@app.route('/manager/login', methods=['GET', 'POST'])
978+
def manager_login():
979+
if CONFIG["ADMIN"]["MANAGER_SWITCH"]:
980+
if request.method == 'POST':
981+
password = request.form.get('password')
982+
if password == CONFIG["ADMIN"]["PASSWORD"]:
983+
session['is_logged_in'] = True
984+
return redirect('/manager')
985+
return render_template('login.html', error=True)
986+
return render_template('login.html', error=False)
987+
else:
988+
return redirect('/')
989+
990+
def check_auth():
991+
return session.get('is_logged_in', False)
992+
993+
@app.route('/manager')
994+
def manager():
995+
if not check_auth():
996+
return redirect('/manager/login')
997+
return render_template('manager.html')
998+
999+
@app.route('/manager/api/get')
1000+
def get_manager_tokens():
1001+
if not check_auth():
1002+
return jsonify({"error": "Unauthorized"}), 401
1003+
return jsonify(token_manager.get_token_status_map())
9711004

1005+
@app.route('/manager/api/add', methods=['POST'])
1006+
def add_manager_token():
1007+
if not check_auth():
1008+
return jsonify({"error": "Unauthorized"}), 401
1009+
try:
1010+
sso = request.json.get('sso')
1011+
if not sso:
1012+
return jsonify({"error": "SSO token is required"}), 400
1013+
token_manager.add_token(f"sso-rw={sso};sso={sso}")
1014+
return jsonify({"success": True})
1015+
except Exception as e:
1016+
return jsonify({"error": str(e)}), 500
1017+
1018+
@app.route('/manager/api/delete', methods=['POST'])
1019+
def delete_manager_token():
1020+
if not check_auth():
1021+
return jsonify({"error": "Unauthorized"}), 401
1022+
try:
1023+
sso = request.json.get('sso')
1024+
if not sso:
1025+
return jsonify({"error": "SSO token is required"}), 400
1026+
token_manager.delete_token(f"sso-rw={sso};sso={sso}")
1027+
return jsonify({"success": True})
1028+
except Exception as e:
1029+
return jsonify({"error": str(e)}), 500
1030+
1031+
@app.route('/manager/api/cf_clearance', methods=['POST'])
1032+
def setCf_Manager_clearance():
1033+
if not check_auth():
1034+
return jsonify({"error": "Unauthorized"}), 401
1035+
try:
1036+
cf_clearance = request.json.get('cf_clearance')
1037+
if not cf_clearance:
1038+
return jsonify({"error": "cf_clearance is required"}), 400
1039+
CONFIG["SERVER"]['CF_CLEARANCE'] = cf_clearance
1040+
return jsonify({"success": True})
1041+
except Exception as e:
1042+
return jsonify({"error": str(e)}), 500
9721043

973-
@app.before_request
974-
def log_request_info():
975-
logger.info(f"{request.method} {request.path}", "Request")
9761044

9771045
@app.route('/get/tokens', methods=['GET'])
9781046
def get_tokens():
@@ -981,7 +1049,6 @@ def get_tokens():
9811049
return jsonify({"error": '自定义的SSO令牌模式无法获取轮询sso令牌状态'}), 403
9821050
elif auth_token != CONFIG["API"]["API_KEY"]:
9831051
return jsonify({"error": 'Unauthorized'}), 401
984-
9851052
return jsonify(token_manager.get_token_status_map())
9861053

9871054
@app.route('/add/token', methods=['POST'])

0 commit comments

Comments
 (0)