修复代理问题,添加头像接口

This commit is contained in:
咕谷酱
2025-09-19 17:02:24 +08:00
parent acb12120a2
commit 08ff35509e
3 changed files with 35 additions and 5 deletions

View File

@@ -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

View File

@@ -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
View File

@@ -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():
"""根端点""" """根端点"""