1+ use std:: env;
2+
13use codex_common:: CliConfigOverrides ;
24use codex_core:: config:: Config ;
35use codex_core:: config:: ConfigOverrides ;
46use codex_login:: AuthMode ;
7+ use codex_login:: OPENAI_API_KEY_ENV_VAR ;
58use codex_login:: load_auth;
9+ use codex_login:: login_with_api_key;
610use codex_login:: login_with_chatgpt;
711
812pub async fn run_login_with_chatgpt ( cli_config_overrides : CliConfigOverrides ) -> ! {
@@ -21,14 +25,40 @@ pub async fn run_login_with_chatgpt(cli_config_overrides: CliConfigOverrides) ->
2125 }
2226}
2327
28+ pub async fn run_login_with_api_key (
29+ cli_config_overrides : CliConfigOverrides ,
30+ api_key : String ,
31+ ) -> ! {
32+ let config = load_config_or_exit ( cli_config_overrides) ;
33+
34+ match login_with_api_key ( & config. codex_home , & api_key) {
35+ Ok ( _) => {
36+ eprintln ! ( "Successfully logged in" ) ;
37+ std:: process:: exit ( 0 ) ;
38+ }
39+ Err ( e) => {
40+ eprintln ! ( "Error logging in: {e}" ) ;
41+ std:: process:: exit ( 1 ) ;
42+ }
43+ }
44+ }
45+
2446pub async fn run_login_status ( cli_config_overrides : CliConfigOverrides ) -> ! {
2547 let config = load_config_or_exit ( cli_config_overrides) ;
2648
27- match load_auth ( & config. codex_home ) {
49+ match load_auth ( & config. codex_home , true ) {
2850 Ok ( Some ( auth) ) => match auth. mode {
2951 AuthMode :: ApiKey => {
3052 if let Some ( api_key) = auth. api_key . as_deref ( ) {
3153 eprintln ! ( "Logged in using an API key - {}" , safe_format_key( api_key) ) ;
54+
55+ if let Ok ( env_api_key) = env:: var ( OPENAI_API_KEY_ENV_VAR ) {
56+ if env_api_key == api_key {
57+ eprintln ! (
58+ " API loaded from OPENAI_API_KEY environment variable or .env file"
59+ ) ;
60+ }
61+ }
3262 } else {
3363 eprintln ! ( "Logged in using an API key" ) ;
3464 }
0 commit comments