master
c 184 lines 4.68 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 #include "web_api_v2.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_v2[] = {
9 #if defined(ENABLE_API_v2)
10 // time-series multi-node multi-instance data APIs
11 {
12 .api = "data",
13 .hash = 0,
14 .acl = HTTP_ACL_METRICS,
15 .access = HTTP_ACCESS_ANONYMOUS_DATA,
16 .callback = api_v2_data,
17 .allow_subpaths = 0
18 },
19 {
20 .api = "weights",
21 .hash = 0,
22 .acl = HTTP_ACL_METRICS,
23 .access = HTTP_ACCESS_ANONYMOUS_DATA,
24 .callback = api_v2_weights,
25 .allow_subpaths = 0
26 },
27
28 // time-series multi-node multi-instance metadata APIs
29 {
30 .api = "contexts",
31 .hash = 0,
32 .acl = HTTP_ACL_METRICS,
33 .access = HTTP_ACCESS_ANONYMOUS_DATA,
34 .callback = api_v2_contexts,
35 .allow_subpaths = 0
36 },
37 {
38 // full text search
39 .api = "q",
40 .hash = 0,
41 .acl = HTTP_ACL_METRICS,
42 .access = HTTP_ACCESS_ANONYMOUS_DATA,
43 .callback = api_v2_q,
44 .allow_subpaths = 0
45 },
46
47 // multi-node multi-instance alerts APIs
48 {
49 .api = "alerts",
50 .hash = 0,
51 .acl = HTTP_ACL_ALERTS,
52 .access = HTTP_ACCESS_ANONYMOUS_DATA,
53 .callback = api_v2_alerts,
54 .allow_subpaths = 0
55 },
56 {
57 .api = "alert_transitions",
58 .hash = 0,
59 .acl = HTTP_ACL_ALERTS,
60 .access = HTTP_ACCESS_ANONYMOUS_DATA,
61 .callback = api_v2_alert_transitions,
62 .allow_subpaths = 0
63 },
64 {
65 .api = "alert_config",
66 .hash = 0,
67 .acl = HTTP_ACL_ALERTS,
68 .access = HTTP_ACCESS_ANONYMOUS_DATA,
69 .callback = api_v2_alert_config,
70 .allow_subpaths = 0
71 },
72
73 // agent information APIs
74 {
75 .api = "info",
76 .hash = 0,
77 .acl = HTTP_ACL_NOCHECK,
78 .access = HTTP_ACCESS_ANONYMOUS_DATA,
79 .callback = api_v2_info,
80 .allow_subpaths = 0
81 },
82 {
83 .api = "nodes",
84 .hash = 0,
85 .acl = HTTP_ACL_NODES,
86 .access = HTTP_ACCESS_ANONYMOUS_DATA,
87 .callback = api_v2_nodes,
88 .allow_subpaths = 0
89 },
90 {
91 .api = "node_instances",
92 .hash = 0,
93 .acl = HTTP_ACL_NODES,
94 .access = HTTP_ACCESS_ANONYMOUS_DATA,
95 .callback = api_v2_node_instances,
96 .allow_subpaths = 0
97 },
98 {
99 .api = "versions",
100 .hash = 0,
101 .acl = HTTP_ACL_NODES,
102 .access = HTTP_ACCESS_ANONYMOUS_DATA,
103 .callback = api_v2_versions,
104 .allow_subpaths = 0
105 },
106 {
107 .api = "progress",
108 .hash = 0,
109 .acl = HTTP_ACL_NOCHECK,
110 .access = HTTP_ACCESS_ANONYMOUS_DATA,
111 .callback = api_v2_progress,
112 .allow_subpaths = 0
113 },
114
115 // functions APIs
116 {
117 .api = "functions",
118 .hash = 0,
119 .acl = HTTP_ACL_FUNCTIONS,
120 .access = HTTP_ACCESS_ANONYMOUS_DATA,
121 .callback = api_v2_functions,
122 .allow_subpaths = 0
123 },
124
125 // WebRTC APIs
126 {
127 .api = "rtc_offer",
128 .hash = 0,
129 .acl = HTTP_ACL_ACLK | ACL_DEV_OPEN_ACCESS,
130 .access = HTTP_ACCESS_SIGNED_ID | HTTP_ACCESS_SAME_SPACE,
131 .callback = api_v2_webrtc,
132 .allow_subpaths = 0
133 },
134
135 // management APIs
136 {
137 .api = "claim",
138 .hash = 0,
139 .acl = HTTP_ACL_NOCHECK,
140 .access = HTTP_ACCESS_NONE,
141 .callback = api_v2_claim,
142 .allow_subpaths = 0
143 },
144 {
145 .api = "bearer_protection",
146 .hash = 0,
147 .acl = HTTP_ACL_ACLK | ACL_DEV_OPEN_ACCESS,
148 .access = HTTP_ACCESS_SIGNED_ID | HTTP_ACCESS_SAME_SPACE | HTTP_ACCESS_VIEW_AGENT_CONFIG | HTTP_ACCESS_EDIT_AGENT_CONFIG,
149 .callback = api_v2_bearer_protection,
150 .allow_subpaths = 0
151 },
152 {
153 .api = "bearer_get_token",
154 .hash = 0,
155 .acl = HTTP_ACL_ACLK | ACL_DEV_OPEN_ACCESS,
156 .access = HTTP_ACCESS_SIGNED_ID | HTTP_ACCESS_SAME_SPACE,
157 .callback = api_v2_bearer_get_token,
158 .allow_subpaths = 0
159 },
160 #endif
161
162 {
163 // terminator
164 .api = NULL,
165 .hash = 0,
166 .acl = HTTP_ACL_NONE,
167 .access = HTTP_ACCESS_NONE,
168 .callback = NULL,
169 .allow_subpaths = 0
170 },
171 };
172
173 inline int web_client_api_request_v2(RRDHOST *host, struct web_client *w, char *url_path_endpoint) {
174 static int initialized = 0;
175
176 if(unlikely(initialized == 0)) {
177 initialized = 1;
178
179 for(int i = 0; api_commands_v2[i].api ; i++)
180 api_commands_v2[i].hash = simple_hash(api_commands_v2[i].api);
181 }
182
183 return web_client_api_request_vX(host, w, url_path_endpoint, api_commands_v2);
184 }