aboutsummaryrefslogtreecommitdiffstats
path: root/webui
diff options
context:
space:
mode:
Diffstat (limited to 'webui')
-rw-r--r--webui/codegen.yaml2
-rw-r--r--webui/handler.go31
2 files changed, 32 insertions, 1 deletions
diff --git a/webui/codegen.yaml b/webui/codegen.yaml
index 3cdb0517..1c2a91a8 100644
--- a/webui/codegen.yaml
+++ b/webui/codegen.yaml
@@ -1,4 +1,4 @@
-schema: '../graphql/schema/*.graphql'
+schema: '../api/graphql/schema/*.graphql'
overwrite: true
documents: src/**/*.graphql
generates:
diff --git a/webui/handler.go b/webui/handler.go
new file mode 100644
index 00000000..476a46cf
--- /dev/null
+++ b/webui/handler.go
@@ -0,0 +1,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)
+}