// Copyright (C) 2019 Marius Schellenberger package authdav import ( "errors" "path/filepath" "strings" ) // Matcher is the matcher function type type Matcher func(path string) bool // Filter defines an interface to filter paths or files type Filter interface { Filter(path string) error } // ErrMacOSFilter error returned by the MacOSFilter var ErrMacOSFilter = errors.New("authdav: MacOS filter: access denied") // MacOSFilter implements a filter for MacOS specific files type MacOSFilter struct { match []Matcher } // NewMacOSFilter returns a new MacOSFilter func NewMacOSFilter() *MacOSFilter { return &MacOSFilter{ match: []Matcher{ func(p string) bool { return p == ".DS_Store" }, func(p string) bool { return strings.HasPrefix(p, "._") }, }, } } // Filter implements the Filter interface func (f *MacOSFilter) Filter(path string) error { _, file := filepath.Split(path) for _, m := range f.match { if m(file) { return ErrMacOSFilter } } return nil }