| //go:build !embed | |
| // Package web provides embedded web assets for the application. | |
| package web | |
| import ( | |
| "context" | |
| "errors" | |
| "net/http" | |
| "github.com/gin-gonic/gin" | |
| ) | |
| // PublicSettingsProvider is an interface to fetch public settings | |
| // This stub is needed for compilation when frontend is not embedded | |
| type PublicSettingsProvider interface { | |
| GetPublicSettingsForInjection(ctx context.Context) (any, error) | |
| } | |
| // FrontendServer is a stub for non-embed builds | |
| type FrontendServer struct{} | |
| // NewFrontendServer returns an error when frontend is not embedded | |
| func NewFrontendServer(settingsProvider PublicSettingsProvider) (*FrontendServer, error) { | |
| return nil, errors.New("frontend not embedded") | |
| } | |
| // InvalidateCache is a no-op for non-embed builds | |
| func (s *FrontendServer) InvalidateCache() {} | |
| // Middleware returns a handler that returns 404 for non-embed builds | |
| func (s *FrontendServer) Middleware() gin.HandlerFunc { | |
| return func(c *gin.Context) { | |
| c.String(http.StatusNotFound, "Frontend not embedded. Build with -tags embed to include frontend.") | |
| c.Abort() | |
| } | |
| } | |
| func ServeEmbeddedFrontend() gin.HandlerFunc { | |
| return func(c *gin.Context) { | |
| c.String(http.StatusNotFound, "Frontend not embedded. Build with -tags embed to include frontend.") | |
| c.Abort() | |
| } | |
| } | |
| func HasEmbeddedFrontend() bool { | |
| return false | |
| } | |