aboutsummaryrefslogtreecommitdiffstats
path: root/webui/handler.go
blob: 476a46cf0f9aa8a64fd64c2a87827c3142ba8aaa (plain) (blame)
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
package webui

import (
	"net/http"
	"os"
)

// implement a http.FileSystem that will serve a default file when the looked up
// file doesn't exist. Useful for Single-Page App that implement routing client
// side, where the server has to return the root index.html file for every route.
type fileSystemWithDefault struct {
	http.FileSystem
	defaultFile string
}

func (fswd *fileSystemWithDefault) Open(name string) (http.File, error) {
	f, err := fswd.FileSystem.Open(name)
	if os.IsNotExist(err) {
		return fswd.FileSystem.Open(fswd.defaultFile)
	}
	return f, err
}

func NewHandler() http.Handler {
	assetsHandler := &fileSystemWithDefault{
		FileSystem:  WebUIAssets,
		defaultFile: "index.html",
	}

	return http.FileServer(assetsHandler)
}