initial commit
This commit is contained in:
		
							parent
							
								
									fb5cee52c4
								
							
						
					
					
						commit
						3dd3e01f4c
					
				| 
						 | 
					@ -1,8 +1,11 @@
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  "port": 8080,
 | 
					  "server":{
 | 
				
			||||||
  "baseURL": "",
 | 
					    "port": 8080,
 | 
				
			||||||
  "address": "",
 | 
					    "baseURL": "",
 | 
				
			||||||
  "log": "stdout",
 | 
					    "address": "",
 | 
				
			||||||
  "database": "./database.db",
 | 
					    "log": "stdout",
 | 
				
			||||||
  "root": "/srv"
 | 
					    "database": "./database.db",
 | 
				
			||||||
 | 
					    "root": "/srv"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -16,7 +16,7 @@ import (
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// MethodHookAuth is used to identify hook auth.
 | 
					// MethodHookAuth is used to identify hook auth.
 | 
				
			||||||
const MethodHookAuth settings.AuthMethod = "hook"
 | 
					const MethodHookAuth = "hook"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type hookCred struct {
 | 
					type hookCred struct {
 | 
				
			||||||
	Password string `json:"password"`
 | 
						Password string `json:"password"`
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,7 +12,7 @@ import (
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// MethodJSONAuth is used to identify json auth.
 | 
					// MethodJSONAuth is used to identify json auth.
 | 
				
			||||||
const MethodJSONAuth settings.AuthMethod = "json"
 | 
					const MethodJSONAuth = "json"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type jsonCred struct {
 | 
					type jsonCred struct {
 | 
				
			||||||
	Password  string `json:"password"`
 | 
						Password  string `json:"password"`
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,7 @@ import (
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// MethodNoAuth is used to identify no auth.
 | 
					// MethodNoAuth is used to identify no auth.
 | 
				
			||||||
const MethodNoAuth settings.AuthMethod = "noauth"
 | 
					const MethodNoAuth = "noauth"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NoAuth is no auth implementation of auther.
 | 
					// NoAuth is no auth implementation of auther.
 | 
				
			||||||
type NoAuth struct{}
 | 
					type NoAuth struct{}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,7 +10,7 @@ import (
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// MethodProxyAuth is used to identify no auth.
 | 
					// MethodProxyAuth is used to identify no auth.
 | 
				
			||||||
const MethodProxyAuth settings.AuthMethod = "proxy"
 | 
					const MethodProxyAuth = "proxy"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ProxyAuth is a proxy implementation of an auther.
 | 
					// ProxyAuth is a proxy implementation of an auther.
 | 
				
			||||||
type ProxyAuth struct {
 | 
					type ProxyAuth struct {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,13 +1,12 @@
 | 
				
			||||||
package auth
 | 
					package auth
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"github.com/gtsteffaniak/filebrowser/settings"
 | 
					 | 
				
			||||||
	"github.com/gtsteffaniak/filebrowser/users"
 | 
						"github.com/gtsteffaniak/filebrowser/users"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// StorageBackend is a storage backend for auth storage.
 | 
					// StorageBackend is a storage backend for auth storage.
 | 
				
			||||||
type StorageBackend interface {
 | 
					type StorageBackend interface {
 | 
				
			||||||
	Get(settings.AuthMethod) (Auther, error)
 | 
						Get(string) (Auther, error)
 | 
				
			||||||
	Save(Auther) error
 | 
						Save(Auther) error
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,7 +22,7 @@ func NewStorage(back StorageBackend, userStore *users.Storage) *Storage {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Get wraps a StorageBackend.Get.
 | 
					// 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)
 | 
						return s.back.Get(t)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -49,8 +49,8 @@ func addConfigFlags(flags *pflag.FlagSet) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//nolint:gocyclo
 | 
					//nolint:gocyclo
 | 
				
			||||||
func getAuthentication(flags *pflag.FlagSet, defaults ...interface{}) (settings.AuthMethod, auth.Auther) {
 | 
					func getAuthentication(flags *pflag.FlagSet, defaults ...interface{}) (string, auth.Auther) {
 | 
				
			||||||
	method := settings.AuthMethod(mustGetString(flags, "auth.method"))
 | 
						method := mustGetString(flags, "auth.method")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var defaultAuther map[string]interface{}
 | 
						var defaultAuther map[string]interface{}
 | 
				
			||||||
	if len(defaults) > 0 {
 | 
						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
 | 
					type AuthMethod string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Settings contain the main settings of the application.
 | 
					// 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.
 | 
					// GetRules implements rules.Provider.
 | 
				
			||||||
func (s *Settings) GetRules() []rules.Rule {
 | 
					func (s *Settings) GetRules() []rules.Rule {
 | 
				
			||||||
	return s.Rules
 | 
						return s.Rules
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Server specific settings.
 | 
					// 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"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Clean cleans any variables that might need cleaning.
 | 
					// Clean cleans any variables that might need cleaning.
 | 
				
			||||||
func (s *Server) Clean() {
 | 
					func (s *Server) Clean() {
 | 
				
			||||||
	s.BaseURL = strings.TrimSuffix(s.BaseURL, "/")
 | 
						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/auth"
 | 
				
			||||||
	"github.com/gtsteffaniak/filebrowser/errors"
 | 
						"github.com/gtsteffaniak/filebrowser/errors"
 | 
				
			||||||
	"github.com/gtsteffaniak/filebrowser/settings"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type authBackend struct {
 | 
					type authBackend struct {
 | 
				
			||||||
	db *storm.DB
 | 
						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
 | 
						var auther auth.Auther
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch t {
 | 
						switch t {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -149,13 +149,13 @@ func importConf(db *storm.DB, path string, sto *storage.Storage) error {
 | 
				
			||||||
	switch cfg.Auth.Method {
 | 
						switch cfg.Auth.Method {
 | 
				
			||||||
	case "proxy":
 | 
						case "proxy":
 | 
				
			||||||
		auther = &auth.ProxyAuth{Header: cfg.Auth.Header}
 | 
							auther = &auth.ProxyAuth{Header: cfg.Auth.Header}
 | 
				
			||||||
		s.AuthMethod = auth.MethodProxyAuth
 | 
							s.AuthMethod = string(auth.MethodProxyAuth)
 | 
				
			||||||
	case "hook":
 | 
						case "hook":
 | 
				
			||||||
		auther = &auth.HookAuth{Command: cfg.Auth.Command}
 | 
							auther = &auth.HookAuth{Command: cfg.Auth.Command}
 | 
				
			||||||
		s.AuthMethod = auth.MethodHookAuth
 | 
							s.AuthMethod = string(auth.MethodHookAuth)
 | 
				
			||||||
	case "none":
 | 
						case "none":
 | 
				
			||||||
		auther = &auth.NoAuth{}
 | 
							auther = &auth.NoAuth{}
 | 
				
			||||||
		s.AuthMethod = auth.MethodNoAuth
 | 
							s.AuthMethod = string(auth.MethodNoAuth)
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
		auther = &auth.JSONAuth{
 | 
							auther = &auth.JSONAuth{
 | 
				
			||||||
			ReCaptcha: &auth.ReCaptcha{
 | 
								ReCaptcha: &auth.ReCaptcha{
 | 
				
			||||||
| 
						 | 
					@ -164,7 +164,7 @@ func importConf(db *storm.DB, path string, sto *storage.Storage) error {
 | 
				
			||||||
				Secret: cfg.ReCaptcha.Secret,
 | 
									Secret: cfg.ReCaptcha.Secret,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		s.AuthMethod = auth.MethodJSONAuth
 | 
							s.AuthMethod = string(auth.MethodJSONAuth)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = sto.Auth.Save(auther)
 | 
						err = sto.Auth.Save(auther)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@ package version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var (
 | 
					var (
 | 
				
			||||||
	// Version is the current File Browser version.
 | 
						// Version is the current File Browser version.
 | 
				
			||||||
	Version = "(0.1.3)"
 | 
						Version = "(0.1.4)"
 | 
				
			||||||
	// CommitSHA is the commmit sha.
 | 
						// CommitSHA is the commmit sha.
 | 
				
			||||||
	CommitSHA = "(unknown)"
 | 
						CommitSHA = "(unknown)"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -125,6 +125,7 @@ main {
 | 
				
			||||||
.breadcrumbs a {
 | 
					.breadcrumbs a {
 | 
				
			||||||
  color: inherit;
 | 
					  color: inherit;
 | 
				
			||||||
  transition: 0.1s ease-in;
 | 
					  transition: 0.1s ease-in;
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
  border-radius: 0.125em;
 | 
					  border-radius: 0.125em;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -160,7 +160,7 @@ body.rtl #listing {
 | 
				
			||||||
  width: 100%;
 | 
					  width: 100%;
 | 
				
			||||||
  margin: 0;
 | 
					  margin: 0;
 | 
				
			||||||
  border: 1px solid rgba(0, 0, 0, 0.1);
 | 
					  border: 1px solid rgba(0, 0, 0, 0.1);
 | 
				
			||||||
  padding: 1em;
 | 
					  padding: 0;
 | 
				
			||||||
  border-top: 0;
 | 
					  border-top: 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue