forked from Nixius/authelia
69 lines
1.9 KiB
Go
69 lines
1.9 KiB
Go
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")
|
|
partialsPattern := filepath.Join(cfg.TemplatePath, "partials", "*.html")
|
|
tmpl := template.Must(template.Must(template.ParseGlob(partialsPattern)).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
|
|
}
|