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  }