feat: proxy provider UI, webhook URL fix, and dev-server key persistence

- Add proxy provider selector (None/NPM) to settings page with radio cards
- Show warning when switching to None about existing NPM routes
- Conditionally hide SSL certificate picker and NPM credentials when provider is None
- Fix webhook URL regenerate not updating UI (field name mismatch: url vs webhook_url)
- Fix dev-server.sh to persist ENCRYPTION_KEY across restarts via data/.dev-key
- Fix selected radio card background visibility in dark mode
This commit is contained in:
2026-04-04 20:33:08 +03:00
parent 7d6719da12
commit 97d2980e95
7 changed files with 77 additions and 12 deletions
+4 -4
View File
@@ -260,12 +260,12 @@ export function updateSettings(data: Partial<Settings>): Promise<Settings> {
return put<Settings>('/api/settings', data);
}
export function getWebhookUrl(): Promise<{ url: string }> {
return get<{ url: string }>('/api/settings/webhook-url');
export function getWebhookUrl(): Promise<{ webhook_url: string }> {
return get<{ webhook_url: string }>('/api/settings/webhook-url');
}
export function regenerateWebhookUrl(): Promise<{ url: string }> {
return post<{ url: string }>('/api/settings/webhook-url/regenerate');
export function regenerateWebhookUrl(): Promise<{ webhook_url: string }> {
return post<{ webhook_url: string }>('/api/settings/webhook-url/regenerate');
}
export function listNpmCertificates(): Promise<NpmCertificate[]> {
+8 -1
View File
@@ -238,7 +238,14 @@
"backup": "Backups",
"appearance": "Appearance",
"staleThreshold": "Stale threshold (days)",
"staleThresholdHelp": "Containers inactive for longer than this will be flagged as stale."
"staleThresholdHelp": "Containers inactive for longer than this will be flagged as stale.",
"proxyProvider": "Proxy Provider",
"proxyProviderHelp": "Select how reverse proxy routes are managed for deployed containers.",
"proxyNone": "None",
"proxyNoneDesc": "No proxy — containers are accessed directly by port",
"proxyNpm": "Nginx Proxy Manager",
"proxyNpmDesc": "Routes managed via NPM API (configure credentials below)",
"proxyNoneWarning": "Switching to None does not remove existing proxy routes from NPM. You can delete them manually from your NPM dashboard."
},
"settingsGeneral": {
"title": "General Settings",
+8 -1
View File
@@ -238,7 +238,14 @@
"backup": "Резервные копии",
"appearance": "Внешний вид",
"staleThreshold": "Порог устаревания (дни)",
"staleThresholdHelp": "Контейнеры, неактивные дольше этого срока, будут помечены как устаревшие."
"staleThresholdHelp": "Контейнеры, неактивные дольше этого срока, будут помечены как устаревшие.",
"proxyProvider": "Провайдер прокси",
"proxyProviderHelp": "Выберите способ управления обратным прокси для развёрнутых контейнеров.",
"proxyNone": "Нет",
"proxyNoneDesc": "Без прокси — контейнеры доступны напрямую по порту",
"proxyNpm": "Nginx Proxy Manager",
"proxyNpmDesc": "Маршруты через NPM API (настройте учётные данные ниже)",
"proxyNoneWarning": "Переключение на «Нет» не удаляет существующие прокси-маршруты из NPM. Вы можете удалить их вручную в панели NPM."
},
"settingsGeneral": {
"title": "Общие настройки",
+1
View File
@@ -115,6 +115,7 @@ export interface Settings {
dns_provider: string;
has_cloudflare_api_token: boolean;
cloudflare_zone_id: string;
proxy_provider: string;
backup_enabled: boolean;
backup_interval_hours: number;
backup_retention_count: number;