This repository has been archived by the owner on Dec 15, 2020. It is now read-only.
/
client_queries.go
138 lines (116 loc) · 3.56 KB
/
client_queries.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package service
import (
"encoding/json"
"net/http"
"net/url"
"github.com/kolide/fleet/server/kolide"
"github.com/pkg/errors"
)
// ApplyQueries sends the list of Queries to be applied (upserted) to the
// Fleet instance.
func (c *Client) ApplyQueries(specs []*kolide.QuerySpec) error {
req := applyQuerySpecsRequest{Specs: specs}
response, err := c.AuthenticatedDo("POST", "/api/v1/kolide/spec/queries", req)
if err != nil {
return errors.Wrap(err, "POST /api/v1/kolide/spec/queries")
}
defer response.Body.Close()
if response.StatusCode != http.StatusOK {
return errors.Errorf(
"apply queries received status %d %s",
response.StatusCode,
extractServerErrorText(response.Body),
)
}
var responseBody applyQuerySpecsResponse
err = json.NewDecoder(response.Body).Decode(&responseBody)
if err != nil {
return errors.Wrap(err, "decode apply query spec response")
}
if responseBody.Err != nil {
return errors.Errorf("apply query spec: %s", responseBody.Err)
}
return nil
}
// GetQuery retrieves the list of all Queries.
func (c *Client) GetQuery(name string) (*kolide.QuerySpec, error) {
verb, path := "GET", "/api/v1/kolide/spec/queries/"+url.PathEscape(name)
response, err := c.AuthenticatedDo(verb, path, nil)
if err != nil {
return nil, errors.Wrapf(err, "%s %s", verb, path)
}
defer response.Body.Close()
switch response.StatusCode {
case http.StatusNotFound:
return nil, notFoundErr{}
}
if response.StatusCode != http.StatusOK {
return nil, errors.Errorf(
"get query received status %d %s",
response.StatusCode,
extractServerErrorText(response.Body),
)
}
var responseBody getQuerySpecResponse
err = json.NewDecoder(response.Body).Decode(&responseBody)
if err != nil {
return nil, errors.Wrap(err, "decode get query spec response")
}
if responseBody.Err != nil {
return nil, errors.Errorf("get query spec: %s", responseBody.Err)
}
return responseBody.Spec, nil
}
// GetQueries retrieves the list of all Queries.
func (c *Client) GetQueries() ([]*kolide.QuerySpec, error) {
response, err := c.AuthenticatedDo("GET", "/api/v1/kolide/spec/queries", nil)
if err != nil {
return nil, errors.Wrap(err, "GET /api/v1/kolide/spec/queries")
}
defer response.Body.Close()
if response.StatusCode != http.StatusOK {
return nil, errors.Errorf(
"get queries received status %d %s",
response.StatusCode,
extractServerErrorText(response.Body),
)
}
var responseBody getQuerySpecsResponse
err = json.NewDecoder(response.Body).Decode(&responseBody)
if err != nil {
return nil, errors.Wrap(err, "decode get query spec response")
}
if responseBody.Err != nil {
return nil, errors.Errorf("get query spec: %s", responseBody.Err)
}
return responseBody.Specs, nil
}
// DeleteQuery deletes the query with the matching name.
func (c *Client) DeleteQuery(name string) error {
verb, path := "DELETE", "/api/v1/kolide/queries/"+url.PathEscape(name)
response, err := c.AuthenticatedDo(verb, path, nil)
if err != nil {
return errors.Wrapf(err, "%s %s", verb, path)
}
defer response.Body.Close()
switch response.StatusCode {
case http.StatusNotFound:
return notFoundErr{}
}
if response.StatusCode != http.StatusOK {
return errors.Errorf(
"delete query received status %d %s",
response.StatusCode,
extractServerErrorText(response.Body),
)
}
var responseBody deleteQueryResponse
err = json.NewDecoder(response.Body).Decode(&responseBody)
if err != nil {
return errors.Wrap(err, "decode get query spec response")
}
if responseBody.Err != nil {
return errors.Errorf("get query spec: %s", responseBody.Err)
}
return nil
}