// Package passmgr wraps calls to the pass_mgr binary for secret resolution. package passmgr import ( "fmt" "os/exec" "strings" ) // GetSecret calls: pass_mgr get-secret [--public] --key func GetSecret(key string, public bool) (string, error) { args := []string{"get-secret"} if public { args = append(args, "--public") } args = append(args, "--key", key) out, err := exec.Command("pass_mgr", args...).Output() if err != nil { return "", fmt.Errorf("pass_mgr get-secret --key %s failed: %w", key, err) } return strings.TrimSpace(string(out)), nil } // SetSecret calls: pass_mgr set [--public] --key --secret func SetSecret(key, secret string, public bool) error { args := []string{"set"} if public { args = append(args, "--public") } args = append(args, "--key", key, "--secret", secret) if err := exec.Command("pass_mgr", args...).Run(); err != nil { return fmt.Errorf("pass_mgr set --key %s failed: %w", key, err) } return nil } // GeneratePassword calls: pass_mgr generate --key --username func GeneratePassword(key, username string) (string, error) { args := []string{"generate", "--key", key, "--username", username} out, err := exec.Command("pass_mgr", args...).Output() if err != nil { return "", fmt.Errorf("pass_mgr generate failed: %w", err) } return strings.TrimSpace(string(out)), nil } // GetToken retrieves the normal hf-token via pass_mgr. func GetToken() (string, error) { return GetSecret("hf-token", false) } // GetAccountManagerToken retrieves the public hf-acc-mgr-token via pass_mgr. func GetAccountManagerToken() (string, error) { return GetSecret("hf-acc-mgr-token", true) } // SetAccountManagerToken stores the acc-mgr-token as a public secret. func SetAccountManagerToken(token string) error { return SetSecret("hf-acc-mgr-token", token, true) }