fix: correct repo URL fallback and HTTP error reporting in update service

- Replace hardcoded legacy Gitea URL in settings.py fallback
- Skip legacy Gitea URL even if saved in DB (treat as unset)
- Track last_response in branch loop so errors report the real HTTP
  status code instead of always showing "HTTP unknown"
- Unify 401/403/404 into one "private or not accessible" message

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
markmorado
2026-03-08 02:52:17 +01:00
parent 93d60b47e3
commit 3d9d1bb2e0
2 changed files with 23 additions and 14 deletions

View File

@@ -706,7 +706,7 @@ async def get_repository_url(
setting = db.query(PanelSettings).filter(PanelSettings.key == "git_repository_url").first()
if setting:
return {"repository_url": setting.value}
return {"repository_url": "https://git.tzim.uz/dilshod/pve_manager"}
return {"repository_url": "https://github.com/markmorado/pvemanager"}
@router.put("/api/updates/repository")

View File

@@ -131,24 +131,27 @@ def configure_git_for_public_access():
return False
CORRECT_REPO_URL = "https://github.com/markmorado/pvemanager"
_LEGACY_URLS = {"https://git.tzim.uz/dilshod/pve_manager"}
def get_repository_url_from_settings():
"""Get configured repository URL from database settings"""
try:
from ..db import SessionLocal
from ..models import PanelSettings
db = SessionLocal()
try:
setting = db.query(PanelSettings).filter(PanelSettings.key == "git_repository_url").first()
if setting and setting.value:
if setting and setting.value and setting.value not in _LEGACY_URLS:
return setting.value
finally:
db.close()
except Exception as e:
logger.warning(f"Could not get repository URL from settings: {e}")
# Default fallback
return "https://github.com/markmorado/pvemanager"
return CORRECT_REPO_URL
def parse_repo_url(url: str) -> tuple:
@@ -225,7 +228,8 @@ async def check_for_updates() -> Dict[str, Any]:
# Пробуем оба варианта: main и master
version_url = None
version_response = None
last_response = None
for branch in ["main", "master"]:
# Формируем URL в зависимости от хостинга
if host == "github":
@@ -233,22 +237,27 @@ async def check_for_updates() -> Dict[str, Any]:
else:
# Для Gitea, GitLab и других (формат: https://domain/owner/repo/raw/branch/file)
test_url = f"https://{host}/{owner}/{repo}/raw/branch/{branch}/VERSION"
test_response = await client.get(test_url, headers=headers)
last_response = test_response
if test_response.status_code == 200:
version_url = test_url
version_response = test_response
break
if version_response and version_response.status_code == 200:
if version_response:
result["latest_version"] = version_response.text.strip()
elif version_response and version_response.status_code == 404:
result["error"] = "Repository is private or not accessible. Set DISABLE_UPDATE_CHECK=true to hide this error."
elif last_response and last_response.status_code in (401, 403, 404):
result["error"] = (
f"Repository is private or not accessible (HTTP {last_response.status_code}). "
"Set DISABLE_UPDATE_CHECK=true to hide this error."
)
result["latest_version"] = current_version
return result
else:
result["error"] = f"Failed to fetch VERSION file: HTTP {version_response.status_code if version_response else 'unknown'}"
status_code = last_response.status_code if last_response else "unknown"
result["error"] = f"Failed to fetch VERSION file: HTTP {status_code}"
result["latest_version"] = current_version
return result