* [pmg-devel] [PATCH pmg-api/pmg-gui] filter attachments in quarantines @ 2022-11-07 14:36 Dominik Csapak 2022-11-07 14:36 ` [pmg-devel] [PATCH pmg-api 1/1] api: quarantine: add 'content-disposition' field to listattachments Dominik Csapak ` (2 more replies) 0 siblings, 3 replies; 7+ messages in thread From: Dominik Csapak @ 2022-11-07 14:36 UTC (permalink / raw) To: pmg-devel with this series, we filter the attachments in the pmg quarantine view by 'content-disposition: attachment' pmg-gui 1/2 is only a typo fix an more or less unrelated pmg-api: Dominik Csapak (1): api: quarantine: add 'content-disposition' field to listattachments src/PMG/API2/Quarantine.pm | 1 + 1 file changed, 1 insertion(+) pmg-gui: Dominik Csapak (2): AttachmentGrid: fix typo AttachmentGrid: filter attachment with content-disposition by default js/AttachmentGrid.js | 63 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 51 insertions(+), 12 deletions(-) -- 2.30.2 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [pmg-devel] [PATCH pmg-api 1/1] api: quarantine: add 'content-disposition' field to listattachments 2022-11-07 14:36 [pmg-devel] [PATCH pmg-api/pmg-gui] filter attachments in quarantines Dominik Csapak @ 2022-11-07 14:36 ` Dominik Csapak 2022-11-07 15:57 ` [pmg-devel] applied: " Thomas Lamprecht 2022-11-07 14:36 ` [pmg-devel] [PATCH pmg-gui 1/2] AttachmentGrid: fix typo Dominik Csapak 2022-11-07 14:36 ` [pmg-devel] [PATCH pmg-gui 2/2] AttachmentGrid: filter attachment with content-disposition by default Dominik Csapak 2 siblings, 1 reply; 7+ messages in thread From: Dominik Csapak @ 2022-11-07 14:36 UTC (permalink / raw) To: pmg-devel this can be useful to filter for 'real' attachments vs standard mail mime parts Signed-off-by: Dominik Csapak <d.csapak@proxmox.com> --- src/PMG/API2/Quarantine.pm | 1 + 1 file changed, 1 insertion(+) diff --git a/src/PMG/API2/Quarantine.pm b/src/PMG/API2/Quarantine.pm index 09d9cc9..a75ef20 100644 --- a/src/PMG/API2/Quarantine.pm +++ b/src/PMG/API2/Quarantine.pm @@ -991,6 +991,7 @@ my $get_attachments = sub { id => $id, name => $name, size => $size, + 'content-disposition' => $part->head->mime_attr('content-disposition'), 'content-type' => $part->head->mime_attr('content-type'), }; $entry->{path} = $attachment_path if $with_path; -- 2.30.2 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [pmg-devel] applied: [PATCH pmg-api 1/1] api: quarantine: add 'content-disposition' field to listattachments 2022-11-07 14:36 ` [pmg-devel] [PATCH pmg-api 1/1] api: quarantine: add 'content-disposition' field to listattachments Dominik Csapak @ 2022-11-07 15:57 ` Thomas Lamprecht 0 siblings, 0 replies; 7+ messages in thread From: Thomas Lamprecht @ 2022-11-07 15:57 UTC (permalink / raw) To: Dominik Csapak, pmg-devel Am 07/11/2022 um 15:36 schrieb Dominik Csapak: > this can be useful to filter for 'real' attachments vs standard mail > mime parts > > Signed-off-by: Dominik Csapak <d.csapak@proxmox.com> > --- > src/PMG/API2/Quarantine.pm | 1 + > 1 file changed, 1 insertion(+) > > applied, thanks! ^ permalink raw reply [flat|nested] 7+ messages in thread
* [pmg-devel] [PATCH pmg-gui 1/2] AttachmentGrid: fix typo 2022-11-07 14:36 [pmg-devel] [PATCH pmg-api/pmg-gui] filter attachments in quarantines Dominik Csapak 2022-11-07 14:36 ` [pmg-devel] [PATCH pmg-api 1/1] api: quarantine: add 'content-disposition' field to listattachments Dominik Csapak @ 2022-11-07 14:36 ` Dominik Csapak 2022-11-07 15:54 ` [pmg-devel] applied: " Thomas Lamprecht 2022-11-07 14:36 ` [pmg-devel] [PATCH pmg-gui 2/2] AttachmentGrid: filter attachment with content-disposition by default Dominik Csapak 2 siblings, 1 reply; 7+ messages in thread From: Dominik Csapak @ 2022-11-07 14:36 UTC (permalink / raw) To: pmg-devel s/Attachements/Attachments/ Signed-off-by: Dominik Csapak <d.csapak@proxmox.com> --- js/AttachmentGrid.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/AttachmentGrid.js b/js/AttachmentGrid.js index eaac638..3187a58 100644 --- a/js/AttachmentGrid.js +++ b/js/AttachmentGrid.js @@ -44,7 +44,7 @@ Ext.define('PMG.grid.AttachmentGrid', { let me = this; let title; if (count > 0) { - title = Ext.String.format(gettext('{0} Attachements'), count); + title = Ext.String.format(gettext('{0} Attachments'), count); title += ` (${Proxmox.Utils.format_size(totalSize)})`; if (me.collapsible) { me.expand(); -- 2.30.2 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [pmg-devel] applied: [PATCH pmg-gui 1/2] AttachmentGrid: fix typo 2022-11-07 14:36 ` [pmg-devel] [PATCH pmg-gui 1/2] AttachmentGrid: fix typo Dominik Csapak @ 2022-11-07 15:54 ` Thomas Lamprecht 0 siblings, 0 replies; 7+ messages in thread From: Thomas Lamprecht @ 2022-11-07 15:54 UTC (permalink / raw) To: Dominik Csapak, pmg-devel Am 07/11/2022 um 15:36 schrieb Dominik Csapak: > s/Attachements/Attachments/ > > Signed-off-by: Dominik Csapak <d.csapak@proxmox.com> > --- > js/AttachmentGrid.js | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > applied, thanks! ^ permalink raw reply [flat|nested] 7+ messages in thread
* [pmg-devel] [PATCH pmg-gui 2/2] AttachmentGrid: filter attachment with content-disposition by default 2022-11-07 14:36 [pmg-devel] [PATCH pmg-api/pmg-gui] filter attachments in quarantines Dominik Csapak 2022-11-07 14:36 ` [pmg-devel] [PATCH pmg-api 1/1] api: quarantine: add 'content-disposition' field to listattachments Dominik Csapak 2022-11-07 14:36 ` [pmg-devel] [PATCH pmg-gui 1/2] AttachmentGrid: fix typo Dominik Csapak @ 2022-11-07 14:36 ` Dominik Csapak 2022-11-11 17:59 ` [pmg-devel] applied: " Thomas Lamprecht 2 siblings, 1 reply; 7+ messages in thread From: Dominik Csapak @ 2022-11-07 14:36 UTC (permalink / raw) To: pmg-devel normally, attachments are given the 'content-disposition: attachment' mime attribute, so we use that to filter the attachements but since we're dealing with spam & virus mails here, and that field is client controlled, give the user a way to toggle the remaining parts of the mail too. added the checkbox in the header part, but that made it necessary to manually implement the expand/collapse toggle (since the tools are on the wrong side of the default toggle) Signed-off-by: Dominik Csapak <d.csapak@proxmox.com> --- js/AttachmentGrid.js | 61 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 50 insertions(+), 11 deletions(-) diff --git a/js/AttachmentGrid.js b/js/AttachmentGrid.js index 3187a58..b6d8b4a 100644 --- a/js/AttachmentGrid.js +++ b/js/AttachmentGrid.js @@ -11,16 +11,52 @@ Ext.define('PMG.grid.AttachmentGrid', { minHeight: 50, maxHeight: 250, scrollable: true, + collapsed: true, - collapsible: true, - titleCollapse: true, + tools: [ + { + xtype: 'checkbox', + boxLabel: gettext('show all parts'), + boxLabelAlgign: 'before', + listeners: { + change: function(cb, value) { + let grid = this.up('pmgAttachmentGrid'); + let store = grid.getStore(); + store.clearFilter(); + if (!value) { + store.filter({ + property: 'content-disposition', + value: 'attachment', + }); + } + }, + }, + }, + { + type: 'down', + handler: function() { + let me = this; + let type = me.type === 'up' ? 'down' : 'up'; + me.up('pmgAttachmentGrid').toggleCollapse(); + me.setType(type); + }, + }, + ], + + header: { + padding: '6 10 6 10', // make same height as normal panel + }, store: { autoDestroy: true, - fields: ['name', 'content-type', 'size'], + fields: ['name', 'content-type', 'size', 'content-disposition'], proxy: { type: 'proxmox', }, + filters: { + property: 'content-disposition', + value: 'attachment', + }, }, controller: { @@ -35,8 +71,15 @@ Ext.define('PMG.grid.AttachmentGrid', { view.updateTitleStats(-1); return; } - let totalSize = records.reduce((sum, { data }) => sum + data.size, 0); - view.updateTitleStats(records.length, totalSize); + let count = 0; + let totalSize = records.reduce((sum, { data }) => { + if (data['content-disposition'] === 'attachment') { + count++; + return sum + data.size; + } + return sum; + }, 0); + view.updateTitleStats(count, totalSize); }, }, @@ -46,14 +89,10 @@ Ext.define('PMG.grid.AttachmentGrid', { if (count > 0) { title = Ext.String.format(gettext('{0} Attachments'), count); title += ` (${Proxmox.Utils.format_size(totalSize)})`; - if (me.collapsible) { - me.expand(); - } + me.expand(); } else { title = gettext('No Attachments'); - if (me.collapsible) { - me.collapse(); - } + me.collapse(); } me.setTitle(title); }, -- 2.30.2 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [pmg-devel] applied: [PATCH pmg-gui 2/2] AttachmentGrid: filter attachment with content-disposition by default 2022-11-07 14:36 ` [pmg-devel] [PATCH pmg-gui 2/2] AttachmentGrid: filter attachment with content-disposition by default Dominik Csapak @ 2022-11-11 17:59 ` Thomas Lamprecht 0 siblings, 0 replies; 7+ messages in thread From: Thomas Lamprecht @ 2022-11-11 17:59 UTC (permalink / raw) To: Dominik Csapak, pmg-devel s/AttachmentGrid/attachment grid/ in the subject gives a slightly better searchable tag. Am 07/11/2022 um 15:36 schrieb Dominik Csapak: > normally, attachments are given the 'content-disposition: attachment' > mime attribute, so we use that to filter the attachements > > but since we're dealing with spam & virus mails here, and that field > is client controlled, give the user a way to toggle the remaining parts > of the mail too. > > added the checkbox in the header part, but that made it necessary to > manually implement the expand/collapse toggle (since the tools are on > the wrong side of the default toggle) > > Signed-off-by: Dominik Csapak <d.csapak@proxmox.com> > --- > js/AttachmentGrid.js | 61 ++++++++++++++++++++++++++++++++++++-------- > 1 file changed, 50 insertions(+), 11 deletions(-) > > applied, thanks! I moved the checkbox into the tbar, as I don't think it is something often wanted/used, as while yes, the content-disposition is user controllable, most (all?) MUAs only show it if set so even spammers/attackers have it in their interest to set it if they actually want to make it useable/ downloadable. That then allows to turn back on the native titleCollapse, which I find a bit more ergonomic. Slight drawback is tohave 1.5 rows "wasted" due to the tbar, but one can still see 6 attachments just fine and IMO not really a concern (tbh. I'd just drop that checkbox if it really is deemed to use to much space in the tbar). > @@ -35,8 +71,15 @@ Ext.define('PMG.grid.AttachmentGrid', { > view.updateTitleStats(-1); > return; > } > - let totalSize = records.reduce((sum, { data }) => sum + data.size, 0); > - view.updateTitleStats(records.length, totalSize); > + let count = 0; > + let totalSize = records.reduce((sum, { data }) => { > + if (data['content-disposition'] === 'attachment') { > + count++; > + return sum + data.size; > + } > + return sum; > + }, 0); for such thing's it IMO simpler to use a .filter first, i.e., I reworked it to: let attachments = records.filter(({ data }) => data['content-disposition'] === 'attachment'); let totalSize = attachments.reduce((sum, { data }) => sum + data.size, 0); view.updateTitleStats(attachments.length, totalSize); > + view.updateTitleStats(count, totalSize); > }, > }, > ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2022-11-11 17:59 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2022-11-07 14:36 [pmg-devel] [PATCH pmg-api/pmg-gui] filter attachments in quarantines Dominik Csapak 2022-11-07 14:36 ` [pmg-devel] [PATCH pmg-api 1/1] api: quarantine: add 'content-disposition' field to listattachments Dominik Csapak 2022-11-07 15:57 ` [pmg-devel] applied: " Thomas Lamprecht 2022-11-07 14:36 ` [pmg-devel] [PATCH pmg-gui 1/2] AttachmentGrid: fix typo Dominik Csapak 2022-11-07 15:54 ` [pmg-devel] applied: " Thomas Lamprecht 2022-11-07 14:36 ` [pmg-devel] [PATCH pmg-gui 2/2] AttachmentGrid: filter attachment with content-disposition by default Dominik Csapak 2022-11-11 17:59 ` [pmg-devel] applied: " Thomas Lamprecht
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox