component/static: Seperate out static file handling
This commit is contained in:
parent
3d4db1744b
commit
88a2ba4297
9 changed files with 43 additions and 28 deletions
|
|
@ -2,13 +2,13 @@ package control
|
|||
|
||||
import (
|
||||
"context"
|
||||
"embed"
|
||||
"html/template"
|
||||
"io/fs"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
_ "embed"
|
||||
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/component"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/component/instances"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/config"
|
||||
|
|
@ -40,13 +40,6 @@ func (info *Info) Handler(route string, context context.Context, io stream.IOStr
|
|||
http.NotFound(w, r)
|
||||
})
|
||||
|
||||
// static stuff
|
||||
static, err := info.disStatic()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
mux.Handle("/dis/static/", static)
|
||||
|
||||
// render everything
|
||||
mux.Handle("/dis/index", httpx.HTMLHandler[disIndex]{
|
||||
Handler: info.disIndex,
|
||||
|
|
@ -159,18 +152,6 @@ func (info *Info) disInstance(r *http.Request) (is disInstance, err error) {
|
|||
return
|
||||
}
|
||||
|
||||
//go:embed html/static
|
||||
var htmlStaticFS embed.FS
|
||||
|
||||
func (*Info) disStatic() (http.Handler, error) {
|
||||
fs, err := fs.Sub(htmlStaticFS, "html/static")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return http.StripPrefix("/dis/static/", http.FileServer(http.FS(fs))), nil
|
||||
}
|
||||
|
||||
//go:embed "html/index.html"
|
||||
var indexTemplateStr string
|
||||
var indexTemplate = template.Must(template.New("index.html").Parse(indexTemplateStr))
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="stylesheet" href="/dis/static/dis.css">
|
||||
<link rel="stylesheet" href="/dis/static/autolink.css">
|
||||
<link rel="stylesheet" href="/static/control/dis.css">
|
||||
<link rel="stylesheet" href="/static/control/autolink.css">
|
||||
|
||||
<title>Distillery Status Page</title>
|
||||
<h1 id="top">Distillery Status Page</h1>
|
||||
|
|
@ -77,4 +77,4 @@
|
|||
Generated at <code>{{ .Time }}</code>
|
||||
</footer>
|
||||
|
||||
<script src="/dis/static/autolink.js"></script>
|
||||
<script src="/static/control/autolink.js"></script>
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="stylesheet" href="/dis/static/dis.css">
|
||||
<link rel="stylesheet" href="/dis/static/autolink.css">
|
||||
<link rel="stylesheet" href="/static/control/dis.css">
|
||||
<link rel="stylesheet" href="/static/control/autolink.css">
|
||||
|
||||
<title>Distillery Status Page - {{ .Info.Slug }}</title>
|
||||
<h1 id="top">Distillery Status Page - {{ .Info.Slug }}</h1>
|
||||
|
|
@ -70,5 +70,5 @@
|
|||
Generated at <code>{{ .Time }}</code>
|
||||
</footer>
|
||||
|
||||
<script src="/dis/static/autolink.js"></script>
|
||||
<script src="/dis/static/instance.js"></script>
|
||||
<script src="/static/control/autolink.js"></script>
|
||||
<script src="/static/control/instance.js"></script>
|
||||
32
internal/component/static/static.go
Normal file
32
internal/component/static/static.go
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
// Package static implements serving of fully static resources
|
||||
package static
|
||||
|
||||
import (
|
||||
"context"
|
||||
"embed"
|
||||
"io/fs"
|
||||
"net/http"
|
||||
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/component"
|
||||
"github.com/tkw1536/goprogram/stream"
|
||||
)
|
||||
|
||||
type Static struct {
|
||||
component.ComponentBase
|
||||
}
|
||||
|
||||
func (*Static) Name() string { return "static" }
|
||||
|
||||
func (*Static) Routes() []string { return []string{"/static/"} }
|
||||
|
||||
func (static *Static) Handler(route string, context context.Context, io stream.IOStream) (http.Handler, error) {
|
||||
fs, err := fs.Sub(htmlStaticFS, "out")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return http.StripPrefix(route, http.FileServer(http.FS(fs))), nil
|
||||
}
|
||||
|
||||
//go:embed out
|
||||
var htmlStaticFS embed.FS
|
||||
|
|
@ -11,6 +11,7 @@ import (
|
|||
"github.com/FAU-CDI/wisski-distillery/internal/component/snapshots"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/component/sql"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/component/ssh"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/component/static"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/component/triplestore"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/component/web"
|
||||
)
|
||||
|
|
@ -44,6 +45,7 @@ func (dis *Distillery) register(context *component.PoolContext) []component.Comp
|
|||
|
||||
// Control server
|
||||
ra[*control.Control](dis, context),
|
||||
ra[*static.Static](dis, context),
|
||||
r(dis, context, func(home *home.Home) {
|
||||
home.RefreshInterval = time.Minute
|
||||
}),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue