返回提交历史
Modified
g4f/Provider/needs_auth/hf/HuggingChat.py
+1
-1
Modified
g4f/api/__init__.py
+7
-5
Modified
g4f/gui/server/backend_api.py
+1
-1
XFEstudio/gpt4free
Refactor authentication cookie retrieval in HuggingChat; enhance header update logic in AppConfig and Backend_Api for improved flexibility
b0813eb3
代码差异
3 个文件
+9
-7
@@ -62,7 +62,7 @@ class HuggingChat(AsyncAuthedProvider, ProviderModelMixin):
62
62
@classmethod
63
63
async def on_auth_async(cls, cookies: Cookies = None, proxy: str = None, **kwargs) -> AsyncIterator:
64
64
if cookies is None:
65
cookies = get_cookies(cls.domain, single_browser=True)
65
cookies = get_cookies(cls.domain, raise_requirements_error=False, single_browser=True)
66
66
try:
67
67
yield RequestLogin(cls.__name__, os.environ.get("G4F_LOGIN_URL") or "")
68
68
yield AuthResult(
@@ -193,9 +193,10 @@ class AppConfig:
193
193
if value is not None:
194
194
setattr(cls, key, value)
195
195
196
def update_headers(request: Request, user: str) -> Request:
196
def update_headers(request: Request, delete_authorization: bool = True, user: str = None) -> Request:
197
197
new_headers = request.headers.mutablecopy()
198
del new_headers["Authorization"]
198
if delete_authorization and "authorization" in new_headers:
199
del new_headers["authorization"]
199
200
if user:
200
201
new_headers["x-user"] = user
201
202
request.scope["headers"] = new_headers.raw
@@ -236,11 +237,12 @@ class Api:
236
237
async def authorization(request: Request, call_next):
237
238
user = None
238
239
if request.method != "OPTIONS" and AppConfig.g4f_api_key is not None or AppConfig.demo:
240
delete_authorization = False
239
241
try:
240
242
user_g4f_api_key = await self.get_g4f_api_key(request)
241
243
except HTTPException:
242
user_g4f_api_key = await self.security(request)
243
user_g4f_api_key = getattr(user_g4f_api_key, "credentials", user_g4f_api_key)
244
user_g4f_api_key = getattr(await self.security(request), "credentials", None)
245
delete_authorization = True
244
246
country = request.headers.get("Cf-Ipcountry", "")
245
247
if AppConfig.demo and user is None:
246
248
ip = request.headers.get("X-Forwarded-For", "")[:4].strip(":.")
@@ -293,7 +295,7 @@ class Api:
293
295
user = await self.get_username(request)
294
296
except HTTPException as e:
295
297
return ErrorResponse.from_message(e.detail, e.status_code, e.headers)
296
request = update_headers(request, user)
298
request = update_headers(request, delete_authorization, user)
297
299
response = await call_next(request)
298
300
return response
299
301
@@ -181,7 +181,7 @@ class Backend_Api(Api):
181
181
logger.exception(e)
182
182
return jsonify({"error": {"message": "Invalid JSON data"}}), 400
183
183
if app.demo and has_crypto:
184
secret = request.headers.get("x_secret")
184
secret = request.headers.get("x-secret", request.headers.get("x_secret"))
185
185
if not secret or not validate_secret(secret):
186
186
return jsonify({"error": {"message": "Invalid or missing secret"}}), 403
187
187
tempfiles = []