43 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
package config
 | 
						|
 | 
						|
import (
 | 
						|
	"strings"
 | 
						|
 | 
						|
	"golang.org/x/net/webdav"
 | 
						|
)
 | 
						|
 | 
						|
// User contains the configuration for each user
 | 
						|
type User struct {
 | 
						|
	Scope         string            `json:"-"` // Path the user have access
 | 
						|
	FileSystem    webdav.FileSystem `json:"-"` // The virtual file system the user have access
 | 
						|
	Handler       *webdav.Handler   `json:"-"` // The WebDav HTTP Handler
 | 
						|
	StyleSheet    string            `json:"-"` // Costum stylesheet
 | 
						|
	AllowNew      bool              // Can create files and folders
 | 
						|
	AllowEdit     bool              // Can edit/rename files
 | 
						|
	AllowCommands bool              // Can execute commands
 | 
						|
	Commands      []string          // Available Commands
 | 
						|
	Rules         []*Rule           `json:"-"` // Access rules
 | 
						|
}
 | 
						|
 | 
						|
// Allowed checks if the user has permission to access a directory/file
 | 
						|
func (u User) Allowed(url string) bool {
 | 
						|
	var rule *Rule
 | 
						|
	i := len(u.Rules) - 1
 | 
						|
 | 
						|
	for i >= 0 {
 | 
						|
		rule = u.Rules[i]
 | 
						|
 | 
						|
		if rule.Regex {
 | 
						|
			if rule.Regexp.MatchString(url) {
 | 
						|
				return rule.Allow
 | 
						|
			}
 | 
						|
		} else if strings.HasPrefix(url, rule.Path) {
 | 
						|
			return rule.Allow
 | 
						|
		}
 | 
						|
 | 
						|
		i--
 | 
						|
	}
 | 
						|
 | 
						|
	return true
 | 
						|
}
 |