Blob


1 package icinga
3 import (
4 "bytes"
5 "encoding/json"
6 "errors"
7 "fmt"
8 "net/http"
9 )
11 // User represents a User object.
12 // Note that this is different from an ApiUser.
13 type User struct {
14 Name string
15 Email string
16 Groups []string
17 }
19 var testUser = User{
20 Name: "testUser",
21 Email: "test@example.com",
22 }
24 var ErrNoUser = errors.New("no such user")
26 func (u User) MarshalJSON() ([]byte, error) {
27 type Alias User
28 return json.Marshal(&struct {
29 Attrs Alias
30 }{Attrs: (Alias)(u)})
31 }
33 func (c *Client) Users() ([]User, error) {
34 _, err := c.get("/objects/users")
35 if err != nil {
36 return nil, err
37 }
38 return []User{testUser}, nil
39 }
41 func (c *Client) LookupUser(name string) (User, error) {
42 resp, err := c.get("/objects/users/" + name)
43 if err != nil {
44 return User{}, err
45 }
46 if resp.StatusCode == http.StatusNotFound {
47 return User{}, fmt.Errorf("lookup %s: %w", name, ErrNoUser)
48 }
49 return testUser, nil
50 }
52 // CreateUser creates the User u identified by u.Name.
53 // An error is returned if the User already exists or on any other error.
54 func (c *Client) CreateUser(u User) error {
55 buf := &bytes.Buffer{}
56 if err := json.NewEncoder(buf).Encode(u); err != nil {
57 return err
58 }
59 if err := c.put("/objects/users/"+u.Name, buf); err != nil {
60 return fmt.Errorf("create %s: %w", u.Name, err)
61 }
62 return nil
63 }
65 // DeleteUser deletes the User identified by name.
66 // ErrNoUser is returned if the User doesn't exist.
67 func (c *Client) DeleteUser(name string) error {
68 if err := c.delete("/objects/users/" + name); err != nil {
69 return fmt.Errorf("delete user %s: %w", name, err)
70 }
71 return nil
72 }