]> git.proxmox.com Git - pmg-api.git/blame - PMG/RuleDB/MatchField.pm
Accept.pm: fix short_descr
[pmg-api.git] / PMG / RuleDB / MatchField.pm
CommitLineData
a7865a2b
DM
1package PMG::RuleDB::MatchField;
2
3use strict;
4use warnings;
5use Carp;
6use DBI;
7use Digest::SHA;
8use MIME::Words;
9
3d5b36f0
DM
10use PVE::SafeSyslog;
11
758c7b6b 12use PMG::Utils;
a7865a2b
DM
13use PMG::RuleDB::Object;
14
15use base qw(PMG::RuleDB::Object);
16
17sub otype {
18 return 3002;
19}
20
21sub oclass {
22 return 'what';
23}
24
25sub otype_text {
26 return 'Match Field';
27}
28
29sub oicon {
30 # fixme:
31 return 'matchfield.gif';
32}
33
34sub new {
35 my ($type, $field, $field_value, $ogroup) = @_;
36
37 my $class = ref($type) || $type;
38
39 my $self = $class->SUPER::new(otype(), $ogroup);
40
41 $self->{field} = $field;
42 $self->{field_value} = $field_value;
43
44 return $self;
45}
46
47sub load_attr {
48 my ($type, $ruledb, $id, $ogroup, $value) = @_;
49
50 my $class = ref($type) || $type;
51
52 defined($value) || croak "undefined value: ERROR";;
53
54 my ($field, $field_value) = $value =~ m/^([^:]*)\:(.*)$/;
55
56 defined($field) || croak "undefined object attribute: ERROR";
57 defined($field_value) || croak "undefined object attribute: ERROR";
58
3d5b36f0
DM
59 # use known constructor, bless afterwards (because sub class can have constructor
60 # with other parameter signature).
61 my $obj = PMG::RuleDB::MatchField->new($field, $field_value, $ogroup);
62 bless $obj, $class;
63
a7865a2b
DM
64 $obj->{id} = $id;
65
66 $obj->{digest} = Digest::SHA::sha1_hex($id, $field, $field_value, $ogroup);
67
68 return $obj;
69}
70
71sub save {
72 my ($self, $ruledb) = @_;
73
74 defined($self->{ogroup}) || croak "undefined ogroup: ERROR";
75
76 my $new_value = "$self->{field}:$self->{field_value}";
77 $new_value =~ s/\\/\\\\/g;
78
79 if (defined ($self->{id})) {
80 # update
81
82 $ruledb->{dbh}->do(
83 "UPDATE Object SET Value = ? WHERE ID = ?",
84 undef, $new_value, $self->{id});
85
86 } else {
87 # insert
88
89 my $sth = $ruledb->{dbh}->prepare(
90 "INSERT INTO Object (Objectgroup_ID, ObjectType, Value) " .
91 "VALUES (?, ?, ?);");
92
93 $sth->execute($self->ogroup, $self->otype, $new_value);
94
758c7b6b 95 $self->{id} = PMG::Utils::lastid($ruledb->{dbh}, 'object_id_seq');
a7865a2b
DM
96 }
97
98 return $self->{id};
99}
100
101sub parse_entity {
102 my ($self, $entity) = @_;
103
104 return undef if !$self->{field};
105
106 my $res;
107
108 if (my $id = $entity->head->mime_attr ('x-proxmox-tmp-aid')) {
109 chomp $id;
110
111 if (my $value = $entity->head->get ($self->{field})) {
112 chomp $value;
113
114 my $decvalue = MIME::Words::decode_mimewords($value);
115
116 if ($decvalue =~ m|$self->{field_value}|i) {
117 push @$res, $id;
118 }
119 }
120 }
121
122 foreach my $part ($entity->parts) {
123 if (my $match = $self->parse_entity($part)) {
124 push @$res, @$match;
125 }
126 }
127
128 return $res;
129}
130
131sub what_match {
132 my ($self, $queue, $entity, $msginfo) = @_;
133
134 return $self->parse_entity ($entity);
135}
136
137sub short_desc {
138 my $self = shift;
139
140 return "$self->{field}=$self->{field_value}";
3d5b36f0 141}
a7865a2b
DM
142
1431;
144
145__END__
146
147=head1 PMG::RuleDB::MatchField
148
149Match Header Fields