Files
filebrowser/settings/settings.go
T

91 lines
2.8 KiB
Go
Raw Normal View History

2019-01-05 22:44:33 +00:00
package settings
import (
2019-01-11 20:25:39 +00:00
"crypto/rand"
"io/fs"
"log"
"strings"
"time"
"github.com/filebrowser/filebrowser/v2/rules"
)
2019-01-05 22:44:33 +00:00
const DefaultUsersHomeBasePath = "/users"
const DefaultMinimumPasswordLength = 12
const DefaultFileMode = 0640
const DefaultDirMode = 0750
2019-01-05 22:44:33 +00:00
// AuthMethod describes an authentication method.
type AuthMethod string
// Settings contain the main settings of the application.
type Settings struct {
Key []byte `json:"key"`
Signup bool `json:"signup"`
CreateUserDir bool `json:"createUserDir"`
UserHomeBasePath string `json:"userHomeBasePath"`
Defaults UserDefaults `json:"defaults"`
AuthMethod AuthMethod `json:"authMethod"`
Branding Branding `json:"branding"`
Tus Tus `json:"tus"`
Commands map[string][]string `json:"commands"`
Shell []string `json:"shell"`
Rules []rules.Rule `json:"rules"`
MinimumPasswordLength uint `json:"minimumPasswordLength"`
FileMode fs.FileMode `json:"fileMode"`
DirMode fs.FileMode `json:"dirMode"`
2019-01-05 22:44:33 +00:00
}
// GetRules implements rules.Provider.
func (s *Settings) GetRules() []rules.Rule {
return s.Rules
}
2019-01-08 10:29:09 +00:00
// Server specific settings.
type Server struct {
Root string `json:"root"`
BaseURL string `json:"baseURL"`
Socket string `json:"socket"`
TLSKey string `json:"tlsKey"`
TLSCert string `json:"tlsCert"`
Port string `json:"port"`
Address string `json:"address"`
Log string `json:"log"`
EnableThumbnails bool `json:"enableThumbnails"`
ResizePreview bool `json:"resizePreview"`
EnableExec bool `json:"enableExec"`
TypeDetectionByHeader bool `json:"typeDetectionByHeader"`
2021-09-13 13:47:06 +00:00
AuthHook string `json:"authHook"`
TokenExpirationTime string `json:"tokenExpirationTime"`
2019-01-08 10:29:09 +00:00
}
// Clean cleans any variables that might need cleaning.
func (s *Server) Clean() {
s.BaseURL = strings.TrimSuffix(s.BaseURL, "/")
2019-01-05 22:44:33 +00:00
}
2019-01-11 20:25:39 +00:00
func (s *Server) GetTokenExpirationTime(fallback time.Duration) time.Duration {
if s.TokenExpirationTime == "" {
return fallback
}
2024-04-01 18:24:06 +02:00
duration, err := time.ParseDuration(s.TokenExpirationTime)
if err != nil {
log.Printf("[WARN] Failed to parse tokenExpirationTime: %v", err)
return fallback
}
2024-04-01 18:24:06 +02:00
return duration
}
2021-07-26 12:00:05 +02:00
// GenerateKey generates a key of 512 bits.
2019-01-11 20:25:39 +00:00
func GenerateKey() ([]byte, error) {
2025-06-27 08:15:39 +02:00
b := make([]byte, 64)
2019-01-11 20:25:39 +00:00
_, err := rand.Read(b)
// Note that err == nil only if we read len(b) bytes.
if err != nil {
return nil, err
}
return b, nil
}