More clean handling of the contextpath.
Now using long option names for the options of converge to be consistent with the other components.
This commit is contained in:
parent
1b76add15b
commit
46d4467e94
@ -28,4 +28,4 @@ COPY --from=builder /opt/converge/bin/agent \
|
|||||||
/opt/converge/static/
|
/opt/converge/static/
|
||||||
COPY --from=builder /opt/converge/static/ /opt/converge/static/
|
COPY --from=builder /opt/converge/static/ /opt/converge/static/
|
||||||
|
|
||||||
ENTRYPOINT ["/opt/converge/bin/converge", "-s", "/opt/converge/static", "-d", "/opt/converge/static" ]
|
ENTRYPOINT ["/opt/converge/bin/converge", "--static", "/opt/converge/static", "--downloads", "/opt/converge/static" ]
|
||||||
|
@ -29,7 +29,7 @@ func parsePublicId(path string) (publicId string, _ error) {
|
|||||||
|
|
||||||
func catchAllHandler(contextPath string) func(w http.ResponseWriter, r *http.Request) {
|
func catchAllHandler(contextPath string) func(w http.ResponseWriter, r *http.Request) {
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
http.Redirect(w, r, contextPath+"/docs", http.StatusFound)
|
http.Redirect(w, r, contextPath+"docs", http.StatusFound)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,11 +50,11 @@ func printHelp(msg string) {
|
|||||||
"both on linux and on windows.\n" +
|
"both on linux and on windows.\n" +
|
||||||
"\n" +
|
"\n" +
|
||||||
"Options\n" +
|
"Options\n" +
|
||||||
"-s <contentdir>: directory where static content of converge is placed\n" +
|
"--static <contentdir>: directory where static content of converge is placed\n" +
|
||||||
"-d <downloaddir>: directory where downloads of converge are placed\n" +
|
"--downloads <downloaddir>: directory where downloads of converge are placed\n" +
|
||||||
"-c <contextpath>: by default all content is served at /. Use this option to specify\n" +
|
"--ccntext <contextpath>: by default all content is served at /. Use this option to specify\n" +
|
||||||
" a different context path. For instance to host converge at a base\n" +
|
" a different context path. For instance to host converge at a base\n" +
|
||||||
" URL of https://example.com/converge, specify /converg (and without\n" +
|
" URL of https://example.com/converge/, specify /converge/ (with\n" +
|
||||||
" trailing slash. "
|
" trailing slash. "
|
||||||
fmt.Fprintln(os.Stderr, helpText)
|
fmt.Fprintln(os.Stderr, helpText)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
@ -64,26 +64,26 @@ func main() {
|
|||||||
|
|
||||||
downloaddir := "."
|
downloaddir := "."
|
||||||
staticdir := "../static"
|
staticdir := "../static"
|
||||||
contextpath := ""
|
contextpath := "/"
|
||||||
|
|
||||||
args := os.Args[1:]
|
args := os.Args[1:]
|
||||||
for len(args) > 0 && strings.HasPrefix(args[0], "-") {
|
for len(args) > 0 && strings.HasPrefix(args[0], "-") {
|
||||||
switch args[0] {
|
switch args[0] {
|
||||||
case "-d":
|
case "--downloads":
|
||||||
if len(args) <= 1 {
|
if len(args) <= 1 {
|
||||||
printHelp("The -d option expects an argument")
|
printHelp("The --downloads option expects an argument")
|
||||||
}
|
}
|
||||||
downloaddir = args[1]
|
downloaddir = args[1]
|
||||||
args = args[1:]
|
args = args[1:]
|
||||||
case "-s":
|
case "--static":
|
||||||
if len(args) <= 1 {
|
if len(args) <= 1 {
|
||||||
printHelp("The -s option expects an argument")
|
printHelp("The --static option expects an argument")
|
||||||
}
|
}
|
||||||
staticdir = args[1]
|
staticdir = args[1]
|
||||||
args = args[1:]
|
args = args[1:]
|
||||||
case "-c":
|
case "--context":
|
||||||
if len(args) <= 1 {
|
if len(args) <= 1 {
|
||||||
printHelp("The -c option expects an argument")
|
printHelp("The --context option expects an argument")
|
||||||
}
|
}
|
||||||
contextpath = args[1]
|
contextpath = args[1]
|
||||||
args = args[1:]
|
args = args[1:]
|
||||||
@ -174,24 +174,23 @@ func main() {
|
|||||||
// websocket endpoints
|
// websocket endpoints
|
||||||
|
|
||||||
// TODO remove, simulate contextpath
|
// TODO remove, simulate contextpath
|
||||||
|
context := HttpContext{path: contextpath}
|
||||||
|
|
||||||
http.HandleFunc(contextpath+"/agent/", registrationService.Handle)
|
context.HandleFunc("agent/", registrationService.Handle)
|
||||||
http.HandleFunc(contextpath+"/client/", clientService.Handle)
|
context.HandleFunc("client/", clientService.Handle)
|
||||||
http.HandleFunc(contextpath+"/ws/sessions", sessionService.Handle)
|
context.HandleFunc("ws/sessions", sessionService.Handle)
|
||||||
|
|
||||||
// create filehandler with templating for html files.
|
// create filehandler with templating for html files.
|
||||||
http.Handle(contextpath+"/docs/", http.StripPrefix(contextpath+"/docs/", http.HandlerFunc(pageHandler)))
|
context.Handle("docs/", http.StripPrefix("docs/", http.HandlerFunc(pageHandler)))
|
||||||
http.Handle(contextpath+"/static/", http.StripPrefix(contextpath+"/static/",
|
context.Handle("static/", http.StripPrefix("static/",
|
||||||
http.FileServer(http.Dir(staticdir))))
|
http.FileServer(http.Dir(staticdir))))
|
||||||
http.Handle(contextpath+"/downloads/", http.StripPrefix(contextpath+"/downloads/",
|
context.Handle("downloads/", http.StripPrefix("downloads/",
|
||||||
http.FileServer(http.Dir(downloaddir))))
|
http.FileServer(http.Dir(downloaddir))))
|
||||||
|
|
||||||
// TODO remove for testing contextpath
|
|
||||||
|
|
||||||
http.HandleFunc(contextpath+"/", catchAllHandler(contextpath))
|
|
||||||
|
|
||||||
// create usage generator
|
// create usage generator
|
||||||
http.HandleFunc(contextpath+"/usage", generateCLIExammple)
|
context.HandleFunc("usage", generateCLIExammple)
|
||||||
|
|
||||||
|
http.HandleFunc("/", catchAllHandler(contextpath))
|
||||||
|
|
||||||
// Start HTTP server
|
// Start HTTP server
|
||||||
fmt.Println("Rendez-vous server listening on :8000")
|
fmt.Println("Rendez-vous server listening on :8000")
|
||||||
|
17
cmd/converge/httpcontext.go
Normal file
17
cmd/converge/httpcontext.go
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import "net/http"
|
||||||
|
|
||||||
|
// dealing with the context path in a simple way
|
||||||
|
|
||||||
|
type HttpContext struct {
|
||||||
|
path string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (context HttpContext) Handle(pattern string, handler http.Handler) {
|
||||||
|
http.Handle(context.path+pattern, http.StripPrefix(context.path, handler))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (context HttpContext) HandleFunc(pattern string, handler func(http.ResponseWriter, *http.Request)) {
|
||||||
|
http.HandleFunc(context.path+pattern, handler)
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user