]> git.proxmox.com Git - pmg-api.git/blame - PMG/API2/Rules.pm
api apt/versions: add some missing packages
[pmg-api.git] / PMG / API2 / Rules.pm
CommitLineData
8d836d1d
DM
1package PMG::API2::Rules;
2
3use strict;
4use warnings;
5use Data::Dumper;
6
7use PVE::SafeSyslog;
8use PVE::Tools qw(extract_param);
9use HTTP::Status qw(:constants);
10use PVE::JSONSchema qw(get_standard_option);
11use PVE::RESTHandler;
12use PVE::INotify;
13
14use PMG::Config;
15
16use PMG::RuleDB;
cbef3ff8 17use PMG::DBTools;
af748e8c 18use PMG::API2::ObjectGroupHelpers;
8d836d1d
DM
19
20use base qw(PVE::RESTHandler);
21
22__PACKAGE__->register_method ({
23 name => 'index',
24 path => '',
25 method => 'GET',
26 description => "Directory index.",
b07f4d68 27 permissions => { check => [ 'admin', 'audit' ] },
8d836d1d
DM
28 parameters => {
29 additionalProperties => 0,
30 properties => {
31 id => {
32 description => "Rule ID.",
33 type => 'integer',
34 },
35 },
36 },
37 returns => {
38 type => 'array',
39 items => {
40 type => "object",
41 properties => {
42 subdir => { type => 'string'},
43 },
44 },
45 links => [ { rel => 'child', href => "{subdir}" } ],
46 },
47 code => sub {
48 my ($param) = @_;
49
af748e8c
DM
50 my $rdb = PMG::RuleDB->new();
51
52 $rdb->load_rule($param->{id}); # test if rule exist
53
8d836d1d
DM
54 return [
55 { subdir => 'config' },
56 { subdir => 'from' },
57 { subdir => 'to' },
58 { subdir => 'when' },
59 { subdir => 'what' },
60 { subdir => 'actions' },
61 ];
62
63 }});
64
13fa9426
DM
65__PACKAGE__->register_method ({
66 name => 'delete_rule',
67 path => '',
68 method => 'DELETE',
69 description => "Delete rule.",
dc34bc99
DM
70 proxyto => 'master',
71 protected => 1,
b07f4d68 72 permissions => { check => [ 'admin' ] },
13fa9426
DM
73 parameters => {
74 additionalProperties => 0,
75 properties => {
76 id => {
77 description => "Rule ID.",
78 type => 'integer',
79 },
80 },
81 },
82 returns => { type => 'null' },
83 code => sub {
84 my ($param) = @_;
85
86 my $rdb = PMG::RuleDB->new();
87
88 $rdb->load_rule($param->{id}); # test if rule exist
89
90 $rdb->delete_rule($param->{id});
91
cbef3ff8
DM
92 PMG::DBTools::reload_ruledb();
93
13fa9426
DM
94 return undef;
95 }});
8d836d1d 96
af748e8c
DM
97__PACKAGE__->register_method ({
98 name => 'config',
99 path => 'config',
100 method => 'GET',
101 description => "Get common rule properties.",
0b038c72 102 proxyto => 'master',
b07f4d68 103 permissions => { check => [ 'admin', 'audit' ] },
af748e8c
DM
104 parameters => {
105 additionalProperties => 0,
106 properties => {
107 id => {
108 description => "Rule ID.",
109 type => 'integer',
110 },
111 },
112 },
113 returns => {
114 type => "object",
115 properties => {
116 id => { type => 'integer'},
117 name => { type => 'string' },
118 active => { type => 'boolean' },
119 direction => { type => 'integer' },
120 priority => { type => 'integer' },
121 },
122 },
123 code => sub {
124 my ($param) = @_;
125
126 my $rdb = PMG::RuleDB->new();
127
128 my $rule = $rdb->load_rule($param->{id});
129
130 my ($from, $to, $when, $what, $action) =
131 $rdb->load_groups($rule);
132
133 my $data = PMG::API2::ObjectGroupHelpers::format_rule(
134 $rule, $from, $to, $when, $what, $action);
135
136 return $data;
137 }});
138
3fb9c931
DM
139__PACKAGE__->register_method ({
140 name => 'update_config',
141 path => 'config',
142 method => 'PUT',
143 description => "Set rule properties.",
0b038c72
DM
144 proxyto => 'master',
145 protected => 1,
b07f4d68 146 permissions => { check => [ 'admin' ] },
3fb9c931
DM
147 parameters => {
148 additionalProperties => 0,
149 properties => {
150 id => {
151 description => "Rule ID.",
152 type => 'integer',
153 },
154 name => {
155 description => "Rule name",
156 type => 'string',
157 optional => 1,
158 },
159 active => {
160 description => "Flag to activate rule.",
161 type => 'boolean',
162 optional => 1,
163 },
164 direction => {
165 description => "Rule direction. Value `0` matches incomming mails, value `1` matches outgoing mails, and value `2` matches both directions.",
166 type => 'integer',
167 minimum => 0,
4a34322a 168 maximum => 2,
3fb9c931
DM
169 optional => 1,
170 },
171 priority => {
172 description => "Rule priotity.",
173 type => 'integer',
174 minimum => 0,
175 maximum => 100,
176 optional => 1,
177 },
178 },
179 },
180 returns => { type => "null" },
181 code => sub {
182 my ($param) = @_;
183
184 my $id = extract_param($param, 'id');
185
186 die "no options specified\n"
187 if !scalar(keys %$param);
188
189 my $rdb = PMG::RuleDB->new();
190
191 my $rule = $rdb->load_rule($id);
192
193 for my $key (qw(name active direction priority)) {
194 $rule->{$key} = $param->{$key} if defined($param->{$key});
195 }
196
197 $rdb->save_rule($rule);
198
cbef3ff8
DM
199 PMG::DBTools::reload_ruledb();
200
3fb9c931
DM
201 return undef;
202 }});
203
4108629e
DM
204my $register_rule_group_api = sub {
205 my ($name) = @_;
206
207 __PACKAGE__->register_method ({
208 name => $name,
209 path => $name,
210 method => 'GET',
211 description => "Get '$name' group list.",
0b038c72 212 proxyto => 'master',
b07f4d68 213 permissions => { check => [ 'admin', 'audit' ] },
4108629e
DM
214 parameters => {
215 additionalProperties => 0,
216 properties => {
217 id => {
218 description => "Rule ID.",
219 type => 'integer',
220 },
221 },
222 },
223 returns => {
224 type => 'array',
225 items => {
226 type => "object",
227 properties => {
228 id => { type => 'integer' },
229 },
230 },
231 },
232 code => sub {
233 my ($param) = @_;
234
235 my $rdb = PMG::RuleDB->new();
236
237 my $rule = $rdb->load_rule($param->{id});
238
239 my $group_hash = $rdb->load_groups_by_name($rule);
240
241 return PMG::API2::ObjectGroupHelpers::format_object_group(
242 $group_hash->{$name});
243 }});
13fa9426
DM
244
245 __PACKAGE__->register_method ({
246 name => "add_${name}_group",
247 path => $name,
248 method => 'POST',
249 description => "Add group to '$name' list.",
250 proxyto => 'master',
251 protected => 1,
b07f4d68 252 permissions => { check => [ 'admin' ] },
13fa9426
DM
253 parameters => {
254 additionalProperties => 0,
255 properties => {
256 id => {
257 description => "Rule ID.",
258 type => 'integer',
259 },
260 ogroup => {
261 description => "Groups ID.",
262 type => 'integer',
263 },
264 },
265 },
266 returns => { type => 'null' },
267 code => sub {
268 my ($param) = @_;
269
270 my $rdb = PMG::RuleDB->new();
271
272 my $rule = $rdb->load_rule($param->{id});
273
274 $rdb->rule_add_group($param->{id}, $param->{ogroup}, $name);
275
cbef3ff8
DM
276 PMG::DBTools::reload_ruledb();
277
13fa9426
DM
278 return undef;
279 }});
280
281 __PACKAGE__->register_method ({
282 name => "delete_${name}_group",
283 path => "$name/{ogroup}",
284 method => 'DELETE',
285 description => "Delete group from '$name' list.",
286 proxyto => 'master',
287 protected => 1,
b07f4d68 288 permissions => { check => [ 'admin' ] },
13fa9426
DM
289 parameters => {
290 additionalProperties => 0,
291 properties => {
292 id => {
293 description => "Rule ID.",
294 type => 'integer',
295 },
296 ogroup => {
297 description => "Groups ID.",
298 type => 'integer',
299 },
300 },
301 },
302 returns => { type => 'null' },
303 code => sub {
304 my ($param) = @_;
305
306 my $rdb = PMG::RuleDB->new();
307
308 my $rule = $rdb->load_rule($param->{id});
309
310 $rdb->rule_remove_group($param->{id}, $param->{ogroup}, $name);
311
cbef3ff8
DM
312 PMG::DBTools::reload_ruledb();
313
13fa9426
DM
314 return undef;
315 }});
316
4108629e
DM
317};
318
319$register_rule_group_api->('from');
320$register_rule_group_api->('to');
321$register_rule_group_api->('when');
322$register_rule_group_api->('what');
323$register_rule_group_api->('action');
324
8d836d1d 3251;