package internal import ( "fmt" "os" "path/filepath" "gopkg.in/yaml.v3" ) type UserMap struct { // Maps Jellyfin usernames -> relative media subdir (e.g., "mary_grace_allison" -> "Allison") Map map[string]string `yaml:"map"` } func LoadUserMap(path string) (*UserMap, error) { b, err := os.ReadFile(path) if err != nil { return nil, err } var m UserMap if err := yaml.Unmarshal(b, &m); err != nil { return nil, err } return &m, nil } func (m *UserMap) Resolve(username string) (string, error) { if dir, ok := m.Map[username]; ok && dir != "" { clean := filepath.Clean(dir) if clean == "." || clean == "/" { return "", fmt.Errorf("invalid target dir") } return clean, nil } return "", fmt.Errorf("no mapping for user %q", username) }