]>
git.proxmox.com Git - pmg-api.git/blob - src/PMG/API2/Rules.pm
3b2eb3e679fb2672b1c5d8fa4a0a5f55200388ae
1 package PMG
::API2
::Rules
;
8 use PVE
::Tools
qw(extract_param);
9 use HTTP
::Status
qw(:constants);
10 use PVE
::JSONSchema
qw(get_standard_option);
18 use PMG
::API2
::ObjectGroupHelpers
;
20 use base
qw(PVE::RESTHandler);
22 __PACKAGE__-
>register_method ({
26 description
=> "Directory index.",
27 permissions
=> { check
=> [ 'admin', 'audit' ] },
29 additionalProperties
=> 0,
32 description
=> "Rule ID.",
42 subdir
=> { type
=> 'string'},
45 links
=> [ { rel
=> 'child', href
=> "{subdir}" } ],
50 my $rdb = PMG
::RuleDB-
>new();
52 $rdb->load_rule($param->{id
}); # test if rule exist
55 { subdir
=> 'config' },
60 { subdir
=> 'actions' },
65 __PACKAGE__-
>register_method ({
66 name
=> 'delete_rule',
69 description
=> "Delete rule.",
72 permissions
=> { check
=> [ 'admin' ] },
74 additionalProperties
=> 0,
77 description
=> "Rule ID.",
82 returns
=> { type
=> 'null' },
86 my $rdb = PMG
::RuleDB-
>new();
88 $rdb->load_rule($param->{id
}); # test if rule exist
90 $rdb->delete_rule($param->{id
});
92 PMG
::DBTools
::reload_ruledb
();
97 __PACKAGE__-
>register_method ({
101 description
=> "Get common rule properties.",
103 permissions
=> { check
=> [ 'admin', 'audit' ] },
105 additionalProperties
=> 0,
108 description
=> "Rule ID.",
116 id
=> { type
=> 'integer'},
117 name
=> { type
=> 'string' },
118 active
=> { type
=> 'boolean' },
119 direction
=> { type
=> 'integer' },
120 priority
=> { type
=> 'integer' },
126 my $rdb = PMG
::RuleDB-
>new();
128 my $rule = $rdb->load_rule($param->{id
});
130 my ($from, $to, $when, $what, $action) =
131 $rdb->load_groups($rule);
133 my $data = PMG
::API2
::ObjectGroupHelpers
::format_rule
(
134 $rule, $from, $to, $when, $what, $action);
139 __PACKAGE__-
>register_method ({
140 name
=> 'update_config',
143 description
=> "Set rule properties.",
146 permissions
=> { check
=> [ 'admin' ] },
148 additionalProperties
=> 0,
151 description
=> "Rule ID.",
155 description
=> "Rule name",
160 description
=> "Flag to activate rule.",
165 description
=> "Rule direction. Value `0` matches incomming mails, value `1` matches outgoing mails, and value `2` matches both directions.",
172 description
=> "Rule priotity.",
180 returns
=> { type
=> "null" },
184 my $id = extract_param
($param, 'id');
186 die "no options specified\n"
187 if !scalar(keys %$param);
189 my $rdb = PMG
::RuleDB-
>new();
191 my $rule = $rdb->load_rule($id);
193 for my $key (qw(name active direction priority)) {
194 $rule->{$key} = $param->{$key} if defined($param->{$key});
197 $rdb->save_rule($rule);
199 PMG
::DBTools
::reload_ruledb
();
204 my $register_rule_group_api = sub {
207 __PACKAGE__-
>register_method ({
211 description
=> "Get '$name' group list.",
213 permissions
=> { check
=> [ 'admin', 'audit' ] },
215 additionalProperties
=> 0,
218 description
=> "Rule ID.",
228 id
=> { type
=> 'integer' },
235 my $rdb = PMG
::RuleDB-
>new();
237 my $rule = $rdb->load_rule($param->{id
});
239 my $group_hash = $rdb->load_groups_by_name($rule);
241 return PMG
::API2
::ObjectGroupHelpers
::format_object_group
(
242 $group_hash->{$name});
245 __PACKAGE__-
>register_method ({
246 name
=> "add_${name}_group",
249 description
=> "Add group to '$name' list.",
252 permissions
=> { check
=> [ 'admin' ] },
254 additionalProperties
=> 0,
257 description
=> "Rule ID.",
261 description
=> "Groups ID.",
266 returns
=> { type
=> 'null' },
270 my $rdb = PMG
::RuleDB-
>new();
272 my $rule = $rdb->load_rule($param->{id
});
274 $rdb->rule_add_group($param->{id
}, $param->{ogroup
}, $name);
276 PMG
::DBTools
::reload_ruledb
();
281 __PACKAGE__-
>register_method ({
282 name
=> "delete_${name}_group",
283 path
=> "$name/{ogroup}",
285 description
=> "Delete group from '$name' list.",
288 permissions
=> { check
=> [ 'admin' ] },
290 additionalProperties
=> 0,
293 description
=> "Rule ID.",
297 description
=> "Groups ID.",
302 returns
=> { type
=> 'null' },
306 my $rdb = PMG
::RuleDB-
>new();
308 my $rule = $rdb->load_rule($param->{id
});
310 $rdb->rule_remove_group($param->{id
}, $param->{ogroup
}, $name);
312 PMG
::DBTools
::reload_ruledb
();
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');