package cli import ( "context" "fmt" "strings" "git.morlana.online/f.weber/vault-tui/internal/vault" ) // splitMountPath finds which configured mount a full logical path like // "secret/team/prod/db" belongs to, and returns the mount plus the // remaining path relative to it ("team/prod/db"). Mirrors how `vault kv` // itself resolves a bare path against sys/internal/ui/mounts. func splitMountPath(ctx context.Context, svc *vault.Service, full string) (vault.Mount, string, error) { full = strings.TrimPrefix(full, "/") mounts, err := svc.Mounts(ctx) if err != nil { return vault.Mount{}, "", fmt.Errorf("listing mounts: %w", err) } var best vault.Mount for _, m := range mounts { mp := strings.TrimSuffix(m.Path, "/") if full == mp || strings.HasPrefix(full, mp+"/") { if len(mp) > len(strings.TrimSuffix(best.Path, "/")) { best = m } } } if best.Path == "" { return vault.Mount{}, "", fmt.Errorf("no configured mount matches %q", full) } if !best.Supported() { return vault.Mount{}, "", fmt.Errorf("mount %q (type %s) is not supported by vault-tui", best.Path, best.Type) } rel := strings.TrimPrefix(full, strings.TrimSuffix(best.Path, "/")) rel = strings.TrimPrefix(rel, "/") return best, rel, nil }