]> git.proxmox.com Git - pmg-api.git/blob - PMG/RuleDB/Quarantine.pm
add more ruledb objects
[pmg-api.git] / PMG / RuleDB / Quarantine.pm
1 package PMG::RuleDB::Quarantine;
2
3 use strict;
4 use warnings;
5 use Carp;
6 use DBI;
7 use Digest::SHA;
8
9 use PVE::SafeSyslog;
10
11 use PMG::Utils;
12 use PMG::ModGroup;
13 use PMG::RuleDB::Object;
14
15 use base qw(PMG::RuleDB::Object);
16
17 sub otype {
18 return 4006;
19 }
20
21 sub oclass {
22 return 'action';
23 }
24
25 sub otype_text {
26 return 'Quarantine';
27 }
28
29 sub oinfo {
30 return 'Move to quarantine.';
31 }
32
33 sub oicon {
34 # fixme:
35 return 'accept.gif';
36 }
37
38 sub oisedit {
39 return 0;
40 }
41
42 sub final {
43 return 1;
44 }
45
46 sub priority {
47 return 90;
48 }
49
50 sub new {
51 my ($type, $ogroup) = @_;
52
53 my $class = ref($type) || $type;
54
55 my $self = $class->SUPER::new(otype(), $ogroup);
56
57 return $self;
58 }
59
60 sub load_attr {
61 my ($type, $ruledb, $id, $ogroup, $value) = @_;
62
63 my $class = ref($type) || $type;
64
65 my $obj = $class->new($ogroup);
66 $obj->{id} = $id;
67
68 $obj->{digest} = Digest::SHA::sha1_hex($id, $ogroup);
69
70 return $obj;
71 }
72
73 sub save {
74 my ($self, $ruledb) = @_;
75
76 defined($self->{ogroup}) || return undef;
77
78 if (defined ($self->{id})) {
79 # update
80
81 # nothing to update
82
83 } else {
84 # insert
85 my $sth = $ruledb->{dbh}->prepare (
86 "INSERT INTO Object (Objectgroup_ID, ObjectType) VALUES (?, ?);");
87
88 $sth->execute($self->ogroup, $self->otype);
89
90 $self->{id} = PMG::Utils::lastid($ruledb->{dbh}, 'object_id_seq');
91 }
92
93 return $self->{id};
94 }
95
96 sub execute {
97 my ($self, $queue, $ruledb, $mod_group, $targets,
98 $msginfo, $vars, $marks, $ldap) = @_;
99
100 my $subgroups = $mod_group->subgroups($targets, 1);
101
102 foreach my $ta (@$subgroups) {
103 my ($tg, $entity) = (@$ta[0], @$ta[1]);
104
105 PMG::Utils::remove_marks($entity);
106
107 if ($queue->{vinfo}) {
108 if (my $qid = $queue->quarantine_mail($ruledb, 'V', $entity, $tg, $msginfo, $vars, $ldap)) {
109
110 foreach (@$tg) {
111 syslog ('info', "$queue->{logid}: moved mail for <%s> to virus quarantine - $qid", $_);
112 }
113
114 $queue->set_status ($tg, 'delivered');
115 }
116
117 } else {
118 if (my $qid = $queue->quarantine_mail($ruledb, 'S', $entity, $tg, $msginfo, $vars, $ldap)) {
119
120 foreach (@$tg) {
121 syslog ('info', "$queue->{logid}: moved mail for <%s> to spam quarantine - $qid", $_);
122 }
123
124 $queue->set_status($tg, 'delivered');
125 }
126 }
127 }
128
129 # warn if no subgroups
130 }
131
132 sub short_desc {
133 my $self = shift;
134
135 return oinfo();
136 }
137
138 1;