Browse Source

client: if User unmarshal fails, decode user using full roles

Fixes #3702
Anthony Romano 9 years ago
parent
commit
868728e5b5
1 changed files with 13 additions and 1 deletions
  1. 13 1
      client/auth_user.go

+ 13 - 1
client/auth_user.go

@@ -36,6 +36,11 @@ type User struct {
 	Revoke   []string `json:"revoke,omitempty"`
 }
 
+type UserRoles struct {
+	User  string `json:"user"`
+	Roles []Role `json:"roles"`
+}
+
 func v2AuthURL(ep url.URL, action string, name string) *url.URL {
 	if name != "" {
 		ep.Path = path.Join(ep.Path, defaultV2AuthPrefix, action, name)
@@ -289,7 +294,14 @@ func (u *httpAuthUserAPI) modUser(ctx context.Context, req *authUserAPIAction) (
 	}
 	var user User
 	if err = json.Unmarshal(body, &user); err != nil {
-		return nil, err
+		var userR UserRoles
+		if urerr := json.Unmarshal(body, &userR); urerr != nil {
+			return nil, err
+		}
+		user.User = userR.User
+		for _, r := range userR.Roles {
+			user.Roles = append(user.Roles, r.Role)
+		}
 	}
 	return &user, nil
 }