diff --git a/server/options.go b/server/options.go index 3d7f69ca..e4e19067 100644 --- a/server/options.go +++ b/server/options.go @@ -7,6 +7,7 @@ import ( type Options struct { Address string `hcl:"address" flagName:"address" flagSName:"a" flagDescribe:"IP address to listen" default:"0.0.0.0"` Port string `hcl:"port" flagName:"port" flagSName:"p" flagDescribe:"Port number to liten" default:"8080"` + BaseURL string `hcl:"base_url" flagName:"base_url" flagSName:"b" flagDescribe:"Listen by this PATH" default:"/"` PermitWrite bool `hcl:"permit_write" flagName:"permit-write" flagSName:"w" flagDescribe:"Permit clients to write to the TTY (BE CAREFUL)" default:"false"` EnableBasicAuth bool `hcl:"enable_basic_auth" default:"false"` Credential string `hcl:"credential" flagName:"credential" flagSName:"c" flagDescribe:"Credential for Basic Authentication (ex: user:pass, default disabled)" default:""` diff --git a/server/server.go b/server/server.go index 6411e714..0e6fae18 100644 --- a/server/server.go +++ b/server/server.go @@ -9,6 +9,8 @@ import ( "log" "net" "net/http" + "net/url" + gPath "path" "regexp" noesctmpl "text/template" "time" @@ -95,10 +97,15 @@ func (server *Server) Run(ctx context.Context, options ...RunOption) error { counter := newCounter(time.Duration(server.options.Timeout) * time.Second) - path := "/" + baseURL, err := url.Parse(server.options.BaseURL) + if err != nil { + return errors.Wrapf(err, "failed to setup an HTTP server") + } + rPath := "" if server.options.EnableRandomUrl { - path = "/" + randomstring.Generate(server.options.RandomUrlLength) + "/" + rPath = randomstring.Generate(server.options.RandomUrlLength) } + path := gPath.Join("/", baseURL.Path, rPath) + "/" handlers := server.setupHandlers(cctx, cancel, path, counter) srv, err := server.setupHTTPServer(handlers)