8 // User represents a User object.
9 // Note that this is different from an ApiUser.
18 Email: "test@example.com",
21 func (u User) MarshalJSON() ([]byte, error) {
23 Email string `json:"email"`
24 Groups []string `json:"groups,omitempty"`
26 return json.Marshal(&struct {
27 Attrs attrs `json:"attrs"`
36 func (u User) name() string {
40 func (u User) path() string {
41 return "/objects/users/" + u.Name
44 func (u User) attrs() map[string]interface{} {
45 m := make(map[string]interface{})
46 m["groups"] = u.Groups
51 func (c *Client) Users() ([]User, error) {
52 objects, err := c.filterObjects("/objects/users", "")
54 return nil, fmt.Errorf("get all users: %w", err)
57 for _, o := range objects {
60 return nil, fmt.Errorf("get all users: %T in response", v)
62 users = append(users, v)
67 func (c *Client) LookupUser(name string) (User, error) {
68 obj, err := c.lookupObject("/objects/users/" + name)
70 return User{}, fmt.Errorf("lookup %s: %w", name, err)
74 return User{}, fmt.Errorf("lookup %s: result type %T is not user", name, v)
79 // CreateUser creates user.
80 // An error is returned if the User already exists or on any other error.
81 func (c *Client) CreateUser(user User) error {
82 if err := c.createObject(user); err != nil {
83 return fmt.Errorf("create user %s: %w", user.Name, err)
88 // DeleteUser deletes the User identified by name.
89 // ErrNotExist is returned if the User doesn't exist.
90 func (c *Client) DeleteUser(name string) error {
91 if err := c.deleteObject("/objects/users/" + name); err != nil {
92 return fmt.Errorf("delete user %s: %w", name, err)