use PVE::INotify;
use PMG::Config;
+
+use PMG::RuleDB::WhoRegex;
+use PMG::RuleDB::ReceiverRegex;
+use PMG::RuleDB::EMail;
+use PMG::RuleDB::Receiver;
+use PMG::RuleDB::IPAddress;
+use PMG::RuleDB::IPNet;
+use PMG::RuleDB::Domain;
+use PMG::RuleDB::ReceiverDomain;
use PMG::RuleDB;
use base qw(PVE::RESTHandler);
return [
{ subdir => 'objects' },
+ { subdir => 'sender' },
+ { subdir => 'receiver' },
{ subdir => 'sender_domain' },
{ subdir => 'receiver_domain' },
+ { subdir => 'sender_regex' },
+ { subdir => 'receiver_regex' },
+ { subdir => 'ip' },
+ { subdir => 'network' },
];
}});
my $res = [];
foreach my $obj (@$og) {
- push @$res, {
- id => $obj->{id},
- otype => $obj->{otype},
- receivertest => $obj->receivertest(),
- descr => $obj->short_desc(),
- };
+ push @$res, $obj->get_data();
}
return $res;
}});
+
# fixme:
# $conn->reload_greylistdb () if $_class eq 'greylist';
# $conn->reload_ruledb ();
-my $load_object = sub {
- my ($rdb, $id, $gid, $exp_otype) = @_;
-
- my $obj = $rdb->load_object($id);
- die "object '$id' does not exists\n" if !defined($obj);
-
- my $otype = $obj->otype();
- die "wrong object type ($otype != $exp_otype)\n"
- if $otype != $exp_otype;
-
- die "wrong object group ($obj->{ogroup} != $gid)\n"
- if $obj->{ogroup} != $gid;
-
- return $obj;
-};
-
-
-__PACKAGE__->register_method ({
- name => 'sender_domain',
- path => 'sender_domain',
- method => 'POST',
- description => "Add a sender domain to the SMTP whitelist.",
- proxyto => 'master',
- parameters => {
- additionalProperties => 0,
- properties => {
- domain => {
- description => "DNS domain name.",
- type => 'string', format => 'dns-name',
- },
- },
- },
- returns => {
- description => "The object ID.",
- type => 'integer',
- },
- code => sub {
- my ($param) = @_;
-
- my $rdb = PMG::RuleDB->new();
-
- my $gid = $rdb->greylistexclusion_groupid();
-
- my $obj = PMG::RuleDB::Domain->new($param->{domain});
- $obj->{ogroup} = $gid;
-
- my $id = $obj->save($rdb);
-
- return $id;
- }});
-
-__PACKAGE__->register_method ({
- name => 'update_sender_domain',
- path => 'sender_domain/{id}',
- method => 'PUT',
- description => "Modify sender domain SMTP whitelist entryp.",
- proxyto => 'master',
- parameters => {
- additionalProperties => 0,
- properties => {
- id => {
- description => "Object ID.",
- type => 'integer',
- },
- domain => {
- description => "DNS domain name.",
- type => 'string', format => 'dns-name',
- },
- },
- },
- returns => { type => 'null' },
- code => sub {
- my ($param) = @_;
-
- my $rdb = PMG::RuleDB->new();
-
- my $gid = $rdb->greylistexclusion_groupid();
- my $exp_otype = PMG::RuleDB::Domain->otype();
-
- my $obj = $load_object->($rdb, $param->{id}, $gid, $exp_otype);
-
- $obj->{address} = $param->{domain};
-
- $obj->save($rdb);
-
- return undef;
- }});
-
-
-__PACKAGE__->register_method ({
- name => 'receiver_domain',
- path => 'receiver_domain',
- method => 'POST',
- description => "Add a receiver domain to the SMTP whitelist.",
- proxyto => 'master',
- parameters => {
- additionalProperties => 0,
- properties => {
- domain => {
- description => "DNS domain name.",
- type => 'string', format => 'dns-name',
- },
- },
- },
- returns => {
- description => "The object ID.",
- type => 'integer',
- },
- code => sub {
- my ($param) = @_;
-
- my $rdb = PMG::RuleDB->new();
-
- my $gid = $rdb->greylistexclusion_groupid();
-
- my $obj = PMG::RuleDB::ReceiverDomain->new($param->{domain});
- $obj->{ogroup} = $gid;
-
- my $id = $obj->save($rdb);
-
- return $id;
- }});
-
-
__PACKAGE__->register_method ({
name => 'delete_object',
path => 'objects/{id}',
return undef;
}});
+
+PMG::RuleDB::EMail->register_api(__PACKAGE__, 'sender', 1);
+PMG::RuleDB::Receiver->register_api(__PACKAGE__, 'receiver', 1);
+
+PMG::RuleDB::Domain->register_api(__PACKAGE__, 'sender_domain', 1);
+PMG::RuleDB::ReceiverDomain->register_api(__PACKAGE__, 'receiver_domain', 1);
+
+PMG::RuleDB::WhoRegex->register_api(__PACKAGE__, 'sender_regex', 1);
+PMG::RuleDB::ReceiverRegex->register_api(__PACKAGE__, 'receiver_regex', 1);
+
+PMG::RuleDB::IPAddress->register_api(__PACKAGE__, 'ip', 1);
+PMG::RuleDB::IPNet->register_api(__PACKAGE__, 'network', 1);
+
1;
croak "never call this method: ERROR";
}
+sub update {
+ my ($self, $param) = @_;
+
+ croak "never call this method: ERROR";
+}
+
sub load_attr {
croak "never call this method: ERROR";
}
return "basic object";
}
+sub get_data {
+ my ($self) = @_;
+
+ return {
+ id => $self->{id},
+ ogroup => $self->{ogroup},
+ otype => $self->{otype},
+ otype_text => $self->otype_text(),
+ receivertest => $self->receivertest(),
+ descr => $self->short_desc(),
+ };
+}
+
+my $load_object = sub {
+ my ($rdb, $id, $gid, $exp_otype) = @_;
+
+ my $obj = $rdb->load_object($id);
+ die "object '$id' does not exists\n" if !defined($obj);
+
+ my $otype = $obj->otype();
+ die "wrong object type ($otype != $exp_otype)\n"
+ if $otype != $exp_otype;
+
+ die "wrong object group ($obj->{ogroup} != $gid)\n"
+ if $obj->{ogroup} != $gid;
+
+ return $obj;
+};
+
+sub register_api {
+ my ($class, $apiclass, $name, $use_greylist_gid) = @_;
+
+ my $otype = $class->otype();
+
+ my $otype_text = $class->otype_text();
+
+ my $properties = $class->properties();
+
+ my $create_properties = {};
+ my $update_properties = {
+ id => {
+ description => "Object ID.",
+ type => 'integer',
+ },
+ };
+ my $read_properties = {
+ id => {
+ description => "Object ID.",
+ type => 'integer',
+ },
+ };
+
+ if (!$use_greylist_gid) {
+ $read_properties = $create_properties->{ogroup} = $update_properties->{ogroup} = {
+ description => "Object Groups ID.",
+ type => 'integer',
+ };
+ };
+
+ foreach my $key (keys %$properties) {
+ $create_properties->{$key} = $properties->{$key};
+ $update_properties->{$key} = $properties->{$key};
+ }
+
+ $apiclass->register_method ({
+ name => $name,
+ path => $name,
+ method => 'POST',
+ description => "Add '$otype_text' object.",
+ proxyto => 'master',
+ parameters => {
+ additionalProperties => 0,
+ properties => $create_properties,
+ },
+ returns => {
+ description => "The object ID.",
+ type => 'integer',
+ },
+ code => sub {
+ my ($param) = @_;
+
+ my $rdb = PMG::RuleDB->new();
+
+ my $gid = $use_greylist_gid ?
+ $rdb->greylistexclusion_groupid() : $param->{ogroup};
+
+ my $obj = $rdb->get_opject($otype);
+ $obj->{ogroup} = $gid;
+
+ $obj->update($param);
+
+ my $id = $obj->save($rdb);
+
+ return $id;
+ }});
+
+ $apiclass->register_method ({
+ name => "read_$name",
+ path => "$name/{id}",
+ method => 'GET',
+ description => "Read '$otype_text' object settings.",
+ proxyto => 'master',
+ parameters => {
+ additionalProperties => 0,
+ properties => $read_properties,
+ },
+ returns => {
+ type => "object",
+ properties => {
+ id => { type => 'integer'},
+ },
+ },
+ code => sub {
+ my ($param) = @_;
+
+ my $rdb = PMG::RuleDB->new();
+
+ my $gid = $use_greylist_gid ?
+ $rdb->greylistexclusion_groupid() : $param->{ogroup};
+
+ my $obj = $load_object->($rdb, $param->{id}, $gid, $otype);
+
+ return $obj->get_data();
+ }});
+
+ $apiclass->register_method ({
+ name => "update_$name",
+ path => "$name/{id}",
+ method => 'PUT',
+ description => "Update '$otype_text' object.",
+ proxyto => 'master',
+ parameters => {
+ additionalProperties => 0,
+ properties => $update_properties,
+ },
+ returns => { type => 'null' },
+ code => sub {
+ my ($param) = @_;
+
+ my $rdb = PMG::RuleDB->new();
+
+ my $gid = $use_greylist_gid ?
+ $rdb->greylistexclusion_groupid() : $param->{ogroup};
+
+ my $obj = $load_object->($rdb, $param->{id}, $gid, $otype);
+
+ $obj->update($param);
+
+ $obj->save($rdb);
+
+ return undef;
+ }});
+
+}
+
1;
__END__