github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/actor/v7action/token.go (about) 1 package v7action 2 3 import ( 4 "strings" 5 "time" 6 7 "github.com/SermoDigital/jose/jws" 8 ) 9 10 func (actor Actor) RefreshAccessToken() (string, error) { 11 var expiresIn time.Duration 12 13 refreshToken := actor.Config.RefreshToken() 14 15 accessTokenString := strings.TrimPrefix(actor.Config.AccessToken(), "bearer ") 16 token, err := jws.ParseJWT([]byte(accessTokenString)) 17 18 if err == nil { 19 expiration, ok := token.Claims().Expiration() 20 if ok { 21 expiresIn = time.Until(expiration) 22 } 23 } 24 25 if err != nil || expiresIn < time.Minute { 26 tokens, err := actor.UAAClient.RefreshAccessToken(refreshToken) 27 if err != nil { 28 return "", err 29 } 30 31 actor.Config.SetAccessToken(tokens.AuthorizationToken()) 32 actor.Config.SetRefreshToken(tokens.RefreshToken) 33 34 return tokens.AuthorizationToken(), nil 35 } 36 return actor.Config.AccessToken(), nil 37 }