50 lines
1,007 B
Go
50 lines
1,007 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 {
|
|
_, file := filepath.Split(path)
|
|
for _, m := range f.match {
|
|
if m(file) {
|
|
return ErrMacOSFilter
|
|
}
|
|
}
|
|
return nil
|
|
}
|