From f87401d9a0017c416d138eaccbeb9a10ccf8a858 Mon Sep 17 00:00:00 2001 From: ReturnFI <151555003+ReturnFI@users.noreply.github.com> Date: Tue, 16 Dec 2025 07:12:57 +0000 Subject: [PATCH] feat(api): add core version to version API endpoint --- .../webpanel/routers/api/v1/schema/server.py | 1 + .../scripts/webpanel/routers/api/v1/server.py | 23 +++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/core/scripts/webpanel/routers/api/v1/schema/server.py b/core/scripts/webpanel/routers/api/v1/schema/server.py index 49b1395..e5a2970 100644 --- a/core/scripts/webpanel/routers/api/v1/schema/server.py +++ b/core/scripts/webpanel/routers/api/v1/schema/server.py @@ -43,6 +43,7 @@ class ServerServicesStatusResponse(BaseModel): class VersionInfoResponse(BaseModel): current_version: str + core_version: Optional[str] = None class VersionCheckResponse(BaseModel): diff --git a/core/scripts/webpanel/routers/api/v1/server.py b/core/scripts/webpanel/routers/api/v1/server.py index 07b6b51..04b249b 100644 --- a/core/scripts/webpanel/routers/api/v1/server.py +++ b/core/scripts/webpanel/routers/api/v1/server.py @@ -182,13 +182,26 @@ def __parse_services_status(services_status: dict[str, bool]) -> ServerServicesS @router.get('/version', response_model=VersionInfoResponse) async def get_version_info(): - """Retrieves the current version of the panel.""" + """Retrieves the current version of the panel and Hysteria core.""" try: version_output = cli_api.show_version() - if version_output: - current_version = version_output.split(": ")[1].strip() - return VersionInfoResponse(current_version=current_version) - raise HTTPException(status_code=404, detail="Version information not found") + if not version_output: + raise HTTPException(status_code=404, detail="Version information not found") + + lines = version_output.strip().splitlines() + current_version = None + core_version = None + + for line in lines: + if "Panel Version:" in line: + current_version = line.split(": ")[1].strip() + elif "Hysteria2 Core Version:" in line: + core_version = line.split(": ")[1].strip() + + if current_version: + return VersionInfoResponse(current_version=current_version, core_version=core_version) + + raise HTTPException(status_code=404, detail="Panel version not found in output") except Exception as e: raise HTTPException(status_code=500, detail=str(e))