package handlers import ( "encoding/json" "html/template" "net/http" "path/filepath" "git.nixc.us/a250/ss-atlas/internal/config" "git.nixc.us/a250/ss-atlas/internal/ldap" ssstripe "git.nixc.us/a250/ss-atlas/internal/stripe" "git.nixc.us/a250/ss-atlas/internal/swarm" "git.nixc.us/a250/ss-atlas/internal/version" "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" ) type App struct { cfg *config.Config stripe *ssstripe.Client ldap *ldap.Client swarm *swarm.Client tmpl *template.Template } func NewRouter(cfg *config.Config, sc *ssstripe.Client, lc *ldap.Client, sw *swarm.Client) http.Handler { tmplPattern := filepath.Join(cfg.TemplatePath, "pages", "*.html") tmpl := template.Must(template.ParseGlob(tmplPattern)) app := &App{ cfg: cfg, stripe: sc, ldap: lc, swarm: sw, tmpl: tmpl, } r := chi.NewRouter() r.Use(middleware.Logger) r.Use(middleware.Recoverer) r.Use(middleware.RealIP) r.Get("/", app.handleLanding) r.Get("/success", app.handleSuccess) r.Get("/activate", app.handleActivateGet) r.Post("/activate", app.handleActivatePost) r.Get("/dashboard", app.handleDashboard) r.Post("/stack-manage", app.handleStackManage) r.Post("/subscribe", app.handleCreateCheckout) r.Post("/resend-reset", app.handleResendReset) r.Post("/portal", app.handlePortal) r.Post("/resubscribe", app.handleResubscribe) r.Post("/webhook/stripe", app.handleWebhook) r.Get("/health", func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) w.Write([]byte("ok")) }) r.Get("/version", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(map[string]string{ "commit": version.Commit, "build_time": version.BuildTime, }) }) return r }