-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathheader.go
99 lines (81 loc) · 2.09 KB
/
header.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
package jwt
import (
"encoding/json"
"gopkg.in/jwt.v1/crypto"
)
//type Header struct {
// HeaderData map[HeaderTypes]interface{}
// //alg string
//}
type Header map[HeaderTypes]interface{}
type HeaderTypes string
const HeaderMax = 11
const (
HEADER_ALGORITHM HeaderTypes = "alg"
HEADER_JWK_SET_URL HeaderTypes = "jku"
HEADER_JSON_WEB_KEY HeaderTypes = "jwk"
HEADER_KEY_ID HeaderTypes = "kid"
HEADER_X509_URL HeaderTypes = "x5u"
HEADER_X509_CERTIFICATE_CHAIN HeaderTypes = "x5c"
HEADER_X509_CERTIFICATE_SHA1_THUMBPRINT HeaderTypes = "x5t"
HEADER_X509_CERTIFICATE_SHA256_THUMBPRINT HeaderTypes = "x5t#S256"
HEADER_TYPE HeaderTypes = "typ"
HEADER_CONTENT_TYPE HeaderTypes = "cty"
HEADER_CRITICAL HeaderTypes = "crit"
)
func NewHeader() *Header {
tmp := (Header)(make(map[HeaderTypes]interface{}, HeaderMax))
return &tmp
}
func NewJWTHeader() *Header {
h := NewHeader()
h.Register(HEADER_TYPE, "JWT")
return h
}
func DefaultHeader() *Header {
h := NewHeader()
h.Register(HEADER_TYPE, "JWT")
h.Register(HEADER_ALGORITHM, "HS256")
return h
}
func (h *Header) Register(types HeaderTypes, v interface{}) {
(*h)[types] = v
}
func (h *Header) Find(types HeaderTypes) (interface{}, bool) {
if v, b := (*h)[types]; b {
return v, true
}
return nil, false
}
func (h *Header) Remove(types HeaderTypes) {
delete(*h, types)
}
func (h *Header) Has(types HeaderTypes) bool {
_, flag := (*h)[types]
return flag
}
func (h *Header) Base64() string {
b, e := json.Marshal(*h)
if e != nil {
return ""
}
return Base64Encode(b)
}
func ParseHeader(ser string) (*Header, error) {
header := new(Header)
e := ParseBase64(ser, header)
if e != nil {
return nil, e
}
return header, nil
}
func (h *Header) Alg() crypto.SigningNames {
if v, b := (*h)["alg"]; b == true {
if v, b := v.(string); b == true {
names := crypto.SigningNames(v)
return names
}
return ""
}
return ""
}