|
@@ -11,6 +11,8 @@ import (
|
|
|
"google.golang.org/api/googleapi"
|
|
|
"google.golang.org/api/impersonate"
|
|
|
"google.golang.org/api/option"
|
|
|
+ "net/url"
|
|
|
+ "strings"
|
|
|
)
|
|
|
|
|
|
type Client struct {
|
|
@@ -84,6 +86,22 @@ func (g *Client) Verify() error {
|
|
|
return errors.New(gerr.Message)
|
|
|
}
|
|
|
|
|
|
+ var uerr *url.Error
|
|
|
+ if errors.As(err, &uerr) {
|
|
|
+ errMsg := strings.TrimSpace(uerr.Err.Error())
|
|
|
+ if strings.Contains(errMsg, "{") && strings.HasSuffix(errMsg, "}") {
|
|
|
+ // probably contains response json.
|
|
|
+ _, jsonBody, _ := strings.Cut(errMsg, "{")
|
|
|
+ jsonBody = "{" + jsonBody
|
|
|
+
|
|
|
+ var errResp errorResponse
|
|
|
+ err := json.Unmarshal([]byte(jsonBody), &errResp)
|
|
|
+ if err == nil && errResp.Error.Message != "" {
|
|
|
+ return errors.New(errResp.Error.Message)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
return err
|
|
|
}
|
|
|
|
|
@@ -158,3 +176,11 @@ func (g *Client) GetGroups() ([]idp.Group, error) {
|
|
|
|
|
|
return retval, err
|
|
|
}
|
|
|
+
|
|
|
+type errorResponse struct {
|
|
|
+ Error struct {
|
|
|
+ Code int `json:"code"`
|
|
|
+ Message string `json:"message"`
|
|
|
+ Status string `json:"status"`
|
|
|
+ } `json:"error"`
|
|
|
+}
|