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