Raw
 1package web
 2
 3import (
 4	"net/http"
 5
 6	"tug/internal/transport/web/text"
 7)
 8
 9func (k *Kit) AccountPages(base []Route, overview http.Handler, extra ...Route) []Route {
10	if overview == nil {
11		panic("web: the account pages need an overview")
12	}
13	out := make([]Route, 0, len(base)+len(extra)+1)
14	for _, rt := range base {
15		switch {
16		case rt.Path == LogoutPath && rt.Method == http.MethodGet && !rt.Prefix:
17			rt.Handler = k.accountLogoutPage()
18			out = append(out, rt)
19		case rt.Path != "/" || rt.Prefix:
20			out = append(out, rt)
21		case rt.Method != http.MethodGet:
22			panic("web: the account pages own /, and the base declares " + rt.Method + " /")
23		}
24	}
25	out = append(out, Route{Method: http.MethodGet, Path: "/", Handler: overview})
26	return append(out, extra...)
27}
28
29func (k *Kit) accountLogoutPage() http.Handler {
30	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
31		p, ok := k.principal(w, r)
32		if !ok {
33			return
34		}
35		c := logoutConfirm(p)
36		c.Also, c.AlsoButton = BrowserLogoutPath, text.AccountBrowserSignOut
37		k.RenderConfirm(w, r, c)
38	})
39}