Blob


1 package icinga
3 import (
4 "encoding/json"
5 "fmt"
6 )
8 // User represents a User object.
9 // Note that this is different from an ApiUser.
10 type User struct {
11 Name string
12 Email string
13 Groups []string
14 }
16 var testUser = User{
17 Name: "testUser",
18 Email: "test@example.com",
19 }
21 func (u User) MarshalJSON() ([]byte, error) {
22 type attrs struct {
23 Email string `json:"email"`
24 Groups []string `json:"groups,omitempty"`
25 }
26 return json.Marshal(&struct {
27 Attrs attrs `json:"attrs"`
28 }{
29 Attrs: attrs{
30 Email: u.Email,
31 Groups: u.Groups,
32 },
33 })
34 }
36 func (u User) name() string {
37 return u.Name
38 }
40 func (u User) path() string {
41 return "/objects/users/" + u.Name
42 }
44 func (u User) attrs() map[string]interface{} {
45 m := make(map[string]interface{})
46 m["groups"] = u.Groups
47 m["email"] = u.Email
48 return m
49 }
51 func (c *Client) Users() ([]User, error) {
52 objects, err := c.filterObjects("/objects/users", "")
53 if err != nil {
54 return nil, fmt.Errorf("get all users: %w", err)
55 }
56 var users []User
57 for _, o := range objects {
58 v, ok := o.(User)
59 if !ok {
60 return nil, fmt.Errorf("get all users: %T in response", v)
61 }
62 users = append(users, v)
63 }
64 return users, nil
65 }
67 func (c *Client) LookupUser(name string) (User, error) {
68 obj, err := c.lookupObject("/objects/users/" + name)
69 if err != nil {
70 return User{}, fmt.Errorf("lookup %s: %w", name, err)
71 }
72 v, ok := obj.(User)
73 if !ok {
74 return User{}, fmt.Errorf("lookup %s: result type %T is not user", name, v)
75 }
76 return v, nil
77 }
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)
84 }
85 return nil
86 }
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)
93 }
94 return nil
95 }