github.com/asifdxtreme/cli@v6.1.3-0.20150123051144-9ead8700b4ae+incompatible/cf/configuration/core_config/access_token.go (about) 1 package core_config 2 3 import ( 4 "encoding/base64" 5 "encoding/json" 6 "strings" 7 ) 8 9 type TokenInfo struct { 10 Username string `json:"user_name"` 11 Email string `json:"email"` 12 UserGuid string `json:"user_id"` 13 } 14 15 func NewTokenInfo(accessToken string) (info TokenInfo) { 16 tokenJson, err := DecodeAccessToken(accessToken) 17 18 if err != nil { 19 return 20 } 21 info = TokenInfo{} 22 err = json.Unmarshal(tokenJson, &info) 23 return 24 } 25 26 func DecodeAccessToken(accessToken string) (tokenJson []byte, err error) { 27 tokenParts := strings.Split(accessToken, " ") 28 29 if len(tokenParts) < 2 { 30 return 31 } 32 33 token := tokenParts[1] 34 encodedParts := strings.Split(token, ".") 35 36 if len(encodedParts) < 3 { 37 return 38 } 39 40 encodedTokenJson := encodedParts[1] 41 return base64Decode(encodedTokenJson) 42 } 43 44 func base64Decode(encodedData string) ([]byte, error) { 45 return base64.StdEncoding.DecodeString(restorePadding(encodedData)) 46 } 47 48 func restorePadding(seg string) string { 49 switch len(seg) % 4 { 50 case 2: 51 seg = seg + "==" 52 case 3: 53 seg = seg + "=" 54 } 55 return seg 56 }