pegasus/backend/internal/usermap.go

32 lines
758 B
Go
Raw Normal View History

2025-09-08 00:48:47 -05:00
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)
}