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}