Add CredentialsProvider
to silence keychain prompts in development (#25266)
This PR adds a new `CredentialsProvider` trait that abstracts over interacting with the system keychain. We had previously introduced a version of this scoped just to Zed auth in https://github.com/zed-industries/zed/pull/11505. However, after landing https://github.com/zed-industries/zed/pull/25123, we now have a similar issue with the credentials for language model providers that are also stored in the keychain (and thus also produce a spam of popups when running a development build of Zed). This PR takes the existing approach and makes it more generic, such that we can use it everywhere that we need to read/store credentials in the keychain. There are still two credential provider implementations: - `KeychainCredentialsProvider` will interact with the system keychain (using the existing GPUI APIs) - `DevelopmentCredentialsProvider` will use a local file on the file system We only use the `DevelopmentCredentialsProvider` when: 1. We are running a development build of Zed 2. The `ZED_DEVELOPMENT_AUTH` environment variable is set - I am considering removing the need for this and making it the default, but that will be explored in a follow-up PR. Release Notes: - N/A
This commit is contained in:
parent
31aad858f8
commit
21bb7242ea
15 changed files with 401 additions and 226 deletions
|
@ -723,7 +723,7 @@ fn handle_open_request(request: OpenRequest, app_state: Arc<AppState>, cx: &mut
|
|||
|
||||
async fn authenticate(client: Arc<Client>, cx: &AsyncApp) -> Result<()> {
|
||||
if stdout_is_a_pty() {
|
||||
if *client::ZED_DEVELOPMENT_AUTH {
|
||||
if *credentials_provider::ZED_DEVELOPMENT_AUTH {
|
||||
client.authenticate_and_connect(true, cx).await?;
|
||||
} else if client::IMPERSONATE_LOGIN.is_some() {
|
||||
client.authenticate_and_connect(false, cx).await?;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue