in util/token.go [104:149]
func getAKFromLocalFile(configFilePath string) (accessKeyID, accessKeySecret, securityToken string, expireTime time.Time, err error) {
if _, err = os.Stat(configFilePath); err == nil {
var akInfo AKInfo
//获取token config json
encodeTokenCfg, err := ioutil.ReadFile(configFilePath)
if err != nil {
return accessKeyID, accessKeySecret, securityToken, expireTime, err
}
err = json.Unmarshal(encodeTokenCfg, &akInfo)
if err != nil {
return accessKeyID, accessKeySecret, securityToken, expireTime, err
}
keyring := akInfo.Keyring
ak, err := decrypt(akInfo.AccessKeyId, []byte(keyring))
if err != nil {
return accessKeyID, accessKeySecret, securityToken, expireTime, err
}
sk, err := decrypt(akInfo.AccessKeySecret, []byte(keyring))
if err != nil {
return accessKeyID, accessKeySecret, securityToken, expireTime, err
}
token, err := decrypt(akInfo.SecurityToken, []byte(keyring))
if err != nil {
return accessKeyID, accessKeySecret, securityToken, expireTime, err
}
layout := "2006-01-02T15:04:05Z"
t, err := time.Parse(layout, akInfo.Expiration)
if err != nil {
return accessKeyID, accessKeySecret, securityToken, expireTime, err
}
if t.Before(time.Now()) {
err = errors.New("invalid token which is expired")
}
akInfo.AccessKeyId = string(ak)
akInfo.AccessKeySecret = string(sk)
akInfo.SecurityToken = string(token)
if err != nil {
return accessKeyID, accessKeySecret, securityToken, expireTime, err
}
return akInfo.AccessKeyId, akInfo.AccessKeySecret, akInfo.SecurityToken, t, nil
}
return accessKeyID, accessKeySecret, securityToken, expireTime, errNoFile
}