-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathhttp.go
36 lines (32 loc) · 998 Bytes
/
http.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package main
import (
"net/http"
"path"
"strings"
)
// ShiftPath splits off the first component of p, which will be cleaned of
// relative components before processing. head will never contain a slash and
// tail will always be a rooted path without trailing slash.
//
// From https://blog.merovius.de/2017/06/18/how-not-to-use-an-http-router.html
func ShiftPath(p string) (head, tail string) {
p = path.Clean("/" + p)
i := strings.Index(p[1:], "/") + 1
if i <= 0 {
//log.Printf("head: %s, tail: /", p[1:])
return p[1:], "/"
}
//log.Printf("head: %s, tail: %s", p[1:i], p[i:])
return p[1:i], p[i:]
}
func ServeWebInterface(listenAddr string, webInterface http.Handler, staticFiles http.FileSystem) error {
router := http.NewServeMux()
router.Handle("/js/", http.FileServer(staticFiles))
router.Handle("/css/", http.FileServer(staticFiles))
router.Handle("/", webInterface)
server := &http.Server{
Addr: listenAddr,
Handler: router,
}
return server.ListenAndServe()
}