2.2 KB
workspace.go
package controllers
import (
"net/http"
"github.com/readysite/readysite/pkg/application"
"github.com/readysite/readysite/website/internal/content"
"github.com/readysite/readysite/website/internal/helpers"
"github.com/readysite/readysite/website/models"
)
// Workspace returns the workspace controller.
func Workspace() (string, *WorkspaceController) {
return "workspace", &WorkspaceController{}
}
// WorkspaceController handles the admin workspace and settings.
type WorkspaceController struct {
application.BaseController
}
// Setup registers routes.
func (c *WorkspaceController) Setup(app *application.App) {
c.BaseController.Setup(app)
// Page preview (raw HTML for iframe)
http.Handle("GET /preview/{id}", app.Method(c, "Preview", RequireAuth))
}
// Handle implements Controller interface with value receiver for request isolation.
func (c WorkspaceController) Handle(r *http.Request) application.Controller {
c.Request = r
return &c
}
// Preview renders a page with template functions for iframe preview.
func (c *WorkspaceController) Preview(w http.ResponseWriter, r *http.Request) {
id := r.PathValue("id")
page, err := models.Pages.Get(id)
if err != nil {
http.Error(w, "Page not found", http.StatusNotFound)
return
}
w.Header().Set("Content-Type", "text/html; charset=utf-8")
w.Write([]byte(content.RenderPage(page, r)))
}
// SaveSettings saves site settings.
func (c *WorkspaceController) SaveSettings(w http.ResponseWriter, r *http.Request) {
helpers.SetSetting(models.SettingSiteName, r.FormValue("site_name"))
helpers.SetSetting(models.SettingSiteDescription, r.FormValue("site_description"))
helpers.SetSetting(models.SettingAIProvider, r.FormValue("ai_provider"))
helpers.SetSetting(models.SettingAIModel, r.FormValue("ai_model"))
// Save signup setting (checkbox)
signupEnabled := "false"
if r.FormValue("signup_enabled") == "on" || r.FormValue("signup_enabled") == "true" {
signupEnabled = "true"
}
helpers.SetSetting(models.SettingSignupEnabled, signupEnabled)
// Only update API key if provided (empty means keep existing)
if key := r.FormValue("ai_api_key"); key != "" {
helpers.SetSetting(models.SettingAIAPIKey, key)
}
w.Header().Set("HX-Trigger", `{"showToast":"Settings saved"}`)
}