all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [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