Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
88500ab219 | ||
|
|
d0f8c141e1 | ||
|
|
34a1bf1380 | ||
|
|
b87ba12a7d | ||
|
|
b3b5db351f |
@@ -101,6 +101,7 @@ func printSettings(ser *settings.Server, set *settings.Settings, auther auth.Aut
|
|||||||
fmt.Fprintf(w, "\tPort:\t%s\n", ser.Port)
|
fmt.Fprintf(w, "\tPort:\t%s\n", ser.Port)
|
||||||
fmt.Fprintf(w, "\tBase URL:\t%s\n", ser.BaseURL)
|
fmt.Fprintf(w, "\tBase URL:\t%s\n", ser.BaseURL)
|
||||||
fmt.Fprintf(w, "\tRoot:\t%s\n", ser.Root)
|
fmt.Fprintf(w, "\tRoot:\t%s\n", ser.Root)
|
||||||
|
fmt.Fprintf(w, "\tSocket:\t%s\n", ser.Socket)
|
||||||
fmt.Fprintf(w, "\tAddress:\t%s\n", ser.Address)
|
fmt.Fprintf(w, "\tAddress:\t%s\n", ser.Address)
|
||||||
fmt.Fprintf(w, "\tTLS Cert:\t%s\n", ser.TLSCert)
|
fmt.Fprintf(w, "\tTLS Cert:\t%s\n", ser.TLSCert)
|
||||||
fmt.Fprintf(w, "\tTLS Key:\t%s\n", ser.TLSKey)
|
fmt.Fprintf(w, "\tTLS Key:\t%s\n", ser.TLSKey)
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ override the options.`,
|
|||||||
|
|
||||||
ser := &settings.Server{
|
ser := &settings.Server{
|
||||||
Address: mustGetString(flags, "address"),
|
Address: mustGetString(flags, "address"),
|
||||||
|
Socket: mustGetString(flags, "socket"),
|
||||||
Root: mustGetString(flags, "root"),
|
Root: mustGetString(flags, "root"),
|
||||||
BaseURL: mustGetString(flags, "baseurl"),
|
BaseURL: mustGetString(flags, "baseurl"),
|
||||||
TLSKey: mustGetString(flags, "key"),
|
TLSKey: mustGetString(flags, "key"),
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ you want to change. Other options will remain unchanged.`,
|
|||||||
ser.BaseURL = mustGetString(flags, flag.Name)
|
ser.BaseURL = mustGetString(flags, flag.Name)
|
||||||
case "root":
|
case "root":
|
||||||
ser.Root = mustGetString(flags, flag.Name)
|
ser.Root = mustGetString(flags, flag.Name)
|
||||||
|
case "socket":
|
||||||
|
ser.Socket = mustGetString(flags, flag.Name)
|
||||||
case "cert":
|
case "cert":
|
||||||
ser.TLSCert = mustGetString(flags, flag.Name)
|
ser.TLSCert = mustGetString(flags, flag.Name)
|
||||||
case "key":
|
case "key":
|
||||||
|
|||||||
59
cmd/root.go
59
cmd/root.go
@@ -2,13 +2,16 @@ package cmd
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
|
"errors"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
"os/signal"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
"syscall"
|
||||||
|
|
||||||
"github.com/filebrowser/filebrowser/v2/auth"
|
"github.com/filebrowser/filebrowser/v2/auth"
|
||||||
fbhttp "github.com/filebrowser/filebrowser/v2/http"
|
fbhttp "github.com/filebrowser/filebrowser/v2/http"
|
||||||
@@ -50,6 +53,7 @@ func addServerFlags(flags *pflag.FlagSet) {
|
|||||||
flags.StringP("cert", "t", "", "tls certificate")
|
flags.StringP("cert", "t", "", "tls certificate")
|
||||||
flags.StringP("key", "k", "", "tls key")
|
flags.StringP("key", "k", "", "tls key")
|
||||||
flags.StringP("root", "r", ".", "root to prepend to relative paths")
|
flags.StringP("root", "r", ".", "root to prepend to relative paths")
|
||||||
|
flags.String("socket", "", "socket to listen to (cannot be used with address, port, cert nor key flags)")
|
||||||
flags.StringP("baseurl", "b", "", "base url")
|
flags.StringP("baseurl", "b", "", "base url")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -109,7 +113,10 @@ user created with the credentials from options "username" and "password".`,
|
|||||||
|
|
||||||
var listener net.Listener
|
var listener net.Listener
|
||||||
|
|
||||||
if server.TLSKey != "" && server.TLSCert != "" {
|
if server.Socket != "" {
|
||||||
|
listener, err = net.Listen("unix", server.Socket)
|
||||||
|
checkErr(err)
|
||||||
|
} else if server.TLSKey != "" && server.TLSCert != "" {
|
||||||
cer, err := tls.LoadX509KeyPair(server.TLSCert, server.TLSKey)
|
cer, err := tls.LoadX509KeyPair(server.TLSCert, server.TLSKey)
|
||||||
checkErr(err)
|
checkErr(err)
|
||||||
listener, err = tls.Listen("tcp", adr, &tls.Config{Certificates: []tls.Certificate{cer}})
|
listener, err = tls.Listen("tcp", adr, &tls.Config{Certificates: []tls.Certificate{cer}})
|
||||||
@@ -119,9 +126,15 @@ user created with the credentials from options "username" and "password".`,
|
|||||||
checkErr(err)
|
checkErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sigc := make(chan os.Signal, 1)
|
||||||
|
signal.Notify(sigc, os.Interrupt, syscall.SIGTERM)
|
||||||
|
go cleanupHandler(listener, sigc)
|
||||||
|
|
||||||
handler, err := fbhttp.NewHandler(d.store, server)
|
handler, err := fbhttp.NewHandler(d.store, server)
|
||||||
checkErr(err)
|
checkErr(err)
|
||||||
|
|
||||||
|
defer listener.Close()
|
||||||
|
|
||||||
log.Println("Listening on", listener.Addr().String())
|
log.Println("Listening on", listener.Addr().String())
|
||||||
if err := http.Serve(listener, handler); err != nil {
|
if err := http.Serve(listener, handler); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
@@ -129,6 +142,13 @@ user created with the credentials from options "username" and "password".`,
|
|||||||
}, pythonConfig{allowNoDB: true}),
|
}, pythonConfig{allowNoDB: true}),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func cleanupHandler(listener net.Listener, c chan os.Signal) {
|
||||||
|
sig := <-c
|
||||||
|
log.Printf("Caught signal %s: shutting down.", sig)
|
||||||
|
listener.Close()
|
||||||
|
os.Exit(0)
|
||||||
|
}
|
||||||
|
|
||||||
func getRunParams(flags *pflag.FlagSet, st *storage.Storage) *settings.Server {
|
func getRunParams(flags *pflag.FlagSet, st *storage.Storage) *settings.Server {
|
||||||
server, err := st.Settings.GetServer()
|
server, err := st.Settings.GetServer()
|
||||||
checkErr(err)
|
checkErr(err)
|
||||||
@@ -141,24 +161,45 @@ func getRunParams(flags *pflag.FlagSet, st *storage.Storage) *settings.Server {
|
|||||||
server.BaseURL = val
|
server.BaseURL = val
|
||||||
}
|
}
|
||||||
|
|
||||||
if val, set := getParamB(flags, "address"); set {
|
|
||||||
server.Address = val
|
|
||||||
}
|
|
||||||
|
|
||||||
if val, set := getParamB(flags, "port"); set {
|
|
||||||
server.Port = val
|
|
||||||
}
|
|
||||||
|
|
||||||
if val, set := getParamB(flags, "log"); set {
|
if val, set := getParamB(flags, "log"); set {
|
||||||
server.Log = val
|
server.Log = val
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isSocketSet := false
|
||||||
|
isAddrSet := false
|
||||||
|
|
||||||
|
if val, set := getParamB(flags, "address"); set {
|
||||||
|
server.Address = val
|
||||||
|
isAddrSet = isAddrSet || set
|
||||||
|
}
|
||||||
|
|
||||||
|
if val, set := getParamB(flags, "port"); set {
|
||||||
|
server.Port = val
|
||||||
|
isAddrSet = isAddrSet || set
|
||||||
|
}
|
||||||
|
|
||||||
if val, set := getParamB(flags, "key"); set {
|
if val, set := getParamB(flags, "key"); set {
|
||||||
server.TLSKey = val
|
server.TLSKey = val
|
||||||
|
isAddrSet = isAddrSet || set
|
||||||
}
|
}
|
||||||
|
|
||||||
if val, set := getParamB(flags, "cert"); set {
|
if val, set := getParamB(flags, "cert"); set {
|
||||||
server.TLSCert = val
|
server.TLSCert = val
|
||||||
|
isAddrSet = isAddrSet || set
|
||||||
|
}
|
||||||
|
|
||||||
|
if val, set := getParamB(flags, "socket"); set {
|
||||||
|
server.Socket = val
|
||||||
|
isSocketSet = isSocketSet || set
|
||||||
|
}
|
||||||
|
|
||||||
|
if isAddrSet && isSocketSet {
|
||||||
|
checkErr(errors.New("--socket flag cannot be used with --adress, --port, --key nor --cert"))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do not use saved Socket if address was manually set.
|
||||||
|
if isAddrSet && server.Socket != "" {
|
||||||
|
server.Socket = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
return server
|
return server
|
||||||
|
|||||||
2
frontend
2
frontend
Submodule frontend updated: 633579e738...bb0d048235
@@ -2,6 +2,7 @@ package http
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/filebrowser/filebrowser/v2/files"
|
"github.com/filebrowser/filebrowser/v2/files"
|
||||||
)
|
)
|
||||||
@@ -10,7 +11,10 @@ var withHashFile = func(fn handleFunc) handleFunc {
|
|||||||
return func(w http.ResponseWriter, r *http.Request, d *data) (int, error) {
|
return func(w http.ResponseWriter, r *http.Request, d *data) (int, error) {
|
||||||
link, err := d.store.Share.GetByHash(r.URL.Path)
|
link, err := d.store.Share.GetByHash(r.URL.Path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errToStatus(err), err
|
link, err = d.store.Share.GetByHash(ifPathWithName(r))
|
||||||
|
if err != nil {
|
||||||
|
return errToStatus(err), err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
user, err := d.store.Users.Get(d.server.Root, link.UserID)
|
user, err := d.store.Users.Get(d.server.Root, link.UserID)
|
||||||
@@ -36,6 +40,12 @@ var withHashFile = func(fn handleFunc) handleFunc {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ifPathWithName(r *http.Request) string {
|
||||||
|
pathElements := strings.Split(r.URL.Path, "/")
|
||||||
|
id := pathElements[len(pathElements)-2]
|
||||||
|
return id
|
||||||
|
}
|
||||||
|
|
||||||
var publicShareHandler = withHashFile(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) {
|
var publicShareHandler = withHashFile(func(w http.ResponseWriter, r *http.Request, d *data) (int, error) {
|
||||||
return renderJSON(w, r, d.raw)
|
return renderJSON(w, r, d.raw)
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ func (s *Settings) GetRules() []rules.Rule {
|
|||||||
type Server struct {
|
type Server struct {
|
||||||
Root string `json:"root"`
|
Root string `json:"root"`
|
||||||
BaseURL string `json:"baseURL"`
|
BaseURL string `json:"baseURL"`
|
||||||
|
Socket string `json:"socket"`
|
||||||
TLSKey string `json:"tlsKey"`
|
TLSKey string `json:"tlsKey"`
|
||||||
TLSCert string `json:"tlsCert"`
|
TLSCert string `json:"tlsCert"`
|
||||||
Port string `json:"port"`
|
Port string `json:"port"`
|
||||||
|
|||||||
Reference in New Issue
Block a user