-
Notifications
You must be signed in to change notification settings - Fork 0
/
template_data.go
134 lines (105 loc) · 2.18 KB
/
template_data.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package handler
import (
"context"
"fmt"
"html/template"
"net/url"
"github.com/polyscone/tofu/httpx"
)
type CSRF struct {
Ctx context.Context
}
func (c CSRF) Token() string {
return httpx.MaskedCSRFToken(c.Ctx)
}
type Form struct {
url.Values
}
func (f Form) GetOr(key string, fallback any) string {
if _, ok := f.Values[key]; !ok {
return fmt.Sprintf("%v", fallback)
}
return f.Get(key)
}
func (f Form) GetAll(key string) []string {
return f.Values[key]
}
func (f Form) GetAllOr(key string, fallback any) ([]string, error) {
if _, ok := f.Values[key]; !ok {
return TmplToStrings(fallback)
}
values := f.Values[key]
if values == nil {
return TmplToStrings(fallback)
}
return values, nil
}
type Query struct {
url.Values
}
func (q Query) GetOr(key string, fallback any) string {
if _, ok := q.Values[key]; !ok {
return fmt.Sprintf("%v", fallback)
}
return q.Get(key)
}
func (q Query) GetAll(key string) []string {
return q.Values[key]
}
func (q Query) GetAllOr(key string, fallback any) ([]string, error) {
if _, ok := q.Values[key]; !ok {
return TmplToStrings(fallback)
}
values := q.Values[key]
if values == nil {
return TmplToStrings(fallback)
}
return values, nil
}
func (q Query) String() template.URL {
return TmplQueryString(q.Values)
}
func (q Query) Replace(pairs ...any) (template.URL, error) {
return TmplQueryReplace(q.Values, pairs...)
}
type Vars map[string]any
func (v Vars) Merge(rhs Vars) Vars {
if rhs == nil {
return v
}
if v == nil {
v = make(Vars, len(rhs))
}
for key, value := range rhs {
v[key] = value
}
return v
}
type URL struct {
Scheme string
Host string
Path template.URL
Query Query
}
type AppData struct {
Name string
ShortName string
Description string
ThemeColour string
}
type SessionData struct {
// General session keys
Flash []string
FlashImportant []string
FlashError []string
Redirect string
HighlightID string
// Account session keys
UserID string
Email string
TOTPMethod string
HasActivatedTOTP bool
IsAwaitingTOTP bool
IsSignedIn bool
KnownPasswordBreachCount int
}