2024-09-25 19:45:28 -04:00
|
|
|
package nebula
|
2024-09-25 20:27:00 -04:00
|
|
|
|
|
|
|
import (
|
2024-09-30 21:16:13 -04:00
|
|
|
"context"
|
2024-09-25 20:27:00 -04:00
|
|
|
"embed"
|
2024-09-26 14:51:14 -04:00
|
|
|
"io/fs"
|
2024-09-25 20:27:00 -04:00
|
|
|
"net/http"
|
|
|
|
|
|
|
|
"github.com/labstack/echo/v4"
|
2024-09-30 21:16:13 -04:00
|
|
|
|
|
|
|
"github.com/onsonr/sonr/pkg/nebula/models"
|
2024-09-25 20:27:00 -04:00
|
|
|
)
|
|
|
|
|
|
|
|
//go:embed assets
|
|
|
|
var embeddedFiles embed.FS
|
|
|
|
|
2024-10-01 14:42:11 -04:00
|
|
|
//go:embed nebula.pkl
|
2024-09-30 21:27:02 -04:00
|
|
|
var config []byte
|
2024-09-30 20:08:38 -04:00
|
|
|
|
2024-09-26 14:51:14 -04:00
|
|
|
func getHTTPFS() (http.FileSystem, error) {
|
|
|
|
fsys, err := fs.Sub(embeddedFiles, "assets")
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
return http.FS(fsys), nil
|
|
|
|
}
|
|
|
|
|
2024-09-26 13:05:09 -04:00
|
|
|
// UseAssets is a middleware that serves static files from the embedded assets
|
2024-09-26 14:51:14 -04:00
|
|
|
func UseAssets(e *echo.Echo) error {
|
2024-09-30 21:27:02 -04:00
|
|
|
err := models.LoadFromString(context.Background(), string(config))
|
2024-09-30 21:16:13 -04:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2024-09-26 14:51:14 -04:00
|
|
|
fsys, err := getHTTPFS()
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
assets := http.FileServer(fsys)
|
|
|
|
e.GET("/", echo.WrapHandler(assets))
|
|
|
|
e.GET("/assets/*", echo.WrapHandler(http.StripPrefix("/assets/", assets)))
|
2024-09-30 21:27:02 -04:00
|
|
|
e.GET("/_nebula/config", handleGetConfig)
|
2024-09-26 14:51:14 -04:00
|
|
|
return nil
|
2024-09-25 20:27:00 -04:00
|
|
|
}
|
2024-09-30 21:27:02 -04:00
|
|
|
|
|
|
|
func handleGetConfig(c echo.Context) error {
|
|
|
|
return c.Blob(http.StatusOK, "application/octet-stream", config)
|
|
|
|
}
|