Files
trok/internal/server/web.go

67 lines
1.2 KiB
Go

package server
import (
"crypto/tls"
"net/http"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/filesystem"
"github.com/rs/zerolog/log"
"github.com/tuxdotrs/trok/internal/web"
"golang.org/x/crypto/acme/autocert"
)
type TrokWeb struct {
app *fiber.App
addr string
}
func NewTrokWeb(addr string) *TrokWeb {
return &TrokWeb{
app: fiber.New(),
addr: addr,
}
}
func (t *TrokWeb) Start() {
t.app.Use("/", filesystem.New(filesystem.Config{
Root: http.FS(web.EmbedDirStatic),
PathPrefix: "dist",
Browse: true,
}))
t.app.Use("/assets", filesystem.New(filesystem.Config{
Root: http.FS(web.EmbedDirStatic),
PathPrefix: "dist/assets",
Browse: true,
}))
cfg := t.GetTLSCert()
ln, err := tls.Listen("tcp", ":443", cfg)
if err != nil {
log.Panic().Msgf("unable to start trok webserver: %v", err)
}
t.app.Listener(ln)
}
func (t *TrokWeb) GetTLSCert() *tls.Config {
m := &autocert.Manager{
Prompt: autocert.AcceptTOS,
HostPolicy: autocert.HostWhitelist("trok.cloud"),
Cache: autocert.DirCache("./certs"),
}
return &tls.Config{
GetCertificate: m.GetCertificate,
NextProtos: []string{
"http/1.1", "acme-tls/1",
},
}
}
func (t *TrokWeb) Stop() {
t.app.Shutdown()
}