greppy/auth/
storage.rs

1//! Token storage using config file (no keychain)
2
3use crate::core::config::Config;
4use anyhow::{Context, Result};
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7pub enum Provider {
8    Google,
9    Anthropic,
10}
11
12pub fn save_token(provider: Provider, token: &str) -> Result<()> {
13    let mut config = Config::load().unwrap_or_default();
14    match provider {
15        Provider::Google => config.ai.google_token = Some(token.to_string()),
16        Provider::Anthropic => config.ai.anthropic_token = Some(token.to_string()),
17    }
18    config.save().context("Failed to save config")?;
19    Ok(())
20}
21
22pub fn load_token(provider: Provider) -> Result<String> {
23    let config = Config::load().unwrap_or_default();
24    match provider {
25        Provider::Google => config
26            .ai
27            .google_token
28            .context("No Google auth token found. Please run 'greppy login'."),
29        Provider::Anthropic => config
30            .ai
31            .anthropic_token
32            .context("No Anthropic auth token found. Please run 'greppy login'."),
33    }
34}
35
36pub fn delete_token(provider: Provider) -> Result<()> {
37    let mut config = Config::load().unwrap_or_default();
38    match provider {
39        Provider::Google => config.ai.google_token = None,
40        Provider::Anthropic => config.ai.anthropic_token = None,
41    }
42    config.save().context("Failed to save config")?;
43    Ok(())
44}
45
46/// Check if a token exists for a provider
47pub fn has_token(provider: Provider) -> bool {
48    load_token(provider).is_ok()
49}
50
51/// Delete all tokens (logout from all providers)
52pub fn delete_all_tokens() -> Result<()> {
53    let mut config = Config::load().unwrap_or_default();
54    config.ai.google_token = None;
55    config.ai.anthropic_token = None;
56    config.save().context("Failed to save config")?;
57    Ok(())
58}
59
60// Legacy functions for backwards compatibility
61pub fn save_token_legacy(token: &str) -> Result<()> {
62    save_token(Provider::Google, token)
63}
64
65pub fn load_token_legacy() -> Result<String> {
66    load_token(Provider::Google)
67}
68
69pub fn delete_token_legacy() -> Result<()> {
70    delete_token(Provider::Google)
71}