// ModelUserInfo returns information on all users in the model. func (c *Client) ModelUserInfo() (params.ModelUserInfoResults, error) { var results params.ModelUserInfoResults env, err := c.api.stateAccessor.Model() if err != nil { return results, errors.Trace(err) } users, err := env.Users() if err != nil { return results, errors.Trace(err) } for _, user := range users { var lastConn *time.Time userLastConn, err := user.LastConnection() if err != nil { if !state.IsNeverConnectedError(err) { return results, errors.Trace(err) } } else { lastConn = &userLastConn } results.Results = append(results.Results, params.ModelUserInfoResult{ Result: ¶ms.ModelUserInfo{ UserName: user.UserName(), DisplayName: user.DisplayName(), CreatedBy: user.CreatedBy(), DateCreated: user.DateCreated(), LastConnection: lastConn, }, }) } return results, nil }
// ModelUserInfo returns information on all users in the model. func (c *Client) ModelUserInfo() (params.ModelUserInfoResults, error) { var results params.ModelUserInfoResults if err := c.checkCanRead(); err != nil { return results, err } env, err := c.api.stateAccessor.Model() if err != nil { return results, errors.Trace(err) } users, err := env.Users() if err != nil { return results, errors.Trace(err) } for _, user := range users { var result params.ModelUserInfoResult userInfo, err := modelInfo(c.api.state(), user) if err != nil { result.Error = common.ServerError(err) } else { result.Result = &userInfo } results.Results = append(results.Results, result) } return results, nil }
func (s *serverSuite) TestModelUsersInfo(c *gc.C) { testAdmin := s.AdminUserTag(c) owner, err := s.State.UserAccess(testAdmin, s.State.ModelTag()) c.Assert(err, jc.ErrorIsNil) localUser1 := s.makeLocalModelUser(c, "ralphdoe", "Ralph Doe") localUser2 := s.makeLocalModelUser(c, "samsmith", "Sam Smith") remoteUser1 := s.Factory.MakeModelUser(c, &factory.ModelUserParams{User: "******", DisplayName: "Bob Johns", Access: permission.WriteAccess}) remoteUser2 := s.Factory.MakeModelUser(c, &factory.ModelUserParams{User: "******", DisplayName: "Nic Shaw", Access: permission.WriteAccess}) results, err := s.client.ModelUserInfo() c.Assert(err, jc.ErrorIsNil) var expected params.ModelUserInfoResults for _, r := range []struct { user permission.UserAccess info *params.ModelUserInfo }{ { owner, ¶ms.ModelUserInfo{ UserName: owner.UserName, DisplayName: owner.DisplayName, Access: "admin", }, }, { localUser1, ¶ms.ModelUserInfo{ UserName: "******", DisplayName: "Ralph Doe", Access: "admin", }, }, { localUser2, ¶ms.ModelUserInfo{ UserName: "******", DisplayName: "Sam Smith", Access: "admin", }, }, { remoteUser1, ¶ms.ModelUserInfo{ UserName: "******", DisplayName: "Bob Johns", Access: "write", }, }, { remoteUser2, ¶ms.ModelUserInfo{ UserName: "******", DisplayName: "Nic Shaw", Access: "write", }, }, } { r.info.LastConnection = lastConnPointer(c, r.user, s.State) expected.Results = append(expected.Results, params.ModelUserInfoResult{Result: r.info}) } sort.Sort(ByUserName(expected.Results)) sort.Sort(ByUserName(results.Results)) c.Assert(results, jc.DeepEquals, expected) }