(action: AuthCommands)
| 3135 | } |
| 3136 | |
| 3137 | async fn handle_auth_command(action: AuthCommands) -> anyhow::Result<()> { |
| 3138 | match action { |
| 3139 | AuthCommands::List => { |
| 3140 | println!("\nCredential providers:"); |
| 3141 | for (provider, env_var) in AUTH_ENV_PROVIDERS { |
| 3142 | let status = if std::env::var(env_var).is_ok() { |
| 3143 | "set" |
| 3144 | } else { |
| 3145 | "not set" |
| 3146 | }; |
| 3147 | println!(" {:<16} {:<24} {}", provider, env_var, status); |
| 3148 | } |
| 3149 | println!(); |
| 3150 | } |
| 3151 | AuthCommands::Login { provider, token } => { |
| 3152 | let provider = if let Some(provider) = provider { |
| 3153 | provider |
| 3154 | } else { |
| 3155 | println!("No provider specified. Supported providers:"); |
| 3156 | for (p, _) in AUTH_ENV_PROVIDERS { |
| 3157 | println!(" - {}", p); |
| 3158 | } |
| 3159 | print!("Provider: "); |
| 3160 | io::stdout().flush()?; |
| 3161 | let mut input = String::new(); |
| 3162 | io::stdin().read_line(&mut input)?; |
| 3163 | input.trim().to_string() |
| 3164 | }; |
| 3165 | |
| 3166 | if provider.starts_with("http://") || provider.starts_with("https://") { |
| 3167 | anyhow::bail!( |
| 3168 | "Well-known URL login is not fully wired in Rust CLI yet. Use `opencode auth login <provider> --token ...` for now." |
| 3169 | ); |
| 3170 | } |
| 3171 | |
| 3172 | let Some(env_var) = provider_env_var(&provider) else { |
| 3173 | anyhow::bail!( |
| 3174 | "Unknown provider: {}. Run `opencode auth list` to see supported providers.", |
| 3175 | provider |
| 3176 | ); |
| 3177 | }; |
| 3178 | |
| 3179 | let value = if let Some(token) = token { |
| 3180 | token |
| 3181 | } else { |
| 3182 | print!("Enter token for {}: ", provider); |
| 3183 | io::stdout().flush()?; |
| 3184 | let mut input = String::new(); |
| 3185 | io::stdin().read_line(&mut input)?; |
| 3186 | input.trim().to_string() |
| 3187 | }; |
| 3188 | |
| 3189 | if value.is_empty() { |
| 3190 | anyhow::bail!("Token cannot be empty"); |
| 3191 | } |
| 3192 | |
| 3193 | std::env::set_var(env_var, &value); |
| 3194 | println!( |
no test coverage detected