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  }