@@ -34,6 +34,11 @@ type token struct {
3434 IDToken string `json:"id_token"`
3535}
3636
37+ type httpError struct {
38+ Error string `json:"error"`
39+ ErrorDesc string `json:"error_description"`
40+ }
41+
3742// getRefreshTokenFromBrowserFlow initialize an OAuth login workflow via the browser and returns a refresh token valid for a given url
3843// see: https://github.com/int128/oauth2cli/blob/master/example/main.go
3944func getRefreshTokenFromBrowserFlow (domain , helperID , helperSecret string ) (string , error ) {
@@ -106,6 +111,7 @@ func getRefreshTokenFromCache(key string) (string, error) {
106111// It returns a raw IAP auth token and any error encountered.
107112func GetIAPAuthToken (domain , helperID , helperSecret , IAPclientID string ) (string , error ) {
108113 var result token
114+ var errorMesg httpError
109115
110116 refreshToken , err := getRefreshTokenFromCache (domain )
111117 if err != nil {
@@ -133,9 +139,16 @@ func GetIAPAuthToken(domain, helperID, helperSecret, IAPclientID string) (string
133139 return "" , fmt .Errorf ("could not get exchange 'refresh_token' for IAP Auth Token: %s" , err .Error ())
134140 }
135141
142+ if resp .StatusCode != 200 {
143+ json .NewDecoder (resp .Body ).Decode (& errorMesg )
144+ return "" , fmt .Errorf ("could not get exchange 'refresh_token' for IAP Auth Token: HTTP Error Code: %s .... Error Description: %s" , errorMesg .ErrorDesc , errorMesg .Error )
145+ }
146+
136147 log .Debug ().Msgf ("GetIAPAuthToken - successfully used 'refresh_token' to claim IAP Auth Token" )
137148
138- json .NewDecoder (resp .Body ).Decode (& result )
149+ if err := json .NewDecoder (resp .Body ).Decode (& result ); err != nil {
150+ return "" , fmt .Errorf ("could not get exchange 'refresh_token' for IAP Auth Token: %s" , err .Error ())
151+ }
139152
140153 return result .IDToken , nil
141154}
0 commit comments