serve http/webdav/restic/rc: rename --prefix flag to --baseurl #3398

The name baseurl is widely accepted for this feature so I decided to
rename it before it made it into a stable release.
This commit is contained in:
Nick Craig-Wood 2019-08-24 09:10:50 +01:00
parent 077b45322d
commit bd61eb89bc
5 changed files with 19 additions and 18 deletions

View File

@ -68,7 +68,7 @@ func newServer(f fs.Fs, opt *httplib.Options) *server {
f: f, f: f,
vfs: vfs.New(f, &vfsflags.Opt), vfs: vfs.New(f, &vfsflags.Opt),
} }
mux.HandleFunc(s.Opt.Prefix+"/", s.handler) mux.HandleFunc(s.Opt.BaseURL+"/", s.handler)
return s return s
} }

View File

@ -26,7 +26,7 @@ func AddFlagsPrefix(flagSet *pflag.FlagSet, prefix string, Opt *httplib.Options)
flags.StringVarP(flagSet, &Opt.Realm, prefix+"realm", "", Opt.Realm, "realm for authentication") flags.StringVarP(flagSet, &Opt.Realm, prefix+"realm", "", Opt.Realm, "realm for authentication")
flags.StringVarP(flagSet, &Opt.BasicUser, prefix+"user", "", Opt.BasicUser, "User name for authentication.") flags.StringVarP(flagSet, &Opt.BasicUser, prefix+"user", "", Opt.BasicUser, "User name for authentication.")
flags.StringVarP(flagSet, &Opt.BasicPass, prefix+"pass", "", Opt.BasicPass, "Password for authentication.") flags.StringVarP(flagSet, &Opt.BasicPass, prefix+"pass", "", Opt.BasicPass, "Password for authentication.")
flags.StringVarP(flagSet, &Opt.Prefix, prefix+"prefix", "", Opt.Prefix, "Prefix for URLs.") flags.StringVarP(flagSet, &Opt.BaseURL, prefix+"baseurl", "", Opt.BaseURL, "Prefix for URLs - leave blank for root.")
} }

View File

@ -44,10 +44,13 @@ for a transfer.
--max-header-bytes controls the maximum number of bytes the server will --max-header-bytes controls the maximum number of bytes the server will
accept in the HTTP header. accept in the HTTP header.
--prefix controls the URL prefix that rclone serves from. By default --baseurl controls the URL prefix that rclone serves from. By default
rclone will serve from the root. If you used --prefix "rclone" then rclone will serve from the root. If you used --baseurl "/rclone" then
rclone would serve from a URL starting with "/rclone/". This is rclone would serve from a URL starting with "/rclone/". This is
useful if you wish to proxy rclone serve. useful if you wish to proxy rclone serve. Rclone automatically
inserts leading and trailing "/" on --baseurl, so --baseurl "rclone",
--baseurl "/rclone" and --baseurl "/rclone/" are all treated
identically.
#### Authentication #### Authentication
@ -86,7 +89,7 @@ certificate authority certificate.
// Options contains options for the http Server // Options contains options for the http Server
type Options struct { type Options struct {
ListenAddr string // Port to listen on ListenAddr string // Port to listen on
Prefix string // prefix to strip from URLs BaseURL string // prefix to strip from URLs
ServerReadTimeout time.Duration // Timeout for server reading data ServerReadTimeout time.Duration // Timeout for server reading data
ServerWriteTimeout time.Duration // Timeout for server writing data ServerWriteTimeout time.Duration // Timeout for server writing data
MaxHeaderBytes int // Maximum size of request header MaxHeaderBytes int // Maximum size of request header
@ -242,12 +245,10 @@ func NewServer(handler http.Handler, opt *Options) *Server {
log.Fatalf("Need both -cert and -key to use SSL") log.Fatalf("Need both -cert and -key to use SSL")
} }
// If a Path is set then serve from there // If a Base URL is set then serve from there
if strings.HasSuffix(s.Opt.Prefix, "/") { s.Opt.BaseURL = strings.Trim(s.Opt.BaseURL, "/")
s.Opt.Prefix = s.Opt.Prefix[:len(s.Opt.Prefix)-1] if s.Opt.BaseURL != "" {
} s.Opt.BaseURL = "/" + s.Opt.BaseURL
if s.Opt.Prefix != "" && !strings.HasPrefix(s.Opt.Prefix, "/") {
s.Opt.Prefix = "/" + s.Opt.Prefix
} }
// FIXME make a transport? // FIXME make a transport?
@ -359,7 +360,7 @@ func (s *Server) URL() string {
// (i.e. port assigned by operating system) // (i.e. port assigned by operating system)
addr = s.listener.Addr().String() addr = s.listener.Addr().String()
} }
return fmt.Sprintf("%s://%s%s/", proto, addr, s.Opt.Prefix) return fmt.Sprintf("%s://%s%s/", proto, addr, s.Opt.BaseURL)
} }
// UsingAuth returns true if authentication is required // UsingAuth returns true if authentication is required
@ -373,13 +374,13 @@ func (s *Server) UsingAuth() bool {
// should exit as the error response has already been sent // should exit as the error response has already been sent
func (s *Server) Path(w http.ResponseWriter, r *http.Request) (Path string, ok bool) { func (s *Server) Path(w http.ResponseWriter, r *http.Request) (Path string, ok bool) {
Path = r.URL.Path Path = r.URL.Path
if s.Opt.Prefix == "" { if s.Opt.BaseURL == "" {
return Path, true return Path, true
} }
if !strings.HasPrefix(Path, s.Opt.Prefix+"/") { if !strings.HasPrefix(Path, s.Opt.BaseURL+"/") {
http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound) http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)
return Path, false return Path, false
} }
Path = Path[len(s.Opt.Prefix):] Path = Path[len(s.Opt.BaseURL):]
return Path, true return Path, true
} }

View File

@ -171,7 +171,7 @@ func newServer(f fs.Fs, opt *httplib.Options) *server {
Server: httplib.NewServer(mux, opt), Server: httplib.NewServer(mux, opt),
f: f, f: f,
} }
mux.HandleFunc(s.Opt.Prefix+"/", s.handler) mux.HandleFunc(s.Opt.BaseURL+"/", s.handler)
return s return s
} }

View File

@ -133,7 +133,7 @@ func newWebDAV(f fs.Fs, opt *httplib.Options) *WebDAV {
} }
w.Server = httplib.NewServer(http.HandlerFunc(w.handler), opt) w.Server = httplib.NewServer(http.HandlerFunc(w.handler), opt)
webdavHandler := &webdav.Handler{ webdavHandler := &webdav.Handler{
Prefix: w.Server.Opt.Prefix, Prefix: w.Server.Opt.BaseURL,
FileSystem: w, FileSystem: w,
LockSystem: webdav.NewMemLS(), LockSystem: webdav.NewMemLS(),
Logger: w.logRequest, // FIXME Logger: w.logRequest, // FIXME