1pub mod anthropic;
2pub mod google;
3pub mod server;
4pub mod storage;
5
6use crate::core::error::{Error, Result};
7pub use storage::Provider;
8
9pub async fn login_google() -> Result<()> {
11 println!("Initiating Google OAuth login...");
12 let token = google::authenticate().await.map_err(Error::Auth)?;
13 storage::save_token(Provider::Google, &token).map_err(Error::Auth)?;
14 println!("Successfully logged in with Google!");
15 Ok(())
16}
17
18pub async fn login_anthropic() -> Result<()> {
20 println!("Initiating Claude OAuth login...");
21 let token = anthropic::authenticate().await.map_err(Error::Auth)?;
22 storage::save_token(Provider::Anthropic, &token).map_err(Error::Auth)?;
23 println!("Successfully logged in with Claude!");
24 Ok(())
25}
26
27pub async fn login() -> Result<()> {
29 login_google().await
30}
31
32pub fn logout_provider(provider: Provider) -> Result<()> {
34 storage::delete_token(provider).map_err(Error::Auth)?;
35 println!("Logged out from {:?}.", provider);
36 Ok(())
37}
38
39pub fn logout() -> Result<()> {
41 storage::delete_all_tokens().map_err(Error::Auth)?;
42 println!("Logged out from all providers.");
43 Ok(())
44}
45
46pub fn get_token(provider: Provider) -> Result<String> {
48 storage::load_token(provider).map_err(Error::Auth)
49}
50
51pub fn get_google_token() -> Result<String> {
53 get_token(Provider::Google)
54}
55
56pub fn get_anthropic_token() -> Result<String> {
58 get_token(Provider::Anthropic)
59}
60
61pub fn get_authenticated_providers() -> Vec<Provider> {
63 let mut providers = Vec::new();
64 if storage::has_token(Provider::Google) {
65 providers.push(Provider::Google);
66 }
67 if storage::has_token(Provider::Anthropic) {
68 providers.push(Provider::Anthropic);
69 }
70 providers
71}