46 lines
1.4 KiB
Rust
46 lines
1.4 KiB
Rust
use std::env;
|
|
|
|
use gpui::AppContext;
|
|
use util::ResultExt;
|
|
|
|
use crate::auth::{CredentialProvider, ProviderCredential};
|
|
use crate::providers::open_ai::OPENAI_API_URL;
|
|
|
|
#[derive(Clone)]
|
|
pub struct OpenAICredentialProvider {}
|
|
|
|
impl CredentialProvider for OpenAICredentialProvider {
|
|
fn retrieve_credentials(&self, cx: &AppContext) -> ProviderCredential {
|
|
let api_key = if let Ok(api_key) = env::var("OPENAI_API_KEY") {
|
|
Some(api_key)
|
|
} else if let Some((_, api_key)) = cx
|
|
.platform()
|
|
.read_credentials(OPENAI_API_URL)
|
|
.log_err()
|
|
.flatten()
|
|
{
|
|
String::from_utf8(api_key).log_err()
|
|
} else {
|
|
None
|
|
};
|
|
|
|
if let Some(api_key) = api_key {
|
|
ProviderCredential::Credentials { api_key }
|
|
} else {
|
|
ProviderCredential::NoCredentials
|
|
}
|
|
}
|
|
fn save_credentials(&self, cx: &AppContext, credential: ProviderCredential) {
|
|
match credential {
|
|
ProviderCredential::Credentials { api_key } => {
|
|
cx.platform()
|
|
.write_credentials(OPENAI_API_URL, "Bearer", api_key.as_bytes())
|
|
.log_err();
|
|
}
|
|
_ => {}
|
|
}
|
|
}
|
|
fn delete_credentials(&self, cx: &AppContext) {
|
|
cx.platform().delete_credentials(OPENAI_API_URL).log_err();
|
|
}
|
|
}
|