mirror of
https://github.com/tuxdotrs/trok.git
synced 2025-07-06 11:56:34 +05:30
67 lines
1.2 KiB
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", t.addr, 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()
|
|
}
|