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