1
0
Fork 0
authdav/filter.go
2019-09-02 09:48:18 +02:00

50 lines
1,001 B
Go

// 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 {
_, f := filepath.Split(path)
for _, m := range f.match {
if m(f) {
return ErrMacOSFilter
}
}
return nil
}