From 673ab15ad43082f082cb6257be16963988abaae0 Mon Sep 17 00:00:00 2001 From: Supra4E8C Date: Thu, 11 Dec 2025 01:18:32 +0800 Subject: [PATCH] feat: update document title for clarity, add logo image, enhance OAuthPage with iFlow cookie authentication feature, and improve localization for remote access messages --- index.html | 2 +- logo.jpg | Bin 0 -> 54461 bytes src/i18n/locales/en.json | 3 +- src/i18n/locales/zh-CN.json | 3 +- src/pages/OAuthPage.tsx | 148 +++++++++++++++++++++++++++++++----- src/services/api/oauth.ts | 15 +++- 6 files changed, 147 insertions(+), 24 deletions(-) create mode 100644 logo.jpg diff --git a/index.html b/index.html index 1bc9508..0f8be67 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ - cli-proxy-webui-react + CLI Proxy API Management Center
diff --git a/logo.jpg b/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f701a6c2268cd3a7b22e63487f13778b6e9ca4af GIT binary patch literal 54461 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 as Record); + const [iflowCookie, setIflowCookie] = useState({ cookie: '', loading: false }); const timers = useRef>({}); + // 检测是否为本地访问 + const isLocal = useMemo(() => isLocalhost(window.location.hostname), []); + useEffect(() => { return () => { Object.values(timers.current).forEach((timer) => window.clearInterval(timer)); @@ -103,22 +116,58 @@ export function OAuthPage() { } }; + const submitIflowCookie = async () => { + const cookie = iflowCookie.cookie.trim(); + if (!cookie) { + showNotification(t('auth_login.iflow_cookie_required'), 'warning'); + return; + } + setIflowCookie((prev) => ({ ...prev, loading: true, error: undefined, result: undefined })); + try { + const res = await oauthApi.iflowCookieAuth(cookie); + if (res.status === 'ok') { + setIflowCookie((prev) => ({ ...prev, loading: false, result: res })); + showNotification(t('auth_login.iflow_cookie_status_success'), 'success'); + } else { + setIflowCookie((prev) => ({ ...prev, loading: false, error: res.error })); + showNotification(`${t('auth_login.iflow_cookie_status_error')} ${res.error || ''}`, 'error'); + } + } catch (err: any) { + setIflowCookie((prev) => ({ ...prev, loading: false, error: err?.message })); + showNotification(`${t('auth_login.iflow_cookie_start_error')} ${err?.message || ''}`, 'error'); + } + }; + return (
{PROVIDERS.map((provider) => { const state = states[provider.id] || {}; + // 非本地访问时禁用所有 OAuth 登录方式 + const isDisabled = !isLocal; return ( - startAuth(provider.id)} loading={state.polling}> - {t('common.login')} - - } + style={isDisabled ? { opacity: 0.6, pointerEvents: 'none' } : undefined} > -
{t(provider.hintKey)}
- {state.url && ( + startAuth(provider.id)} + loading={state.polling} + disabled={isDisabled} + > + {t('common.login')} + + } + > +
{t(provider.hintKey)}
+ {isDisabled && ( +
+ {t('auth_login.remote_access_disabled')} +
+ )} + {!isDisabled && state.url && (
{t(provider.urlLabelKey)}
{state.url}
@@ -136,18 +185,77 @@ export function OAuthPage() {
)} -
- {state.status === 'success' - ? t('auth_login.codex_oauth_status_success') - : state.status === 'error' - ? `${t('auth_login.codex_oauth_status_error')} ${state.error || ''}` - : state.status === 'waiting' - ? t('auth_login.codex_oauth_status_waiting') - : t('common.info')} -
+ {!isDisabled && ( +
+ {state.status === 'success' + ? t('auth_login.codex_oauth_status_success') + : state.status === 'error' + ? `${t('auth_login.codex_oauth_status_error')} ${state.error || ''}` + : state.status === 'waiting' + ? t('auth_login.codex_oauth_status_waiting') + : t('common.info')} +
+ )} + ); })} + + {/* iFlow Cookie 登录 */} + + {t('auth_login.iflow_cookie_button')} + + } + > +
{t('auth_login.iflow_cookie_hint')}
+
+ + setIflowCookie((prev) => ({ ...prev, cookie: e.target.value }))} + placeholder={t('auth_login.iflow_cookie_placeholder')} + /> +
+ {iflowCookie.error && ( +
+ {t('auth_login.iflow_cookie_status_error')} {iflowCookie.error} +
+ )} + {iflowCookie.result && iflowCookie.result.status === 'ok' && ( +
+
{t('auth_login.iflow_cookie_result_title')}
+
+ {iflowCookie.result.email && ( +
+ {t('auth_login.iflow_cookie_result_email')} + {iflowCookie.result.email} +
+ )} + {iflowCookie.result.expired && ( +
+ {t('auth_login.iflow_cookie_result_expired')} + {iflowCookie.result.expired} +
+ )} + {iflowCookie.result.saved_path && ( +
+ {t('auth_login.iflow_cookie_result_path')} + {iflowCookie.result.saved_path} +
+ )} + {iflowCookie.result.type && ( +
+ {t('auth_login.iflow_cookie_result_type')} + {iflowCookie.result.type} +
+ )} +
+
+ )} +
); } diff --git a/src/services/api/oauth.ts b/src/services/api/oauth.ts index cba7c85..762cbd3 100644 --- a/src/services/api/oauth.ts +++ b/src/services/api/oauth.ts @@ -17,6 +17,15 @@ export interface OAuthStartResponse { state?: string; } +export interface IFlowCookieAuthResponse { + status: 'ok' | 'error'; + error?: string; + saved_path?: string; + email?: string; + expired?: string; + type?: string; +} + const WEBUI_SUPPORTED: OAuthProvider[] = ['codex', 'anthropic', 'antigravity', 'gemini-cli', 'iflow']; export const oauthApi = { @@ -28,5 +37,9 @@ export const oauthApi = { getAuthStatus: (state: string) => apiClient.get<{ status: 'ok' | 'wait' | 'error'; error?: string }>(`/get-auth-status`, { params: { state } - }) + }), + + /** iFlow cookie 认证 */ + iflowCookieAuth: (cookie: string) => + apiClient.post('/iflow-auth-url', { cookie }) };