-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgen.go
125 lines (112 loc) · 2.08 KB
/
gen.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
//go:build ignore
// +build ignore
package main
import (
"log"
"net/http"
"os"
"os/exec"
"sort"
"strings"
"text/template"
"time"
)
var commonHeaders = []string{
"Accept",
"Accept-Charset",
"Accept-Encoding",
"Accept-Language",
"Accept-Ranges",
"Access-Control-Allow-Credentials",
"Access-Control-Allow-Headers",
"Access-Control-Allow-Methods",
"Access-Control-Allow-Origin",
"Access-Control-Max-Age",
"Alt-Svc",
"Age",
"Authorization",
"Cache-Control",
"Connection",
"Content-Disposition",
"Content-Encoding",
"Content-Language",
"Content-Length",
"Content-Range",
"Content-Security-Policy",
"Content-Security-Policy-Report-Only",
"Content-Type",
"Cookie",
"Date",
"Dnt",
"Etag",
"Expect-Ct",
"Expect",
"Expires",
"Forwarded",
"Host",
"If-Match",
"If-Modified-Since",
"If-None-Match",
"If-Unmodified-Since",
"Keep-Alive",
"Last-Modified",
"Link",
"Location",
"Origin",
"Pragma",
"Referer",
"Request-Id",
"Retry-After",
"Server",
"Set-Cookie",
"Strict-Transport-Security",
"Upgrade",
"User-Agent",
"Vary",
"Via",
"Www-Authenticate",
"X-Content-Type-Options",
"X-Frame-Options",
"X-Forwarded-For",
"X-Forwarded-Host",
"X-Forwarded-Proto",
}
func main() {
const name = "httpheaders.go"
generate(name)
format(name)
}
func generate(name string) {
fp, err := os.Create(name)
if err != nil {
log.Fatal(err)
}
defer fp.Close()
sort.Strings(commonHeaders)
headers := make([][2]string, 0)
for _, header := range commonHeaders {
headers = append(headers, [2]string{makeVar(header), http.CanonicalHeaderKey(header)})
}
tmpl.Execute(fp, struct {
Timestamp time.Time
Headers [][2]string
}{
Timestamp: time.Now(),
Headers: headers,
})
}
func format(name string) {
exec.Command("gofmt", "-w", name).Run()
}
func makeVar(k string) string {
return strings.ReplaceAll(k, "-", "")
}
var tmpl = template.Must(template.New("").Parse(`// Code generated by go generate; DO NOT EDIT.
// {{ .Timestamp }}
package httpheaders
//go:generate go run gen.go
const (
{{range $header := .Headers}} {{index $header 0}} = "{{index $header 1}}"
{{end}}
)
`))