refactor(auth): enhance authentication detection and status handling

- Improved the CodexCliDetector to provide detailed logging and better error handling when reading the authentication file.
- Updated the authentication method determination in the settings and setup views to prioritize CLI-based methods over traditional API key methods.
- Expanded the CodexAuthStatus interface to include new authentication methods, ensuring accurate representation of the authentication state.
- Enhanced UI feedback in the settings view to reflect the new authentication methods, improving user experience.
This commit is contained in:
Kacper
2025-12-10 23:35:09 +01:00
parent 6086d22a44
commit d5d6cdf80f
5 changed files with 143 additions and 35 deletions

View File

@@ -238,10 +238,20 @@ export function SettingsView() {
const result = await api.setup.getCodexStatus();
if (result.success && result.auth) {
const auth = result.auth;
// Determine method - prioritize cli_verified and cli_tokens over auth_file
const method = auth.method === "cli_verified" || auth.method === "cli_tokens"
? auth.method === "cli_verified" ? "cli_verified" : "cli_tokens"
: auth.method === "auth_file"
? "api_key"
: auth.method === "env_var"
? "env"
: "none";
const authStatus: CodexAuthStatus = {
authenticated: auth.authenticated,
method: auth.hasEnvApiKey ? "env" : auth.hasStoredApiKey ? "api_key" : "none",
apiKeyValid: auth.hasStoredApiKey || auth.hasEnvApiKey,
method,
// Only set apiKeyValid for actual API key methods, not CLI login
apiKeyValid: method === "cli_verified" || method === "cli_tokens" ? undefined : (auth.hasAuthFile || auth.hasEnvKey),
};
setCodexAuthStatus(authStatus);
}
@@ -932,7 +942,9 @@ export function SettingsView() {
<span className="text-muted-foreground">
Method:{" "}
<span className="font-mono text-foreground">
{codexAuthStatus.method === "api_key"
{codexAuthStatus.method === "cli_verified" || codexAuthStatus.method === "cli_tokens"
? "CLI Login (OpenAI Account)"
: codexAuthStatus.method === "api_key"
? "API Key (Auth File)"
: codexAuthStatus.method === "env"
? "API Key (Environment)"
@@ -940,12 +952,17 @@ export function SettingsView() {
</span>
</span>
</div>
{codexAuthStatus.apiKeyValid && (
{codexAuthStatus.method === "cli_verified" || codexAuthStatus.method === "cli_tokens" ? (
<div className="flex items-center gap-2 text-green-400">
<CheckCircle2 className="w-3 h-3 shrink-0" />
<span>Account authenticated</span>
</div>
) : codexAuthStatus.apiKeyValid ? (
<div className="flex items-center gap-2 text-green-400">
<CheckCircle2 className="w-3 h-3 shrink-0" />
<span>API key configured</span>
</div>
)}
) : null}
{apiKeyStatus?.hasOpenAIKey && (
<div className="flex items-center gap-2 text-blue-400">
<Info className="w-3 h-3 shrink-0" />

View File

@@ -11,7 +11,7 @@ import {
CardHeader,
CardTitle,
} from "@/components/ui/card";
import { useSetupStore } from "@/store/setup-store";
import { useSetupStore, type CodexAuthStatus } from "@/store/setup-store";
import { useAppStore } from "@/store/app-store";
import { getElectronAPI } from "@/lib/electron";
import {
@@ -805,13 +805,22 @@ function CodexSetupStep({
setCodexCliStatus(cliStatus);
if (result.auth) {
const authStatus = {
const method = result.auth.method === "cli_verified" || result.auth.method === "cli_tokens"
? (result.auth.method === "cli_verified" ? "cli_verified" : "cli_tokens")
: result.auth.method === "auth_file"
? "api_key"
: result.auth.method === "env_var"
? "env"
: "none";
const authStatus: CodexAuthStatus = {
authenticated: result.auth.authenticated,
method: result.auth.method === "auth_file" ? "api_key" : result.auth.method === "env_var" ? "env" : "none",
apiKeyValid: result.auth.authenticated,
method,
// Only set apiKeyValid for actual API key methods, not CLI login
apiKeyValid: method === "cli_verified" || method === "cli_tokens" ? undefined : result.auth.authenticated,
};
console.log("[Codex Setup] Auth Status:", authStatus);
setCodexAuthStatus(authStatus as any);
setCodexAuthStatus(authStatus);
} else {
console.log("[Codex Setup] No auth info in result");
}

View File

@@ -198,7 +198,7 @@ export interface ElectronAPI {
path?: string;
auth?: {
authenticated: boolean;
method: string;
method: string; // Can be: "cli_verified", "cli_tokens", "auth_file", "env_var", "none"
hasAuthFile: boolean;
hasEnvKey: boolean;
hasStoredApiKey?: boolean;
@@ -561,7 +561,7 @@ interface SetupAPI {
path?: string;
auth?: {
authenticated: boolean;
method: string;
method: string; // Can be: "cli_verified", "cli_tokens", "auth_file", "env_var", "none"
hasAuthFile: boolean;
hasEnvKey: boolean;
hasStoredApiKey?: boolean;

View File

@@ -23,7 +23,7 @@ export interface ClaudeAuthStatus {
// Codex Auth Status
export interface CodexAuthStatus {
authenticated: boolean;
method: "api_key" | "env" | "none";
method: "api_key" | "env" | "cli_verified" | "cli_tokens" | "none";
apiKeyValid?: boolean;
mcpConfigured?: boolean;
error?: string;