From 41f733a60f4107563dd5523f0fd332503c59c862 Mon Sep 17 00:00:00 2001 From: HitMargin Date: Sun, 5 Apr 2026 13:58:50 +0800 Subject: [PATCH] =?UTF-8?q?=20=E9=AA=8C=E8=AF=81=20OAuth=20=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E4=B8=AD=E7=9A=84=20base=5Furl=20=E9=98=B2=E6=AD=A2?= =?UTF-8?q?=E6=97=A0=E6=95=88=20URL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/ConsoleOAuthFlow.tsx | 50 +++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/src/components/ConsoleOAuthFlow.tsx b/src/components/ConsoleOAuthFlow.tsx index 5502249fb..b5e09e6b7 100644 --- a/src/components/ConsoleOAuthFlow.tsx +++ b/src/components/ConsoleOAuthFlow.tsx @@ -621,7 +621,30 @@ function OAuthStatusMessage({ const doSave = useCallback(() => { const finalVals = { ...displayValues, [activeField]: inputValue } const env: Record = {} - if (finalVals.base_url) env.ANTHROPIC_BASE_URL = finalVals.base_url + + // Validate base_url if provided + if (finalVals.base_url) { + try { + new URL(finalVals.base_url) + } catch { + setOAuthStatus({ + state: 'error', + message: 'Invalid base URL: please enter a full URL including protocol (e.g., https://api.example.com)', + toRetry: { + state: 'custom_platform', + baseUrl: '', + apiKey: '', + haikuModel: '', + sonnetModel: '', + opusModel: '', + activeField: 'base_url', + }, + }) + return + } + env.ANTHROPIC_BASE_URL = finalVals.base_url + } + if (finalVals.api_key) env.ANTHROPIC_AUTH_TOKEN = finalVals.api_key if (finalVals.haiku_model) env.ANTHROPIC_DEFAULT_HAIKU_MODEL = finalVals.haiku_model if (finalVals.sonnet_model) env.ANTHROPIC_DEFAULT_SONNET_MODEL = finalVals.sonnet_model @@ -817,7 +840,30 @@ function OAuthStatusMessage({ const doOpenAISave = useCallback(() => { const finalVals = { ...openaiDisplayValues, [activeField]: openaiInputValue } const env: Record = {} - if (finalVals.base_url) env.OPENAI_BASE_URL = finalVals.base_url + + // Validate base_url if provided + if (finalVals.base_url) { + try { + new URL(finalVals.base_url) + } catch { + setOAuthStatus({ + state: 'error', + message: 'Invalid base URL: please enter a full URL including protocol (e.g., https://api.example.com)', + toRetry: { + state: 'openai_chat_api', + baseUrl: '', + apiKey: '', + haikuModel: '', + sonnetModel: '', + opusModel: '', + activeField: 'base_url', + }, + }) + return + } + env.OPENAI_BASE_URL = finalVals.base_url + } + if (finalVals.api_key) env.OPENAI_API_KEY = finalVals.api_key if (finalVals.haiku_model) env.OPENAI_DEFAULT_HAIKU_MODEL = finalVals.haiku_model if (finalVals.sonnet_model) env.OPENAI_DEFAULT_SONNET_MODEL = finalVals.sonnet_model