Blame


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