sync_auth/providers/
gh.rs1use crate::{AuthProvider, CredentialFile, ValidationResult};
4
5#[derive(Debug, Clone, Default)]
7pub struct GhProvider;
8
9#[async_trait::async_trait]
10impl AuthProvider for GhProvider {
11 fn name(&self) -> &str {
12 "gh"
13 }
14
15 fn display_name(&self) -> &str {
16 "GitHub CLI"
17 }
18
19 fn credential_files(&self) -> Vec<CredentialFile> {
20 let base = dirs::config_dir()
21 .unwrap_or_else(|| "~/.config".into())
22 .join("gh");
23 vec![CredentialFile {
24 relative_path: "gh".to_string(),
25 local_path: base,
26 is_dir: true,
27 }]
28 }
29
30 async fn validate(&self) -> ValidationResult {
31 match tokio::process::Command::new("gh")
32 .args(["auth", "status"])
33 .output()
34 .await
35 {
36 Ok(output) if output.status.success() => ValidationResult::Valid,
37 Ok(_) => ValidationResult::Expired,
38 Err(_) => ValidationResult::Unknown,
39 }
40 }
41}