Connor McCutcheon
/ Skykit
home.go
go
package controllers
import (
	"net/http"
	"theskyscape.com/repo/skykit"
	"theskyscape.com/repo/skykit/example/models"
)
func Home() (string, skykit.Handler) {
	return "home", &HomeController{}
}
type HomeController struct {
	skykit.Controller
}
func (c *HomeController) Setup(app *skykit.Application) {
	c.Controller.Setup(app)
	http.Handle("/", c.Serve("homepage.html", nil))
	http.Handle("POST /count", c.Protect(c.increment, nil))
	// Example of a protected route that requires authentication
	http.Handle("GET /profile", c.Serve("profile.html", c.requireAuth))
}
// requireAuth is middleware that requires authentication
func (c *HomeController) requireAuth(app *skykit.Application, w http.ResponseWriter, r *http.Request) bool {
	user, err := c.Users.Authenticate(r)
	if err != nil || user == nil {
		// Redirect to signin
		c.Redirect(w, r, "/auth/signin")
		return false
	}
	return true
}
func (c HomeController) Handle(r *http.Request) skykit.Handler {
	c.Request = r
	return &c
}
func (c *HomeController) CurrentCount() int {
	counter, err := models.Counters.Get("main")
	if err != nil {
		counter, err = models.Counters.Insert(&models.Counter{
			Model: skykit.Model{ID: "main"},
			Count: 0,
		})
	}
	if err != nil {
		return 0
	}
	return counter.Count
}
func (c *HomeController) increment(w http.ResponseWriter, r *http.Request) {
	counter, err := models.Counters.Get("main")
	if err != nil {
		if counter, err = models.Counters.Insert(&models.Counter{
			Model: skykit.Model{ID: "main"},
			Count: 0,
		}); err != nil {
			w.Write([]byte("Failed to get or insert counter"))
			return
		}
	}
	counter.Count++
	go models.Counters.Update(counter)
	c.Render(w, r, "counter", nil)
}
No comments yet.