readysite / website / controllers / admin.go
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"
}
← Back