Skip to content
This repository was archived by the owner on Mar 17, 2021. It is now read-only.

Commit d769eac

Browse files
authored
Merge pull request #8 from nytm/org-users
Functionality for Managing Orgs and Users
2 parents cf649e0 + 0a62311 commit d769eac

14 files changed

+534
-48
lines changed

admin.go

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,32 +6,38 @@ import (
66
"errors"
77
"fmt"
88
"io/ioutil"
9-
10-
"github.com/grafana/grafana/pkg/api/dtos"
119
)
1210

13-
func (c *Client) CreateUserForm(settings dtos.AdminCreateUserForm) error {
14-
data, err := json.Marshal(settings)
15-
req, err := c.newRequest("POST", "/api/admin/users", bytes.NewBuffer(data))
11+
func (c *Client) CreateUser(user User) (int64, error) {
12+
id := int64(0)
13+
data, err := json.Marshal(user)
14+
req, err := c.newRequest("POST", "/api/admin/users", nil, bytes.NewBuffer(data))
1615
if err != nil {
17-
return err
16+
return id, err
1817
}
1918
resp, err := c.Do(req)
2019
if err != nil {
21-
return err
20+
return id, err
21+
}
22+
if resp.StatusCode != 200 {
23+
return id, errors.New(resp.Status)
2224
}
2325
data, err = ioutil.ReadAll(resp.Body)
2426
if err != nil {
25-
return err
27+
return id, err
2628
}
27-
if resp.StatusCode != 200 {
28-
return errors.New(resp.Status)
29+
created := struct {
30+
Id int64 `json:"id"`
31+
}{}
32+
err = json.Unmarshal(data, &created)
33+
if err != nil {
34+
return id, err
2935
}
30-
return err
36+
return created.Id, err
3137
}
3238

3339
func (c *Client) DeleteUser(id int64) error {
34-
req, err := c.newRequest("DELETE", fmt.Sprintf("/api/admin/users/%d", id), nil)
40+
req, err := c.newRequest("DELETE", fmt.Sprintf("/api/admin/users/%d", id), nil, nil)
3541
if err != nil {
3642
return err
3743
}

admin_test.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package gapi
2+
3+
import (
4+
"testing"
5+
)
6+
7+
const (
8+
createUserJSON = `{"id":1,"message":"User created"}`
9+
deleteUserJSON = `{"message":"User deleted"}`
10+
)
11+
12+
func TestCreateUser(t *testing.T) {
13+
server, client := gapiTestTools(200, createUserJSON)
14+
defer server.Close()
15+
user := User{
16+
Email: "admin@localhost",
17+
Login: "admin",
18+
Name: "Administrator",
19+
Password: "password",
20+
}
21+
resp, err := client.CreateUser(user)
22+
if err != nil {
23+
t.Error(err)
24+
}
25+
26+
if resp != 1 {
27+
t.Error("Not correctly parsing returned user message.")
28+
}
29+
}
30+
31+
func TestDeleteUser(t *testing.T) {
32+
server, client := gapiTestTools(200, deleteUserJSON)
33+
defer server.Close()
34+
35+
err := client.DeleteUser(int64(1))
36+
if err != nil {
37+
t.Error(err)
38+
}
39+
}

alertnotification.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,16 @@ import (
99
)
1010

1111
type AlertNotification struct {
12-
Id int64 `json:"id,omitempty"`
13-
Name string `json:"name"`
14-
Type string `json:"type"`
15-
IsDefault bool `json:"isDefault"`
16-
Settings interface{} `json:"settings"`
12+
Id int64 `json:"id,omitempty"`
13+
Name string `json:"name"`
14+
Type string `json:"type"`
15+
IsDefault bool `json:"isDefault"`
16+
Settings interface{} `json:"settings"`
1717
}
1818

1919
func (c *Client) AlertNotification(id int64) (*AlertNotification, error) {
2020
path := fmt.Sprintf("/api/alert-notifications/%d", id)
21-
req, err := c.newRequest("GET", path, nil)
21+
req, err := c.newRequest("GET", path, nil, nil)
2222
if err != nil {
2323
return nil, err
2424
}
@@ -46,7 +46,7 @@ func (c *Client) NewAlertNotification(a *AlertNotification) (int64, error) {
4646
if err != nil {
4747
return 0, err
4848
}
49-
req, err := c.newRequest("POST", "/api/alert-notifications", bytes.NewBuffer(data))
49+
req, err := c.newRequest("POST", "/api/alert-notifications", nil, bytes.NewBuffer(data))
5050
if err != nil {
5151
return 0, err
5252
}
@@ -77,7 +77,7 @@ func (c *Client) UpdateAlertNotification(a *AlertNotification) error {
7777
if err != nil {
7878
return err
7979
}
80-
req, err := c.newRequest("PUT", path, bytes.NewBuffer(data))
80+
req, err := c.newRequest("PUT", path, nil, bytes.NewBuffer(data))
8181
if err != nil {
8282
return err
8383
}
@@ -95,7 +95,7 @@ func (c *Client) UpdateAlertNotification(a *AlertNotification) error {
9595

9696
func (c *Client) DeleteAlertNotification(id int64) error {
9797
path := fmt.Sprintf("/api/alert-notifications/%d", id)
98-
req, err := c.newRequest("DELETE", path, nil)
98+
req, err := c.newRequest("DELETE", path, nil, nil)
9999
if err != nil {
100100
return err
101101
}

client.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,10 @@ func New(auth, baseURL string) (*Client, error) {
3939
}, nil
4040
}
4141

42-
func (c *Client) newRequest(method, requestPath string, body io.Reader) (*http.Request, error) {
42+
func (c *Client) newRequest(method, requestPath string, query url.Values, body io.Reader) (*http.Request, error) {
4343
url := c.baseURL
4444
url.Path = path.Join(url.Path, requestPath)
45+
url.RawQuery = query.Encode()
4546
req, err := http.NewRequest(method, url.String(), body)
4647
if err != nil {
4748
return req, err

dashboard.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func (c *Client) SaveDashboard(model map[string]interface{}, overwrite bool) (*D
3333
if err != nil {
3434
return nil, err
3535
}
36-
req, err := c.newRequest("POST", "/api/dashboards/db", bytes.NewBuffer(data))
36+
req, err := c.newRequest("POST", "/api/dashboards/db", nil, bytes.NewBuffer(data))
3737
if err != nil {
3838
return nil, err
3939
}
@@ -58,7 +58,7 @@ func (c *Client) SaveDashboard(model map[string]interface{}, overwrite bool) (*D
5858

5959
func (c *Client) Dashboard(slug string) (*Dashboard, error) {
6060
path := fmt.Sprintf("/api/dashboards/db/%s", slug)
61-
req, err := c.newRequest("GET", path, nil)
61+
req, err := c.newRequest("GET", path, nil, nil)
6262
if err != nil {
6363
return nil, err
6464
}
@@ -83,7 +83,7 @@ func (c *Client) Dashboard(slug string) (*Dashboard, error) {
8383

8484
func (c *Client) DeleteDashboard(slug string) error {
8585
path := fmt.Sprintf("/api/dashboards/db/%s", slug)
86-
req, err := c.newRequest("DELETE", path, nil)
86+
req, err := c.newRequest("DELETE", path, nil, nil)
8787
if err != nil {
8888
return err
8989
}

datasource.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func (c *Client) NewDataSource(s *DataSource) (int64, error) {
4949
if err != nil {
5050
return 0, err
5151
}
52-
req, err := c.newRequest("POST", "/api/datasources", bytes.NewBuffer(data))
52+
req, err := c.newRequest("POST", "/api/datasources", nil, bytes.NewBuffer(data))
5353
if err != nil {
5454
return 0, err
5555
}
@@ -80,7 +80,7 @@ func (c *Client) UpdateDataSource(s *DataSource) error {
8080
if err != nil {
8181
return err
8282
}
83-
req, err := c.newRequest("PUT", path, bytes.NewBuffer(data))
83+
req, err := c.newRequest("PUT", path, nil, bytes.NewBuffer(data))
8484
if err != nil {
8585
return err
8686
}
@@ -98,7 +98,7 @@ func (c *Client) UpdateDataSource(s *DataSource) error {
9898

9999
func (c *Client) DataSource(id int64) (*DataSource, error) {
100100
path := fmt.Sprintf("/api/datasources/%d", id)
101-
req, err := c.newRequest("GET", path, nil)
101+
req, err := c.newRequest("GET", path, nil, nil)
102102
if err != nil {
103103
return nil, err
104104
}
@@ -123,7 +123,7 @@ func (c *Client) DataSource(id int64) (*DataSource, error) {
123123

124124
func (c *Client) DeleteDataSource(id int64) error {
125125
path := fmt.Sprintf("/api/datasources/%d", id)
126-
req, err := c.newRequest("DELETE", path, nil)
126+
req, err := c.newRequest("DELETE", path, nil, nil)
127127
if err != nil {
128128
return err
129129
}

datasource_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ import (
1010
"github.com/gobs/pretty"
1111
)
1212

13+
const (
14+
createdDataSourceJSON = `{"id":1,"message":"Datasource added", "name": "test_datasource"}`
15+
)
16+
1317
func gapiTestTools(code int, body string) (*httptest.Server, *Client) {
1418
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
1519
w.WriteHeader(code)

grafana_fixtures_test.go

Lines changed: 0 additions & 5 deletions
This file was deleted.

org_users.go

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
package gapi
2+
3+
import (
4+
"bytes"
5+
"encoding/json"
6+
"errors"
7+
"fmt"
8+
"io/ioutil"
9+
)
10+
11+
type OrgUser struct {
12+
OrgId int64 `json:"orgId"`
13+
UserId int64 `json:"userId"`
14+
Email string `json:"email"`
15+
Login string `json:"login"`
16+
Role string `json:"role"`
17+
}
18+
19+
func (c *Client) OrgUsers(orgId int64) ([]OrgUser, error) {
20+
users := make([]OrgUser, 0)
21+
req, err := c.newRequest("GET", fmt.Sprintf("/api/orgs/%d/users", orgId), nil, nil)
22+
if err != nil {
23+
return users, err
24+
}
25+
resp, err := c.Do(req)
26+
if err != nil {
27+
return users, err
28+
}
29+
if resp.StatusCode != 200 {
30+
return users, errors.New(resp.Status)
31+
}
32+
data, err := ioutil.ReadAll(resp.Body)
33+
if err != nil {
34+
return users, err
35+
}
36+
err = json.Unmarshal(data, &users)
37+
if err != nil {
38+
return users, err
39+
}
40+
return users, err
41+
}
42+
43+
func (c *Client) AddOrgUser(orgId int64, user, role string) error {
44+
dataMap := map[string]string{
45+
"loginOrEmail": user,
46+
"role": role,
47+
}
48+
data, err := json.Marshal(dataMap)
49+
req, err := c.newRequest("POST", fmt.Sprintf("/api/orgs/%d/users", orgId), nil, bytes.NewBuffer(data))
50+
if err != nil {
51+
return err
52+
}
53+
resp, err := c.Do(req)
54+
if err != nil {
55+
return err
56+
}
57+
if resp.StatusCode != 200 {
58+
return errors.New(resp.Status)
59+
}
60+
return err
61+
}
62+
63+
func (c *Client) UpdateOrgUser(orgId, userId int64, role string) error {
64+
dataMap := map[string]string{
65+
"role": role,
66+
}
67+
data, err := json.Marshal(dataMap)
68+
req, err := c.newRequest("PATCH", fmt.Sprintf("/api/orgs/%d/users/%d", orgId, userId), nil, bytes.NewBuffer(data))
69+
if err != nil {
70+
return err
71+
}
72+
resp, err := c.Do(req)
73+
if err != nil {
74+
return err
75+
}
76+
if resp.StatusCode != 200 {
77+
return errors.New(resp.Status)
78+
}
79+
return err
80+
}
81+
82+
func (c *Client) RemoveOrgUser(orgId, userId int64) error {
83+
req, err := c.newRequest("DELETE", fmt.Sprintf("/api/orgs/%d/users/%d", orgId, userId), nil, nil)
84+
if err != nil {
85+
return err
86+
}
87+
resp, err := c.Do(req)
88+
if err != nil {
89+
return err
90+
}
91+
if resp.StatusCode != 200 {
92+
return errors.New(resp.Status)
93+
}
94+
return err
95+
}

0 commit comments

Comments
 (0)