initial commit
This commit is contained in:
		
							parent
							
								
									fb5cee52c4
								
							
						
					
					
						commit
						3dd3e01f4c
					
				| 
						 | 
				
			
			@ -1,8 +1,11 @@
 | 
			
		|||
{
 | 
			
		||||
  "server":{
 | 
			
		||||
    "port": 8080,
 | 
			
		||||
    "baseURL": "",
 | 
			
		||||
    "address": "",
 | 
			
		||||
    "log": "stdout",
 | 
			
		||||
    "database": "./database.db",
 | 
			
		||||
    "root": "/srv"
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -16,7 +16,7 @@ import (
 | 
			
		|||
)
 | 
			
		||||
 | 
			
		||||
// MethodHookAuth is used to identify hook auth.
 | 
			
		||||
const MethodHookAuth settings.AuthMethod = "hook"
 | 
			
		||||
const MethodHookAuth = "hook"
 | 
			
		||||
 | 
			
		||||
type hookCred struct {
 | 
			
		||||
	Password string `json:"password"`
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,7 @@ import (
 | 
			
		|||
)
 | 
			
		||||
 | 
			
		||||
// MethodJSONAuth is used to identify json auth.
 | 
			
		||||
const MethodJSONAuth settings.AuthMethod = "json"
 | 
			
		||||
const MethodJSONAuth = "json"
 | 
			
		||||
 | 
			
		||||
type jsonCred struct {
 | 
			
		||||
	Password  string `json:"password"`
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@ import (
 | 
			
		|||
)
 | 
			
		||||
 | 
			
		||||
// MethodNoAuth is used to identify no auth.
 | 
			
		||||
const MethodNoAuth settings.AuthMethod = "noauth"
 | 
			
		||||
const MethodNoAuth = "noauth"
 | 
			
		||||
 | 
			
		||||
// NoAuth is no auth implementation of auther.
 | 
			
		||||
type NoAuth struct{}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,7 +10,7 @@ import (
 | 
			
		|||
)
 | 
			
		||||
 | 
			
		||||
// MethodProxyAuth is used to identify no auth.
 | 
			
		||||
const MethodProxyAuth settings.AuthMethod = "proxy"
 | 
			
		||||
const MethodProxyAuth = "proxy"
 | 
			
		||||
 | 
			
		||||
// ProxyAuth is a proxy implementation of an auther.
 | 
			
		||||
type ProxyAuth struct {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,13 +1,12 @@
 | 
			
		|||
package auth
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/gtsteffaniak/filebrowser/settings"
 | 
			
		||||
	"github.com/gtsteffaniak/filebrowser/users"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// StorageBackend is a storage backend for auth storage.
 | 
			
		||||
type StorageBackend interface {
 | 
			
		||||
	Get(settings.AuthMethod) (Auther, error)
 | 
			
		||||
	Get(string) (Auther, error)
 | 
			
		||||
	Save(Auther) error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -23,7 +22,7 @@ func NewStorage(back StorageBackend, userStore *users.Storage) *Storage {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
// Get wraps a StorageBackend.Get.
 | 
			
		||||
func (s *Storage) Get(t settings.AuthMethod) (Auther, error) {
 | 
			
		||||
func (s *Storage) Get(t string) (Auther, error) {
 | 
			
		||||
	return s.back.Get(t)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -49,8 +49,8 @@ func addConfigFlags(flags *pflag.FlagSet) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
//nolint:gocyclo
 | 
			
		||||
func getAuthentication(flags *pflag.FlagSet, defaults ...interface{}) (settings.AuthMethod, auth.Auther) {
 | 
			
		||||
	method := settings.AuthMethod(mustGetString(flags, "auth.method"))
 | 
			
		||||
func getAuthentication(flags *pflag.FlagSet, defaults ...interface{}) (string, auth.Auther) {
 | 
			
		||||
	method := mustGetString(flags, "auth.method")
 | 
			
		||||
 | 
			
		||||
	var defaultAuther map[string]interface{}
 | 
			
		||||
	if len(defaults) > 0 {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,11 +0,0 @@
 | 
			
		|||
package settings
 | 
			
		||||
 | 
			
		||||
// Branding contains the branding settings of the app.
 | 
			
		||||
type Branding struct {
 | 
			
		||||
	Name                  string `json:"name"`
 | 
			
		||||
	DisableExternal       bool   `json:"disableExternal"`
 | 
			
		||||
	DisableUsedPercentage bool   `json:"disableUsedPercentage"`
 | 
			
		||||
	Files                 string `json:"files"`
 | 
			
		||||
	Theme                 string `json:"theme"`
 | 
			
		||||
	Color                 string `json:"color"`
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,33 +0,0 @@
 | 
			
		|||
package settings
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/gtsteffaniak/filebrowser/files"
 | 
			
		||||
	"github.com/gtsteffaniak/filebrowser/users"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// UserDefaults is a type that holds the default values
 | 
			
		||||
// for some fields on User.
 | 
			
		||||
type UserDefaults struct {
 | 
			
		||||
	Scope        string            `json:"scope"`
 | 
			
		||||
	Locale       string            `json:"locale"`
 | 
			
		||||
	ViewMode     users.ViewMode    `json:"viewMode"`
 | 
			
		||||
	SingleClick  bool              `json:"singleClick"`
 | 
			
		||||
	Sorting      files.Sorting     `json:"sorting"`
 | 
			
		||||
	Perm         users.Permissions `json:"perm"`
 | 
			
		||||
	Commands     []string          `json:"commands"`
 | 
			
		||||
	HideDotfiles bool              `json:"hideDotfiles"`
 | 
			
		||||
	DateFormat   bool              `json:"dateFormat"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Apply applies the default options to a user.
 | 
			
		||||
func (d *UserDefaults) Apply(u *users.User) {
 | 
			
		||||
	u.Scope = d.Scope
 | 
			
		||||
	u.Locale = d.Locale
 | 
			
		||||
	u.ViewMode = d.ViewMode
 | 
			
		||||
	u.SingleClick = d.SingleClick
 | 
			
		||||
	u.Perm = d.Perm
 | 
			
		||||
	u.Sorting = d.Sorting
 | 
			
		||||
	u.Commands = d.Commands
 | 
			
		||||
	u.HideDotfiles = d.HideDotfiles
 | 
			
		||||
	u.DateFormat = d.DateFormat
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -13,41 +13,12 @@ const DefaultUsersHomeBasePath = "/users"
 | 
			
		|||
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"`
 | 
			
		||||
	Commands         map[string][]string `json:"commands"`
 | 
			
		||||
	Shell            []string            `json:"shell"`
 | 
			
		||||
	Rules            []rules.Rule        `json:"rules"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetRules implements rules.Provider.
 | 
			
		||||
func (s *Settings) GetRules() []rules.Rule {
 | 
			
		||||
	return s.Rules
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 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"`
 | 
			
		||||
	AuthHook              string `json:"authHook"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Server specific settings
 | 
			
		||||
// Clean cleans any variables that might need cleaning.
 | 
			
		||||
func (s *Server) Clean() {
 | 
			
		||||
	s.BaseURL = strings.TrimSuffix(s.BaseURL, "/")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,127 @@
 | 
			
		|||
package settings
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/gtsteffaniak/filebrowser/files"
 | 
			
		||||
	"github.com/gtsteffaniak/filebrowser/rules"
 | 
			
		||||
	"github.com/gtsteffaniak/filebrowser/users"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Apply applies the default options to a user.
 | 
			
		||||
func (d *UserDefaults) Apply(u *users.User) {
 | 
			
		||||
	u.Scope = d.Scope
 | 
			
		||||
	u.Locale = d.Locale
 | 
			
		||||
	u.ViewMode = d.ViewMode
 | 
			
		||||
	u.SingleClick = d.SingleClick
 | 
			
		||||
	u.Perm = d.Perm
 | 
			
		||||
	u.Sorting = d.Sorting
 | 
			
		||||
	u.Commands = d.Commands
 | 
			
		||||
	u.HideDotfiles = d.HideDotfiles
 | 
			
		||||
	u.DateFormat = d.DateFormat
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Settings struct {
 | 
			
		||||
	Key              []byte              `json:"key"`
 | 
			
		||||
	Signup           bool                `json:"signup"`
 | 
			
		||||
	CreateUserDir    bool                `json:"createUserDir"`
 | 
			
		||||
	UserHomeBasePath string              `json:"userHomeBasePath"`
 | 
			
		||||
	Defaults         UserDefaults        `json:"defaults"`
 | 
			
		||||
	Commands         map[string][]string `json:"commands"`
 | 
			
		||||
	Shell            []string            `json:"shell"`
 | 
			
		||||
	Rules            []rules.Rule        `json:"rules"`
 | 
			
		||||
	Server           Server              `json:"server"`
 | 
			
		||||
	AuthMethod       string              `json:"authMethod"`
 | 
			
		||||
	Auth             struct {
 | 
			
		||||
		Header  string `json:"header"`
 | 
			
		||||
		Method  string `json:"method"`
 | 
			
		||||
		Command string `json:"command"`
 | 
			
		||||
		Signup  bool   `json:"signup"`
 | 
			
		||||
		Shell   string `json:"shell"`
 | 
			
		||||
	} `json:"auth"`
 | 
			
		||||
 | 
			
		||||
	Branding Branding `json:"branding"`
 | 
			
		||||
 | 
			
		||||
	UserDefaults UserDefaults `json:"userDefaults"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Server struct {
 | 
			
		||||
	Socket                string `json:"socket"`
 | 
			
		||||
	TLSKey                string `json:"tlsKey"`
 | 
			
		||||
	TLSCert               string `json:"tlsCert"`
 | 
			
		||||
	EnableThumbnails      bool   `json:"enableThumbnails"`
 | 
			
		||||
	ResizePreview         bool   `json:"resizePreview"`
 | 
			
		||||
	EnableExec            bool   `json:"enableExec"`
 | 
			
		||||
	TypeDetectionByHeader bool   `json:"typeDetectionByHeader"`
 | 
			
		||||
	AuthHook              string `json:"authHook"`
 | 
			
		||||
	Port                  string `json:"port"`
 | 
			
		||||
	BaseURL               string `json:"baseURL"`
 | 
			
		||||
	Address               string `json:"address"`
 | 
			
		||||
	Log                   string `json:"log"`
 | 
			
		||||
	Database              string `json:"database"`
 | 
			
		||||
	Root                  string `json:"root"`
 | 
			
		||||
	EnablePreviewResize   bool   `json:"disable-preview-resize"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Branding struct {
 | 
			
		||||
	Name                  string `json:"name"`
 | 
			
		||||
	DisableExternal       bool   `json:"disableExternal"`
 | 
			
		||||
	DisableUsedPercentage bool   `json:"disableUsedPercentage"`
 | 
			
		||||
	Files                 string `json:"files"`
 | 
			
		||||
	Theme                 string `json:"theme"`
 | 
			
		||||
	Color                 string `json:"color"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UserDefaults is a type that holds the default values
 | 
			
		||||
// for some fields on User.
 | 
			
		||||
type UserDefaults struct {
 | 
			
		||||
	Scope        string            `json:"scope"`
 | 
			
		||||
	Locale       string            `json:"locale"`
 | 
			
		||||
	ViewMode     users.ViewMode    `json:"viewMode"`
 | 
			
		||||
	SingleClick  bool              `json:"singleClick"`
 | 
			
		||||
	Sorting      files.Sorting     `json:"sorting"`
 | 
			
		||||
	Perm         users.Permissions `json:"perm"`
 | 
			
		||||
	Commands     []string          `json:"commands"`
 | 
			
		||||
	HideDotfiles bool              `json:"hideDotfiles"`
 | 
			
		||||
	DateFormat   bool              `json:"dateFormat"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//{
 | 
			
		||||
//	"server":{
 | 
			
		||||
//	   "port":8080,
 | 
			
		||||
//	   "baseURL":"",
 | 
			
		||||
//	   "address":"",
 | 
			
		||||
//	   "log":"stdout",
 | 
			
		||||
//	   "database":"./database.db",
 | 
			
		||||
//	   "root":"/srv",
 | 
			
		||||
//	   "disable-thumbnails":false,
 | 
			
		||||
//	   "disable-preview-resize":false,
 | 
			
		||||
//	   "disable-exec":false,
 | 
			
		||||
//	   "disable-type-detection-by-header":false
 | 
			
		||||
//	},
 | 
			
		||||
//	"auth":{
 | 
			
		||||
//	   "header":"",
 | 
			
		||||
//	   "method":"",
 | 
			
		||||
//	   "command":"",
 | 
			
		||||
//	   "signup":false,
 | 
			
		||||
//	   "shell":""
 | 
			
		||||
//	},
 | 
			
		||||
//	"branding":{
 | 
			
		||||
//	   "name":"",
 | 
			
		||||
//	   "color":"",
 | 
			
		||||
//	   "files":"",
 | 
			
		||||
//	   "disableExternal":"",
 | 
			
		||||
//	   "disableUsedPercentage":""
 | 
			
		||||
//	},
 | 
			
		||||
//	"permissions":{
 | 
			
		||||
//	   "Admin":false,
 | 
			
		||||
//	   "Execute":true,
 | 
			
		||||
//	   "Create":true,
 | 
			
		||||
//	   "Rename":true,
 | 
			
		||||
//	   "Modify":true,
 | 
			
		||||
//	   "Delete":true,
 | 
			
		||||
//	   "Share":true,
 | 
			
		||||
//	   "Download":true
 | 
			
		||||
//	},
 | 
			
		||||
//	"commands":{},
 | 
			
		||||
//	"shell":{},
 | 
			
		||||
//	"rules":{}
 | 
			
		||||
// }
 | 
			
		||||
| 
						 | 
				
			
			@ -5,14 +5,13 @@ import (
 | 
			
		|||
 | 
			
		||||
	"github.com/gtsteffaniak/filebrowser/auth"
 | 
			
		||||
	"github.com/gtsteffaniak/filebrowser/errors"
 | 
			
		||||
	"github.com/gtsteffaniak/filebrowser/settings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type authBackend struct {
 | 
			
		||||
	db *storm.DB
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s authBackend) Get(t settings.AuthMethod) (auth.Auther, error) {
 | 
			
		||||
func (s authBackend) Get(t string) (auth.Auther, error) {
 | 
			
		||||
	var auther auth.Auther
 | 
			
		||||
 | 
			
		||||
	switch t {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -149,13 +149,13 @@ func importConf(db *storm.DB, path string, sto *storage.Storage) error {
 | 
			
		|||
	switch cfg.Auth.Method {
 | 
			
		||||
	case "proxy":
 | 
			
		||||
		auther = &auth.ProxyAuth{Header: cfg.Auth.Header}
 | 
			
		||||
		s.AuthMethod = auth.MethodProxyAuth
 | 
			
		||||
		s.AuthMethod = string(auth.MethodProxyAuth)
 | 
			
		||||
	case "hook":
 | 
			
		||||
		auther = &auth.HookAuth{Command: cfg.Auth.Command}
 | 
			
		||||
		s.AuthMethod = auth.MethodHookAuth
 | 
			
		||||
		s.AuthMethod = string(auth.MethodHookAuth)
 | 
			
		||||
	case "none":
 | 
			
		||||
		auther = &auth.NoAuth{}
 | 
			
		||||
		s.AuthMethod = auth.MethodNoAuth
 | 
			
		||||
		s.AuthMethod = string(auth.MethodNoAuth)
 | 
			
		||||
	default:
 | 
			
		||||
		auther = &auth.JSONAuth{
 | 
			
		||||
			ReCaptcha: &auth.ReCaptcha{
 | 
			
		||||
| 
						 | 
				
			
			@ -164,7 +164,7 @@ func importConf(db *storm.DB, path string, sto *storage.Storage) error {
 | 
			
		|||
				Secret: cfg.ReCaptcha.Secret,
 | 
			
		||||
			},
 | 
			
		||||
		}
 | 
			
		||||
		s.AuthMethod = auth.MethodJSONAuth
 | 
			
		||||
		s.AuthMethod = string(auth.MethodJSONAuth)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = sto.Auth.Save(auther)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,7 @@ package version
 | 
			
		|||
 | 
			
		||||
var (
 | 
			
		||||
	// Version is the current File Browser version.
 | 
			
		||||
	Version = "(0.1.3)"
 | 
			
		||||
	Version = "(0.1.4)"
 | 
			
		||||
	// CommitSHA is the commmit sha.
 | 
			
		||||
	CommitSHA = "(unknown)"
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -125,6 +125,7 @@ main {
 | 
			
		|||
.breadcrumbs a {
 | 
			
		||||
  color: inherit;
 | 
			
		||||
  transition: 0.1s ease-in;
 | 
			
		||||
  display: flex;
 | 
			
		||||
  border-radius: 0.125em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -160,7 +160,7 @@ body.rtl #listing {
 | 
			
		|||
  width: 100%;
 | 
			
		||||
  margin: 0;
 | 
			
		||||
  border: 1px solid rgba(0, 0, 0, 0.1);
 | 
			
		||||
  padding: 1em;
 | 
			
		||||
  padding: 0;
 | 
			
		||||
  border-top: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue