]>
git.proxmox.com Git - pmg-api.git/blob - src/PMG/RuleDB/MatchField.pm
1 package PMG
::RuleDB
::MatchField
;
13 use PMG
::RuleDB
::Object
;
15 use base
qw(PMG::RuleDB::Object);
30 my ($type, $field, $field_value, $ogroup) = @_;
32 my $class = ref($type) || $type;
34 my $self = $class->SUPER::new
($class->otype(), $ogroup);
36 $self->{field
} = $field;
37 $self->{field_value
} = $field_value;
43 my ($type, $ruledb, $id, $ogroup, $value) = @_;
45 my $class = ref($type) || $type;
47 defined($value) || die "undefined value: ERROR";;
49 my ($field, $field_value) = $value =~ m/^([^:]*)\:(.*)$/;
51 defined($field) || die "undefined object attribute: ERROR";
52 defined($field_value) || die "undefined object attribute: ERROR";
54 my $decoded_field_value = PMG
::Utils
::try_decode_utf8
($field_value);
55 # use known constructor, bless afterwards (because sub class can have constructor
56 # with other parameter signature).
57 my $obj = PMG
::RuleDB
::MatchField-
>new($field, $decoded_field_value, $ogroup);
62 $obj->{digest
} = Digest
::SHA
::sha1_hex
($id, $field, $field_value, $ogroup);
68 my ($self, $ruledb) = @_;
70 defined($self->{ogroup
}) || die "undefined ogroup: ERROR";
72 my $new_value = "$self->{field}:$self->{field_value}";
73 $new_value =~ s/\\/\\\\/g;
74 $new_value = encode
('UTF-8', $new_value);
76 if (defined ($self->{id
})) {
80 "UPDATE Object SET Value = ? WHERE ID = ?",
81 undef, $new_value, $self->{id
});
86 my $sth = $ruledb->{dbh
}->prepare(
87 "INSERT INTO Object (Objectgroup_ID, ObjectType, Value) " .
90 $sth->execute($self->ogroup, $self->otype, $new_value);
92 $self->{id
} = PMG
::Utils
::lastid
($ruledb->{dbh
}, 'object_id_seq');
99 my ($self, $entity) = @_;
101 return undef if !$self->{field
};
105 if (my $id = $entity->head->mime_attr ('x-proxmox-tmp-aid')) {
108 for my $value ($entity->head->get_all($self->{field
})) {
111 my $decvalue = PMG
::Utils
::decode_rfc1522
($value);
112 $decvalue = PMG
::Utils
::try_decode_utf8
($decvalue);
114 if ($decvalue =~ m
|$self->{field_value
}|i
) {
120 foreach my $part ($entity->parts) {
121 if (my $match = $self->parse_entity($part)) {
130 my ($self, $queue, $entity, $msginfo) = @_;
132 return $self->parse_entity ($entity);
138 return "$self->{field}=$self->{field_value}";
146 description
=> "The Field",
148 pattern
=> '[0-9a-zA-Z\/\\\[\]\+\-\.\*\_]+',
152 description
=> "The Value",
163 field
=> $self->{field
},
164 value
=> $self->{field_value
},
169 my ($self, $param) = @_;
171 $self->{field_value
} = $param->{value
};
172 $self->{field
} = $param->{field
};
179 =head1 PMG::RuleDB::MatchField