Compare commits

...

1 Commits

Author SHA1 Message Date
rakesh
782a3005c1 Introduce device code login for codex cli 2025-09-11 16:49:45 -07:00
2 changed files with 19 additions and 1 deletions

View File

@@ -55,6 +55,17 @@ pub async fn run_login_with_api_key(
} }
} }
/// Login using the OAuth device code flow.
///
/// Currently not implemented; exits with a clear message.
pub async fn run_login_with_device_code(cli_config_overrides: CliConfigOverrides) -> ! {
// Parse and load config for consistency with other login commands.
let _config = load_config_or_exit(cli_config_overrides);
eprintln!("Device code login is not supported yet.");
std::process::exit(2);
}
pub async fn run_login_status(cli_config_overrides: CliConfigOverrides) -> ! { pub async fn run_login_status(cli_config_overrides: CliConfigOverrides) -> ! {
let config = load_config_or_exit(cli_config_overrides); let config = load_config_or_exit(cli_config_overrides);

View File

@@ -10,6 +10,7 @@ use codex_cli::SeatbeltCommand;
use codex_cli::login::run_login_status; use codex_cli::login::run_login_status;
use codex_cli::login::run_login_with_api_key; use codex_cli::login::run_login_with_api_key;
use codex_cli::login::run_login_with_chatgpt; use codex_cli::login::run_login_with_chatgpt;
use codex_cli::login::run_login_with_device_code;
use codex_cli::login::run_logout; use codex_cli::login::run_logout;
use codex_cli::proto; use codex_cli::proto;
use codex_common::CliConfigOverrides; use codex_common::CliConfigOverrides;
@@ -108,6 +109,10 @@ struct LoginCommand {
#[arg(long = "api-key", value_name = "API_KEY")] #[arg(long = "api-key", value_name = "API_KEY")]
api_key: Option<String>, api_key: Option<String>,
/// Use device code flow (not yet supported)
#[arg(long = "use-device-code")]
use_device_code: bool,
#[command(subcommand)] #[command(subcommand)]
action: Option<LoginSubcommand>, action: Option<LoginSubcommand>,
} }
@@ -168,7 +173,9 @@ async fn cli_main(codex_linux_sandbox_exe: Option<PathBuf>) -> anyhow::Result<()
run_login_status(login_cli.config_overrides).await; run_login_status(login_cli.config_overrides).await;
} }
None => { None => {
if let Some(api_key) = login_cli.api_key { if login_cli.use_device_code {
run_login_with_device_code(login_cli.config_overrides).await;
} else if let Some(api_key) = login_cli.api_key {
run_login_with_api_key(login_cli.config_overrides, api_key).await; run_login_with_api_key(login_cli.config_overrides, api_key).await;
} else { } else {
run_login_with_chatgpt(login_cli.config_overrides).await; run_login_with_chatgpt(login_cli.config_overrides).await;