github.com/artisanhe/tools@v1.0.1-0.20210607022958-19a8fef2eb04/authorization/authorization.go (about) 1 package authorization 2 3 import ( 4 "bytes" 5 "net/http" 6 ) 7 8 func ParseAuthorization(s string) (auths Authorizations) { 9 auths = Authorizations{} 10 if len(s) == 0 { 11 return 12 } 13 tokens := bytes.Split([]byte(s), []byte(";")) 14 for _, token := range tokens { 15 kv := bytes.Split(bytes.TrimSpace(token), []byte(" ")) 16 v := "" 17 if len(kv) == 2 { 18 v = string(bytes.TrimSpace(kv[1])) 19 } 20 auths[http.CanonicalHeaderKey(string(bytes.TrimSpace(kv[0])))] = v 21 } 22 return 23 } 24 25 type Authorizations map[string]string 26 27 func (auths Authorizations) Add(k string, v string) { 28 auths[http.CanonicalHeaderKey(k)] = v 29 } 30 31 func (auths Authorizations) Get(k string) string { 32 if v, ok := auths[http.CanonicalHeaderKey(k)]; ok { 33 return v 34 } 35 return "" 36 } 37 38 func (auths Authorizations) String() string { 39 buf := bytes.Buffer{} 40 41 count := 0 42 for tpe, token := range auths { 43 if count > 0 { 44 buf.WriteString("; ") 45 } 46 buf.WriteString(http.CanonicalHeaderKey(tpe)) 47 buf.WriteString(" ") 48 buf.WriteString(token) 49 count++ 50 } 51 return buf.String() 52 }