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

XFEstudio/gpt4free

Update headers

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

代码差异

2 个文件 +13 -15
Modified g4f/api/__init__.py +12 -14
@@ -14,7 +14,7 @@ import hashlib
14 14 import asyncio
15 15 from contextlib import asynccontextmanager
16 16 from urllib.parse import quote_plus
17 from fastapi import FastAPI, Response, Request, UploadFile, Form, Depends
17 from fastapi import FastAPI, Response, Request, UploadFile, Form, Depends, Header
18 18 from fastapi.responses import StreamingResponse, RedirectResponse, HTMLResponse, JSONResponse, FileResponse
19 19 from fastapi.exceptions import RequestValidationError
20 20 from fastapi.security import APIKeyHeader
@@ -188,10 +188,12 @@ class AppConfig:
188 188 for key, value in data.items():
189 189 setattr(cls, key, value)
190 190
191 def remove_authorization(request: Request) -> Request:
192 new_header = request.headers.mutablecopy()
193 del new_header["authorization"]
194 request.scope["headers"] = new_header.raw
191 def update_headers(request: Request, user: str) -> Request:
192 new_headers = request.headers.mutablecopy()
193 del new_headers["authorization"]
194 if user:
195 new_headers["x-user"] = user
196 request.scope["headers"] = new_headers.raw
195 197 delattr(request, "_headers")
196 198 return request
197 199
@@ -229,14 +231,12 @@ class Api:
229 231 async def authorization(request: Request, call_next):
230 232 user = None
231 233 if AppConfig.g4f_api_key is not None or AppConfig.demo:
232 is_authorization_header = False
233 234 try:
234 235 user_g4f_api_key = await self.get_g4f_api_key(request)
235 236 except HTTPException:
236 237 user_g4f_api_key = await self.security(request)
237 238 if hasattr(user_g4f_api_key, "credentials"):
238 239 user_g4f_api_key = user_g4f_api_key.credentials
239 is_authorization_header = True
240 240 if AppConfig.g4f_api_key is None or not secrets.compare_digest(AppConfig.g4f_api_key, user_g4f_api_key):
241 241 if has_crypto and user_g4f_api_key:
242 242 try:
@@ -269,12 +269,8 @@ class Api:
269 269 user = await self.get_username(request)
270 270 except HTTPException as e:
271 271 return ErrorResponse.from_message(e.detail, e.status_code, e.headers)
272 if is_authorization_header:
273 request = remove_authorization(request)
274 response = await call_next(request)
275 if user is not None:
276 response.headers["x_user"] = user
277 return response
272 request = update_headers(request, user)
273 return await call_next(request)
278 274
279 275 def register_validation_exception_handler(self):
280 276 @self.app.exception_handler(RequestValidationError)
@@ -386,6 +382,7 @@ class Api:
386 382 credentials: Annotated[HTTPAuthorizationCredentials, Depends(Api.security)] = None,
387 383 provider: str = None,
388 384 conversation_id: str = None,
385 x_user: Annotated[str | None, Header()] = None
389 386 ):
390 387 try:
391 388 if config.provider is None:
@@ -430,7 +427,8 @@ class Api:
430 427 **config.dict(exclude_none=True),
431 428 **{
432 429 "conversation_id": None,
433 "conversation": conversation
430 "conversation": conversation,
431 "user": x_user,
434 432 }
435 433 },
436 434 ignored=AppConfig.ignored_providers
Modified g4f/gui/server/backend_api.py +1 -1
@@ -188,7 +188,7 @@ class Backend_Api(Api):
188 188 ip = request.headers.get("X-Forwarded-For", "")
189 189 ip = sha256(ip.encode()).hexdigest()[:4] if ip else ""
190 190 user = request.headers.get("Cf-Ipcountry", "")
191 json_data["user"] = request.headers.get("x_user", f"{user}:{ip}")
191 json_data["user"] = request.headers.get("x-user", f"{user}:{ip}")
192 192 json_data["referer"] = request.headers.get("referer", "")
193 193 json_data["user-agent"] = request.headers.get("user-agent", "")
194 194 kwargs = self._prepare_conversation_kwargs(json_data)