master
c 270 lines 6.61 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 #include "web_api_v3.h"
4 #include "v1/api_v1_calls.h"
5 #include "v2/api_v2_calls.h"
6 #include "v3/api_v3_calls.h"
7
8 static struct web_api_command api_commands_v3[] = {
9 // time-series multi-node multi-instance data APIs
10 {
11 .api = "data",
12 .hash = 0,
13 .acl = HTTP_ACL_METRICS,
14 .access = HTTP_ACCESS_ANONYMOUS_DATA,
15 .callback = api_v3_data,
16 .allow_subpaths = 0
17 },
18 // badges
19 {
20 .api = "badge.svg",
21 .hash = 0,
22 .acl = HTTP_ACL_BADGES,
23 .access = HTTP_ACCESS_ANONYMOUS_DATA,
24 .callback = api_v1_badge,
25 .allow_subpaths = 0
26 },
27 // scoring engine
28 {
29 .api = "weights",
30 .hash = 0,
31 .acl = HTTP_ACL_METRICS,
32 .access = HTTP_ACCESS_ANONYMOUS_DATA,
33 .callback = api_v2_weights,
34 .allow_subpaths = 0
35 },
36 // exporting API
37 {
38 .api = "allmetrics",
39 .hash = 0,
40 .acl = HTTP_ACL_METRICS,
41 .access = HTTP_ACCESS_ANONYMOUS_DATA,
42 .callback = api_v1_allmetrics,
43 .allow_subpaths = 0
44 },
45
46 // time-series multi-node multi-instance metadata APIs
47 {
48 .api = "context",
49 .hash = 0,
50 .acl = HTTP_ACL_METRICS,
51 .access = HTTP_ACCESS_ANONYMOUS_DATA,
52 .callback = api_v1_context,
53 .allow_subpaths = 0
54 },
55 {
56 .api = "contexts",
57 .hash = 0,
58 .acl = HTTP_ACL_METRICS,
59 .access = HTTP_ACCESS_ANONYMOUS_DATA,
60 .callback = api_v2_contexts,
61 .allow_subpaths = 0
62 },
63
64 // fulltext search
65 {
66 .api = "q",
67 .hash = 0,
68 .acl = HTTP_ACL_METRICS,
69 .access = HTTP_ACCESS_ANONYMOUS_DATA,
70 .callback = api_v2_q,
71 .allow_subpaths = 0
72 },
73
74 // multi-node multi-instance alerts APIs
75 {
76 .api = "alerts",
77 .hash = 0,
78 .acl = HTTP_ACL_ALERTS,
79 .access = HTTP_ACCESS_ANONYMOUS_DATA,
80 .callback = api_v2_alerts,
81 .allow_subpaths = 0
82 },
83 {
84 .api = "alert_transitions",
85 .hash = 0,
86 .acl = HTTP_ACL_ALERTS,
87 .access = HTTP_ACCESS_ANONYMOUS_DATA,
88 .callback = api_v2_alert_transitions,
89 .allow_subpaths = 0
90 },
91 {
92 .api = "alert_config",
93 .hash = 0,
94 .acl = HTTP_ACL_ALERTS,
95 .access = HTTP_ACCESS_ANONYMOUS_DATA,
96 .callback = api_v2_alert_config,
97 .allow_subpaths = 0
98 },
99 {
100 .api = "variable",
101 .hash = 0,
102 .acl = HTTP_ACL_ALERTS,
103 .access = HTTP_ACCESS_ANONYMOUS_DATA,
104 .callback = api_v1_variable,
105 .allow_subpaths = 0
106 },
107
108 // agent information APIs
109 {
110 .api = "info",
111 .hash = 0,
112 .acl = HTTP_ACL_NOCHECK,
113 .access = HTTP_ACCESS_NONE,
114 .callback = api_v2_info,
115 .allow_subpaths = 0
116 },
117 {
118 .api = "nodes",
119 .hash = 0,
120 .acl = HTTP_ACL_NODES,
121 .access = HTTP_ACCESS_ANONYMOUS_DATA,
122 .callback = api_v2_nodes,
123 .allow_subpaths = 0
124 },
125 {
126 .api = "node_instances",
127 .hash = 0,
128 .acl = HTTP_ACL_NODES,
129 .access = HTTP_ACCESS_ANONYMOUS_DATA,
130 .callback = api_v2_node_instances,
131 .allow_subpaths = 0
132 },
133 {
134 .api = "stream_path",
135 .hash = 0,
136 .acl = HTTP_ACL_NODES,
137 .access = HTTP_ACCESS_ANONYMOUS_DATA,
138 .callback = api_v3_stream_path,
139 .allow_subpaths = 0
140 },
141 {
142 .api = "versions",
143 .hash = 0,
144 .acl = HTTP_ACL_NOCHECK,
145 .access = HTTP_ACCESS_ANONYMOUS_DATA,
146 .callback = api_v2_versions,
147 .allow_subpaths = 0
148 },
149 {
150 .api = "progress",
151 .hash = 0,
152 .acl = HTTP_ACL_NOCHECK,
153 .access = HTTP_ACCESS_ANONYMOUS_DATA,
154 .callback = api_v2_progress,
155 .allow_subpaths = 0
156 },
157
158 // functions APIs
159 {
160 .api = "function",
161 .hash = 0,
162 .acl = HTTP_ACL_FUNCTIONS,
163 .access = HTTP_ACCESS_ANONYMOUS_DATA,
164 .callback = api_v1_function,
165 .allow_subpaths = 0
166 },
167 {
168 .api = "functions",
169 .hash = 0,
170 .acl = HTTP_ACL_FUNCTIONS,
171 .access = HTTP_ACCESS_ANONYMOUS_DATA,
172 .callback = api_v2_functions,
173 .allow_subpaths = 0
174 },
175
176 // dyncfg APIs
177 {
178 .api = "config",
179 .hash = 0,
180 .acl = HTTP_ACL_DYNCFG,
181 .access = HTTP_ACCESS_ANONYMOUS_DATA,
182 .callback = api_v1_config,
183 .allow_subpaths = 0
184 },
185
186 // settings APIs
187 {
188 .api = "settings",
189 .hash = 0,
190 .acl = HTTP_ACL_NOCHECK,
191 .access = HTTP_ACCESS_ANONYMOUS_DATA,
192 .callback = api_v3_settings,
193 .allow_subpaths = 0
194 },
195
196 {
197 .api = "stream_info",
198 .hash = 0,
199 .acl = HTTP_ACL_NOCHECK,
200 .access = HTTP_ACCESS_NONE,
201 .callback = api_v3_stream_info,
202 .allow_subpaths = 0
203 },
204
205 // WebRTC APIs
206 {
207 .api = "rtc_offer",
208 .hash = 0,
209 .acl = HTTP_ACL_ACLK | ACL_DEV_OPEN_ACCESS,
210 .access = HTTP_ACCESS_SIGNED_ID | HTTP_ACCESS_SAME_SPACE,
211 .callback = api_v2_webrtc,
212 .allow_subpaths = 0
213 },
214
215 // management APIs
216 {
217 .api = "claim",
218 .hash = 0,
219 .acl = HTTP_ACL_NOCHECK,
220 .access = HTTP_ACCESS_NONE,
221 .callback = api_v3_claim,
222 .allow_subpaths = 0
223 },
224 {
225 .api = "bearer_protection",
226 .hash = 0,
227 .acl = HTTP_ACL_ACLK | ACL_DEV_OPEN_ACCESS,
228 .access = HTTP_ACCESS_SIGNED_ID | HTTP_ACCESS_SAME_SPACE | HTTP_ACCESS_VIEW_AGENT_CONFIG | HTTP_ACCESS_EDIT_AGENT_CONFIG,
229 .callback = api_v2_bearer_protection,
230 .allow_subpaths = 0
231 },
232 {
233 .api = "bearer_get_token",
234 .hash = 0,
235 .acl = HTTP_ACL_ACLK | ACL_DEV_OPEN_ACCESS,
236 .access = HTTP_ACCESS_SIGNED_ID | HTTP_ACCESS_SAME_SPACE,
237 .callback = api_v2_bearer_get_token,
238 .allow_subpaths = 0
239 },
240 {
241 .api = "me",
242 .hash = 0,
243 .acl = HTTP_ACL_NOCHECK,
244 .access = HTTP_ACCESS_NONE,
245 .callback = api_v3_me,
246 .allow_subpaths = 0
247 },
248
249 {// terminator
250 .api = NULL,
251 .hash = 0,
252 .acl = HTTP_ACL_NONE,
253 .access = HTTP_ACCESS_NONE,
254 .callback = NULL,
255 .allow_subpaths = 0
256 },
257 };
258
259 inline int web_client_api_request_v3(RRDHOST *host, struct web_client *w, char *url_path_endpoint) {
260 static int initialized = 0;
261
262 if(unlikely(initialized == 0)) {
263 initialized = 1;
264
265 for(int i = 0; api_commands_v3[i].api ; i++)
266 api_commands_v3[i].hash = simple_hash(api_commands_v3[i].api);
267 }
268
269 return web_client_api_request_vX(host, w, url_path_endpoint, api_commands_v3);
270 }