Skip to main content

sync_auth/providers/
mod.rs

1//! Built-in auth providers for common dev tools.
2//!
3//! Each provider knows where its tool stores credentials on disk and can
4//! optionally validate them. Add a new provider by implementing [`AuthProvider`].
5
6mod claude;
7mod codex;
8mod gemini;
9mod gh;
10mod glab;
11mod opencode;
12mod qwen_coder;
13
14pub use self::claude::ClaudeProvider;
15pub use self::codex::CodexProvider;
16pub use self::gemini::GeminiProvider;
17pub use self::gh::GhProvider;
18pub use self::glab::GlabProvider;
19pub use self::opencode::OpencodeProvider;
20pub use self::qwen_coder::QwenCoderProvider;
21
22use crate::AuthProvider;
23
24/// Returns all built-in providers.
25pub fn all_providers() -> Vec<Box<dyn AuthProvider>> {
26    vec![
27        Box::new(GhProvider),
28        Box::new(GlabProvider),
29        Box::new(ClaudeProvider),
30        Box::new(CodexProvider),
31        Box::new(GeminiProvider),
32        Box::new(OpencodeProvider),
33        Box::new(QwenCoderProvider),
34    ]
35}
36
37/// Returns a single built-in provider by name, or `None` if unknown.
38pub fn provider_by_name(name: &str) -> Option<Box<dyn AuthProvider>> {
39    match name {
40        "gh" => Some(Box::new(GhProvider)),
41        "glab" => Some(Box::new(GlabProvider)),
42        "claude" => Some(Box::new(ClaudeProvider)),
43        "codex" => Some(Box::new(CodexProvider)),
44        "gemini" => Some(Box::new(GeminiProvider)),
45        "opencode" => Some(Box::new(OpencodeProvider)),
46        "qwen-coder" => Some(Box::new(QwenCoderProvider)),
47        _ => None,
48    }
49}