1.3 KB
admin.go
package controllers
import (
"net/http"
"github.com/readysite/readysite/pkg/application"
"github.com/readysite/readysite/website/internal/access"
"github.com/readysite/readysite/website/internal/helpers"
"github.com/readysite/readysite/website/models"
)
// Admin returns the admin controller for the React admin panel.
func Admin() (string, *AdminController) {
return "admin", &AdminController{}
}
// AdminController handles the React admin panel routes.
type AdminController struct {
application.BaseController
}
// Setup registers routes.
func (c *AdminController) Setup(app *application.App) {
c.BaseController.Setup(app)
// Catch-all route for SPA - serves admin.html for all /admin/* paths
http.Handle("GET /admin", app.Serve("admin.html", RequireAuth))
http.Handle("GET /admin/{path...}", app.Serve("admin.html", RequireAuth))
}
// Handle implements Controller interface with value receiver for request isolation.
func (c AdminController) Handle(r *http.Request) application.Controller {
c.Request = r
return &c
}
// TourCompleted returns whether the current user has completed the onboarding tour.
func (c *AdminController) TourCompleted() bool {
user := access.GetUserFromJWT(c.Request)
if user == nil {
return true
}
return helpers.GetSetting(models.SettingTourCompleted+":"+user.ID) == "true"
}