XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 1
返回提交历史

XFEstudio/gpt4free

Add public gen api

a31cb50d
hlohaus <983577+hlohaus@users.noreply.github.com>
提交于

代码差异

3 个文件 +22 -7
Modified g4f/api/__init__.py +11 -5
@@ -82,7 +82,7 @@ from .stubs import (
82 82 from g4f import debug
83 83
84 84 try:
85 from g4f.gui.server.crypto import create_or_read_keys, decrypt_data
85 from g4f.gui.server.crypto import create_or_read_keys, decrypt_data, get_session_key
86 86 has_crypto = True
87 87 except ImportError:
88 88 has_crypto = False
@@ -217,6 +217,7 @@ class Api:
217 217 print(f"Register authentication key: {''.join(['*' for _ in range(len(AppConfig.g4f_api_key))])}")
218 218 if has_crypto:
219 219 private_key, _ = create_or_read_keys()
220 session_key = get_session_key()
220 221 @self.app.middleware("http")
221 222 async def authorization(request: Request, call_next):
222 223 if AppConfig.g4f_api_key is not None or AppConfig.demo:
@@ -231,10 +232,15 @@ class Api:
231 232 if has_crypto and user_g4f_api_key:
232 233 try:
233 234 expires, user = decrypt_data(private_key, user_g4f_api_key).split(":", 1)
234 expires = int(expires) - int(time.time())
235 debug.log(f"User: '{user}' G4F API key expires in {expires} seconds")
236 except Exception as e:
237 return ErrorResponse.from_message(f"Invalid G4F API key: {e}", HTTP_401_UNAUTHORIZED)
235 except:
236 try:
237 data = json.loads(decrypt_data(session_key, user_g4f_api_key))
238 expires = int(decrypt_data(private_key, data["data"])) + 86400
239 user = data.get("user", None)
240 except:
241 return ErrorResponse.from_message(f"Invalid G4F API key", HTTP_401_UNAUTHORIZED)
242 expires = int(expires) - int(time.time())
243 debug.log(f"User: '{user}' G4F API key expires in {expires} seconds")
238 244 if expires < 0:
239 245 return ErrorResponse.from_message("G4F API key expired", HTTP_401_UNAUTHORIZED)
240 246 else:
Modified g4f/gui/server/backend_api.py +2 -2
@@ -29,7 +29,7 @@ try:
29 29 except ImportError as e:
30 30 has_markitdown = False
31 31 try:
32 from .crypto import rsa, serialization, create_or_read_keys, decrypt_data, encrypt_data
32 from .crypto import rsa, serialization, create_or_read_keys, decrypt_data, encrypt_data, get_session_key
33 33 has_crypto = True
34 34 except ImportError:
35 35 has_crypto = False
@@ -79,7 +79,7 @@ class Backend_Api(Api):
79 79 self.chat_cache = {}
80 80
81 81 if has_crypto:
82 private_key_obj = rsa.generate_private_key(public_exponent=65537, key_size=4096)
82 private_key_obj = get_session_key()
83 83 public_key_obj = private_key_obj.public_key()
84 84 public_key_pem = public_key_obj.public_bytes(
85 85 encoding=serialization.Encoding.PEM,
Modified g4f/gui/server/crypto.py +9 -0
@@ -9,6 +9,15 @@ from cryptography.hazmat.primitives.asymmetric.rsa import RSAPublicKey, RSAPriva
9 9
10 10 from ...cookies import get_cookies_dir
11 11
12 SESSION_KEY: RSAPrivateKey = None
13
14 def get_session_key() -> RSAPrivateKey:
15 global SESSION_KEY
16 if SESSION_KEY is not None:
17 return SESSION_KEY
18 SESSION_KEY = rsa.generate_private_key(public_exponent=65537, key_size=4096)
19 return SESSION_KEY
20
12 21 def create_or_read_keys() -> tuple[RSAPrivateKey, RSAPublicKey]:
13 22 private_key_file = os.path.join(get_cookies_dir(), "private_key.pem")
14 23 public_key_file = os.path.join(get_cookies_dir(), "public_key.pem")