修复代理问题,添加头像接口
This commit is contained in:
@@ -352,6 +352,7 @@ async def get_user_beatmapsets(
|
|||||||
tags=["用户"],
|
tags=["用户"],
|
||||||
)
|
)
|
||||||
async def get_user_scores(
|
async def get_user_scores(
|
||||||
|
request: Request,
|
||||||
session: Database,
|
session: Database,
|
||||||
api_version: APIVersion,
|
api_version: APIVersion,
|
||||||
background_task: BackgroundTasks,
|
background_task: BackgroundTasks,
|
||||||
@@ -376,7 +377,8 @@ async def get_user_scores(
|
|||||||
user_id, type, include_fails, mode, limit, offset, is_legacy_api
|
user_id, type, include_fails, mode, limit, offset, is_legacy_api
|
||||||
)
|
)
|
||||||
if cached_scores is not None:
|
if cached_scores is not None:
|
||||||
return cached_scores
|
processed_scores = await process_response_assets(cached_scores, request)
|
||||||
|
return processed_scores
|
||||||
|
|
||||||
db_user = await session.get(User, user_id)
|
db_user = await session.get(User, user_id)
|
||||||
if not db_user or db_user.id == BANCHOBOT_ID:
|
if not db_user or db_user.id == BANCHOBOT_ID:
|
||||||
@@ -431,4 +433,8 @@ async def get_user_scores(
|
|||||||
is_legacy_api,
|
is_legacy_api,
|
||||||
)
|
)
|
||||||
|
|
||||||
return score_responses
|
# 处理资源代理
|
||||||
|
processed_scores = await process_response_assets(score_responses, request)
|
||||||
|
return processed_scores
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ class AssetProxyService:
|
|||||||
r"https://a\.ppy\.sh/", f"https://{self.avatar_proxy_prefix}.{self.custom_asset_domain}/", result
|
r"https://a\.ppy\.sh/", f"https://{self.avatar_proxy_prefix}.{self.custom_asset_domain}/", result
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
return result
|
return result
|
||||||
else:
|
else:
|
||||||
return data
|
return data
|
||||||
|
|||||||
29
main.py
29
main.py
@@ -4,7 +4,8 @@ from contextlib import asynccontextmanager
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from app.config import settings
|
from app.config import settings
|
||||||
from app.dependencies.database import engine, get_redis, redis_client
|
from app.database import User
|
||||||
|
from app.dependencies.database import Database, engine, get_redis, redis_client
|
||||||
from app.dependencies.fetcher import get_fetcher
|
from app.dependencies.fetcher import get_fetcher
|
||||||
from app.dependencies.scheduler import start_scheduler, stop_scheduler
|
from app.dependencies.scheduler import start_scheduler, stop_scheduler
|
||||||
from app.log import logger
|
from app.log import logger
|
||||||
@@ -38,10 +39,10 @@ from app.service.osu_rx_statistics import create_rx_statistics
|
|||||||
from app.service.redis_message_system import redis_message_system
|
from app.service.redis_message_system import redis_message_system
|
||||||
from app.utils import bg_tasks, utcnow
|
from app.utils import bg_tasks, utcnow
|
||||||
|
|
||||||
from fastapi import FastAPI, HTTPException, Request
|
from fastapi import Depends, FastAPI, HTTPException, Request
|
||||||
from fastapi.exceptions import RequestValidationError
|
from fastapi.exceptions import RequestValidationError
|
||||||
from fastapi.middleware.cors import CORSMiddleware
|
from fastapi.middleware.cors import CORSMiddleware
|
||||||
from fastapi.responses import JSONResponse
|
from fastapi.responses import JSONResponse, RedirectResponse
|
||||||
from fastapi_limiter import FastAPILimiter
|
from fastapi_limiter import FastAPILimiter
|
||||||
import sentry_sdk
|
import sentry_sdk
|
||||||
|
|
||||||
@@ -190,6 +191,28 @@ if settings.frontend_url is not None:
|
|||||||
app.include_router(redirect_router)
|
app.include_router(redirect_router)
|
||||||
|
|
||||||
|
|
||||||
|
@app.get("/users/{user_id}/avatar", include_in_schema=False)
|
||||||
|
async def get_user_avatar_root(
|
||||||
|
user_id: int,
|
||||||
|
session: Database,
|
||||||
|
):
|
||||||
|
"""用户头像重定向端点 (根路径)
|
||||||
|
|
||||||
|
"""
|
||||||
|
user = await session.get(User, user_id)
|
||||||
|
if not user:
|
||||||
|
raise HTTPException(status_code=404, detail="User not found")
|
||||||
|
|
||||||
|
avatar_url = user.avatar_url
|
||||||
|
if not avatar_url:
|
||||||
|
avatar_url = "https://lazer.g0v0.top/default.jpg"
|
||||||
|
|
||||||
|
separator = "&" if "?" in avatar_url else "?"
|
||||||
|
avatar_url_with_timestamp = f"{avatar_url}{separator}"
|
||||||
|
|
||||||
|
return RedirectResponse(url=avatar_url_with_timestamp, status_code=301)
|
||||||
|
|
||||||
|
|
||||||
@app.get("/", include_in_schema=False)
|
@app.get("/", include_in_schema=False)
|
||||||
async def root():
|
async def root():
|
||||||
"""根端点"""
|
"""根端点"""
|
||||||
|
|||||||
Reference in New Issue
Block a user