package doc
import (
"context"
"html/template"
"log"
"net/http"
"git.sr.ht/~evanj/cms/internal/c"
"git.sr.ht/~evanj/cms/internal/m/tier"
"git.sr.ht/~evanj/cms/internal/m/user"
"git.sr.ht/~evanj/cms/internal/v"
)
var pages = map[string]*template.Template{
"/page/doc": v.MustParse("html/doc.html"),
"/page/faq": v.MustParse("html/faq.html"),
"/page/terms": v.MustParse("html/terms.html"),
"/page/privacy": v.MustParse("html/privacy.html"),
"/page/contact": v.MustParse("html/contact.html"),
"/page/billing": v.MustParse("html/billing.html"),
"/page/stripe": v.MustParse("html/stripe.html"),
"/page/tour": v.MustParse("html/tour.html"),
}
type Doc struct {
*c.Controller
log *log.Logger
}
type dber interface {
UserGet(ctx context.Context, username, password string) (user.User, error)
UserGetFromToken(ctx context.Context, token string) (user.User, error)
}
func New(c *c.Controller, log *log.Logger) *Doc {
return &Doc{c, log}
}
func (d *Doc) ServeHTTP(w http.ResponseWriter, r *http.Request) {
user, _ := d.GetCookieUser(w, r) // Don't need a user for documentation.
page, ok := pages[r.URL.Path]
if !ok {
http.NotFound(w, r)
return
}
q := r.URL.Query()
d.HTML(w, r, page, map[string]interface{}{
"User": user,
"Tiers": tier.Tiers,
// Only used for signup billing.
"StripeCheckoutSessionID": q.Get("StripeCheckoutSessionID"),
"StripePK": q.Get("StripePK"),
})
}