* [pmg-devel] [PATCH pmg-api/pmg-gui] fix #2709: optionally match only top-level headers
@ 2025-02-18 19:48 Stoiko Ivanov
2025-02-18 19:48 ` [pmg-devel] [PATCH pmg-api 1/1] fix #2709: ruledb: match-field: optionally restrict to top mime-part Stoiko Ivanov
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Stoiko Ivanov @ 2025-02-18 19:48 UTC (permalink / raw)
To: pmg-devel
based on top of:
https://lore.proxmox.com/pmg-devel/20250218135416.54504-1-s.ivanov@proxmox.com/T/#t
as I think testing both should go well together, and to avoid a trivial
merge-conflict (can of course resend on top of current master) in the
pmg-api patch
Tested minimally in my setup - more testing would be appreciated
pmg-api:
Stoiko Ivanov (1):
fix #2709: ruledb: match-field: optionally restrict to top mime-part
src/PMG/RuleDB/ContentTypeFilter.pm | 2 +-
src/PMG/RuleDB/MatchField.pm | 47 +++++++++++++++++++++++++++--
2 files changed, 45 insertions(+), 4 deletions(-)
pmg-gui:
Stoiko Ivanov (1):
fix #2709: rules: match-field: add top-level-only checkbox
js/Utils.js | 6 ++++++
1 file changed, 6 insertions(+)
--
2.39.5
_______________________________________________
pmg-devel mailing list
pmg-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pmg-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
* [pmg-devel] [PATCH pmg-api 1/1] fix #2709: ruledb: match-field: optionally restrict to top mime-part
2025-02-18 19:48 [pmg-devel] [PATCH pmg-api/pmg-gui] fix #2709: optionally match only top-level headers Stoiko Ivanov
@ 2025-02-18 19:48 ` Stoiko Ivanov
2025-02-18 19:48 ` [pmg-devel] [PATCH pmg-gui 1/1] fix #2709: rules: match-field: add top-level-only checkbox Stoiko Ivanov
2025-02-19 12:24 ` [pmg-devel] [PATCH pmg-api/pmg-gui] fix #2709: optionally match only top-level headers Stoiko Ivanov
2 siblings, 0 replies; 4+ messages in thread
From: Stoiko Ivanov @ 2025-02-18 19:48 UTC (permalink / raw)
To: pmg-devel
The current Match Field (header) what-objects always traverse each
mime-part of a mail.
This can be inconvenient, and causes unexpected matches when you
forward a message as attachment(message/rfc822).
following the patches for adding a Disclaimer on top of a mail from an
implementation point of view, this simply adds an optional
top-level-only attribute for the MatchField object, which is disabled
by default for backwards-compatibility.
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
---
src/PMG/RuleDB/ContentTypeFilter.pm | 2 +-
src/PMG/RuleDB/MatchField.pm | 47 +++++++++++++++++++++++++++--
2 files changed, 45 insertions(+), 4 deletions(-)
diff --git a/src/PMG/RuleDB/ContentTypeFilter.pm b/src/PMG/RuleDB/ContentTypeFilter.pm
index 550a880..507ff97 100644
--- a/src/PMG/RuleDB/ContentTypeFilter.pm
+++ b/src/PMG/RuleDB/ContentTypeFilter.pm
@@ -35,7 +35,7 @@ sub new {
$fvalue = $nt;
}
- my $self = $class->SUPER::new('content-type', $fvalue, $ogroup);
+ my $self = $class->SUPER::new('content-type', $fvalue, $ogroup, undef);
$self->{only_content} = $only_content;
return $self;
diff --git a/src/PMG/RuleDB/MatchField.pm b/src/PMG/RuleDB/MatchField.pm
index ee1851a..f6787e8 100644
--- a/src/PMG/RuleDB/MatchField.pm
+++ b/src/PMG/RuleDB/MatchField.pm
@@ -27,7 +27,7 @@ sub otype_text {
}
sub new {
- my ($type, $field, $field_value, $ogroup) = @_;
+ my ($type, $field, $field_value, $ogroup, $top_part_only) = @_;
my $class = ref($type) || $type;
@@ -35,6 +35,7 @@ sub new {
$self->{field} = $field;
$self->{field_value} = $field_value;
+ $self->{top_part_only} = $top_part_only;
return $self;
}
@@ -54,12 +55,28 @@ sub load_attr {
my $decoded_field_value = PMG::Utils::try_decode_utf8($field_value);
# use known constructor, bless afterwards (because sub class can have constructor
# with other parameter signature).
- my $obj = PMG::RuleDB::MatchField->new($field, $decoded_field_value, $ogroup);
+ my $obj = PMG::RuleDB::MatchField->new($field, $decoded_field_value, $ogroup, undef);
bless $obj, $class;
+ my $sth = $ruledb->{dbh}->prepare(
+ "SELECT * FROM Attribut WHERE Object_ID = ?");
+
+ $sth->execute($id);
+
+ $obj->{top_part_only} = 0;
+
+ while (my $ref = $sth->fetchrow_hashref()) {
+ if ($ref->{name} eq 'top_part_only') {
+ $obj->{top_part_only} = $ref->{value};
+ }
+ }
+
+ $sth->finish();
+
$obj->{id} = $id;
- $obj->{digest} = Digest::SHA::sha1_hex($id, $field, $field_value, $ogroup);
+ $obj->{digest} = Digest::SHA::sha1_hex(
+ $id, $field, $field_value, $ogroup, $obj->{top_part_only});
return $obj;
}
@@ -79,6 +96,9 @@ sub save {
if (defined ($self->{id})) {
# update
+ $ruledb->{dbh}->do(
+ "DELETE FROM Attribut WHERE Object_ID = ?",
+ undef, $self->{id});
$ruledb->{dbh}->do(
"UPDATE Object SET Value = ? WHERE ID = ?",
@@ -96,6 +116,12 @@ sub save {
$self->{id} = PMG::Utils::lastid($ruledb->{dbh}, 'object_id_seq');
}
+ if (defined($self->{top_part_only})) {
+ $ruledb->{dbh}->do(
+ "INSERT INTO Attribut (Value, Name, Object_ID) VALUES (?, 'top_part_only', ?)",
+ undef, $self->{top_part_only}, $self->{id});
+ }
+
return $self->{id};
}
@@ -124,6 +150,8 @@ sub parse_entity {
}
}
+ return $res if $self->{top_part_only};
+
foreach my $part ($entity->parts) {
if (my $match = $self->parse_entity($part)) {
push @$res, @$match;
@@ -160,6 +188,12 @@ sub properties {
type => 'string',
maxLength => 1024,
},
+ 'top-part-only' => {
+ description => "only match the headers in the first MIME-Part",
+ type => 'boolean',
+ optional => 1,
+ default => 0,
+ },
};
}
@@ -169,6 +203,7 @@ sub get {
return {
field => $self->{field},
value => $self->{field_value},
+ 'top-part-only' => $self->{top_part_only},
};
}
@@ -177,6 +212,12 @@ sub update {
$self->{field_value} = $param->{value};
$self->{field} = $param->{field};
+
+ if (defined($param->{'top-part-only'}) && $param->{'top-part-only'} == 1) {
+ $self->{top_part_only} = 1;
+ } else {
+ delete $self->{top_part_only};
+ }
}
1;
--
2.39.5
_______________________________________________
pmg-devel mailing list
pmg-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pmg-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
* [pmg-devel] [PATCH pmg-gui 1/1] fix #2709: rules: match-field: add top-level-only checkbox
2025-02-18 19:48 [pmg-devel] [PATCH pmg-api/pmg-gui] fix #2709: optionally match only top-level headers Stoiko Ivanov
2025-02-18 19:48 ` [pmg-devel] [PATCH pmg-api 1/1] fix #2709: ruledb: match-field: optionally restrict to top mime-part Stoiko Ivanov
@ 2025-02-18 19:48 ` Stoiko Ivanov
2025-02-19 12:24 ` [pmg-devel] [PATCH pmg-api/pmg-gui] fix #2709: optionally match only top-level headers Stoiko Ivanov
2 siblings, 0 replies; 4+ messages in thread
From: Stoiko Ivanov @ 2025-02-18 19:48 UTC (permalink / raw)
To: pmg-devel
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
---
js/Utils.js | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/js/Utils.js b/js/Utils.js
index 257226d..2dcf392 100644
--- a/js/Utils.js
+++ b/js/Utils.js
@@ -376,6 +376,12 @@ Ext.define('PMG.Utils', {
fieldLabel: gettext('Test String'),
regexFieldReference: 'value',
},
+ {
+ xtype: 'proxmoxcheckbox',
+ name: 'top-part-only',
+ fieldLabel: gettext("Only top level headers"),
+ uncheckedValue: '0',
+ },
],
},
3003: {
--
2.39.5
_______________________________________________
pmg-devel mailing list
pmg-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pmg-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [pmg-devel] [PATCH pmg-api/pmg-gui] fix #2709: optionally match only top-level headers
2025-02-18 19:48 [pmg-devel] [PATCH pmg-api/pmg-gui] fix #2709: optionally match only top-level headers Stoiko Ivanov
2025-02-18 19:48 ` [pmg-devel] [PATCH pmg-api 1/1] fix #2709: ruledb: match-field: optionally restrict to top mime-part Stoiko Ivanov
2025-02-18 19:48 ` [pmg-devel] [PATCH pmg-gui 1/1] fix #2709: rules: match-field: add top-level-only checkbox Stoiko Ivanov
@ 2025-02-19 12:24 ` Stoiko Ivanov
2 siblings, 0 replies; 4+ messages in thread
From: Stoiko Ivanov @ 2025-02-19 12:24 UTC (permalink / raw)
To: pmg-devel
superseded by:
https://lore.proxmox.com/pmg-devel/20250219121851.110090-1-s.ivanov@proxmox.com/T/#t
On Tue, Feb 18, 2025 at 08:48:27PM +0100, Stoiko Ivanov wrote:
> based on top of:
> https://lore.proxmox.com/pmg-devel/20250218135416.54504-1-s.ivanov@proxmox.com/T/#t
>
> as I think testing both should go well together, and to avoid a trivial
> merge-conflict (can of course resend on top of current master) in the
> pmg-api patch
>
> Tested minimally in my setup - more testing would be appreciated
>
> pmg-api:
> Stoiko Ivanov (1):
> fix #2709: ruledb: match-field: optionally restrict to top mime-part
>
> src/PMG/RuleDB/ContentTypeFilter.pm | 2 +-
> src/PMG/RuleDB/MatchField.pm | 47 +++++++++++++++++++++++++++--
> 2 files changed, 45 insertions(+), 4 deletions(-)
>
> pmg-gui:
> Stoiko Ivanov (1):
> fix #2709: rules: match-field: add top-level-only checkbox
>
> js/Utils.js | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> --
> 2.39.5
>
>
>
> _______________________________________________
> pmg-devel mailing list
> pmg-devel@lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pmg-devel
>
>
_______________________________________________
pmg-devel mailing list
pmg-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pmg-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2025-02-19 12:24 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-02-18 19:48 [pmg-devel] [PATCH pmg-api/pmg-gui] fix #2709: optionally match only top-level headers Stoiko Ivanov
2025-02-18 19:48 ` [pmg-devel] [PATCH pmg-api 1/1] fix #2709: ruledb: match-field: optionally restrict to top mime-part Stoiko Ivanov
2025-02-18 19:48 ` [pmg-devel] [PATCH pmg-gui 1/1] fix #2709: rules: match-field: add top-level-only checkbox Stoiko Ivanov
2025-02-19 12:24 ` [pmg-devel] [PATCH pmg-api/pmg-gui] fix #2709: optionally match only top-level headers Stoiko Ivanov
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal