32 lines
758 B
Go
32 lines
758 B
Go
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)
|
|
}
|