undefined is used as delete when set to a normal data-path of a view
model, so, we need an actual defined value here as else we cannot
decide if the view model was ever initialized or not.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Essentially the same as in PBS, but needed to use 'rootfs' instead of
'root' for the disk usage, avoid 'cpu' as an itemId (already used by
the cluster resources), and get rid of the fingerprint button. Also
added the link to the repositories panel like in Dominik's pending
patch for PBS.
Rename the existing resources panel to clarify what it actually is.
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
like we have in pbs/pve but only for non-quarantine view
we have to increase the width of the window, so it fits together
with the 'send quarantine link' button
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
like we do in pve and pbs
for now the user cannot change the preferred columns and the default is 'auto'
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
Similar like we did for Proxmox VE's manager. The main title and
version should stand a bit more out compared to simple nav/button
texts.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
in extjs 7.0 the css changed slightly so that we need to define
the 'fit' layout explicitely to maintain the full width/height
otherwise it can happen that the iframe gets cut off
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
this patch adds the cleanup for the attachment quarantine from
0e26e20aa5 to the virus- and
spamquarantine.
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
This fixes a UX regression stemming from the recently introduced
commit 9aed379a70
"spam quarantine: avoid full store reload on single-element actions"
A load restored the saved selection after load complete, with the
neat and very useful feature to jump to the next in line if the old
one did not exist anymore.
Call this now factored out code part ourself in the fast-path.
This was reported in the forum:
https://forum.proxmox.com/threads/proxmox-mail-gateway-6-4-released.86760/#post-380971
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
A store load may require several seconds to complete, which can get
frustrating fast.
For single actions we have a callback which gets only executed on a
successful API call, so we can just remove the entry there directly
from the in-memory store.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
With ~20 bytes per message-id and separator we get over the current
HTTP post size limit of 64 KiB with ~ 3200 messages.
As 2500 is a relatively nice number for humans to deal with rather go
for that one, that leaves also some room for potential longer IDs in
the future.
Send the batches of async in pairs, as with that the pmgproxy can
still cope well and is not overloaded.
Mask the whole list panel with a 'Processing...' loading-mask during
sending of requests affecting multiple messages, so that the user
gets some instant visible feedback that something is actually
happening (the api calls may return only after a few seconds).
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
If the API call returned more than one pmail entry, inject an "all"
entry which, if selected, drops the user parameter and loads the
quarantine mails of all users from the backend.
The webinterface has only some issues regarding deselection (all in
the grid header or if we need to deselect due to the search filtering
out some elements) - for that the underlying issue was found and a
widget toolkit patch was provided.
The rest seems now pretty performant, albeit more than a few 100k
mails may become a problem here. But, in such big setups the mail
admin won't tinker to much whith the users mail anyway, if they are
even alowed to do so depending on their jurisdictions privacy laws
and companies privacy policy.
So, basically this is more for evaluation or for smaller setups but
got quite often requested, and as there's not more data
exposed/returned then already available I see no real argument
against it.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Deselect those entries which got filtered out, to avoid doing
some action (delete, deliver) on hidden records.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
the for development designed incremental lint target is still non
strict, and allows warnings allowing less interrupted dev workflow
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
by creating an edit-window when clicking on the respective Backup now
button.
This is the second part of the enhancement request
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
the new /statistics/detail api calls takes the type (contact, sender,
receiver) and address for which to display the statistics as explicit
parameter instead of path-component.
This makes it possible to accept '/' as part of an e-mail address
which is allowed (in the local-part by RFC5322 [0], and accepted by
postfix.
[0] https://tools.ietf.org/html/rfc5322
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
if the template has 'quarantinelink' enabled, we
show a button 'Request Quarantine Link' on the quarantine login ui
there a user can enter their e-mail and request a link to the quarantine
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
we cannot have xtype nor cbind in the defaults, as moving xtype there
breaks our cbind "when to stop descendant+apply" heuristic and cbind
cannot be moved there as it'd be only copied over by initComponent
and that happens later than the cbind apply step.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
The PBSConfig panel enables creation/editing/deletion of PBS instances.
Each instance can lists its snapshots and each snapshot can be restored
Inspired by the LDAPConfig panel and PBSEdit from pve-manager.
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
by moving the item definition to initComponent, and changing the check
for a provided filename, we can reuse the window for restores from PBS
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
Move it away from the tab list in the Configuration entry to a submenu in
preparation for adding PBS integration
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
the regular expression field is not necessarily after the regex tester
(mostly it is before). In order to be more robust, use the child
method of the parent window instead of previousSibling of the button.
The child method gets any direct descendant matching the query, the
sibling one is always directional and there's no method for "any
sibling".
Tested with:
* mailproxy whitelist
* match field
* match filename
* who object
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
Since/Until is not quite correct, especially in other languages
(e.g., in German "from" and "to" was translated to "Von" and "An",
respectively.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
lint the build file, as else eslint does not has the full picture.
Add a prelude to define globals once at the top
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
The mailq results are potentially very large, why a BufferedStore is used.
BufferedStores only support [0] remote filtering (which is already done) and
remote sorting (which this patch enables).
simpleSortMode (getting sortfield and sortdirection as two parameters instead
of an array with multiple objects containing those fields), is enabled to
work with our API.
[0] quite naturally, since you'd need to have the complete result to sort it,
however only documented in the source code (and not the reference docs)
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
in the gui, we always expect an end and starttime, the only case
where we do not get this is when the fields are invalid, so bail out
in that case instead of searching
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
Mostly taken from a bigger patch of Dominik, for now lets just show
the count (release is near) and add some padding
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
those stores all have 'autoStart' set, which loads the store anyway
as soon as possible. this seems to fix some store load issues
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This patch adds 3 new configuration settings to the MailProxy Options Tab, for
comfortably enabling greylisting for IPv6 addresses, and configuring the
netmask used for greylist matching
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
This reverts commit a89fcfd62b.
Since the pmg-log-tracker is now able to parse logs with before queue
we can add the checkbox for enabling it again.
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
with logout as only option.
This makes the header style again consistent between
pmg quarantine/pmg admin/pve
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
e.g. when the user changes the email while having a mail selected,
it gets unselected (albeit briefly) and update will be called
with 'undefined'
this throws an error, so prevent this by always supplying an object
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
this moves the the login name to a button/menu like we have for pve
and adds a 'language' option there
this is useful for uses which explicitely login via ticket, which makes
it hard to change the language otherwise
(they'd have to logout, change the language, go to their mail client
and click again the link for the quarantine; also most users do not know
that they *can* change the language when they are logged out)
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
by not saving the position across time or email changes, since that
makes no real sense. (The user cannot really know what will be selected,
in contrast to when the mails will be deleted etc.)
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
using an explicit load on time change and queryMode 'local', we can
enable typeAhead (and related settings) to let the user type in an email
which will be autocompleted by the loaded list.
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
We did already hide it when toggling raw/html, but when choosing raw
and changing the mail, it was again set to visible.
This patch fixes that by always taking 'me.raw' into account.
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
As the <b> tag in combination with extjs resulted in a "font-weight:
bolder" setting which was not rendered correctly in Firefox.
Use our own css class to set font-weight to bold.
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
to provide users with a comfortable way of changing between incremental
and complete signature download in case one of the methods has a problem.
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
If the quarantine is made available via reverse proxy, it sometimes
is bound to a different port (e.g. on 443 for firewall policy reasons)
The use-case seems common enough to justify exposing the parameter via
GUI.
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
Reviewed-By: Dominik Csapak <d.csapak@proxmox.com>
Tested-By: Dominik Csapak <d.csapak@proxmox.com>
with the changes for fixing #1948 it is now possible to define tls policies
for destinations (remote domains or next-hop transports) instead of only for
Domains.
This patch reflects this addition by renaming all occurences of Domain with
Destination.
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
Reviewed-By: Dominik Csapak <d.csapak@proxmox.com>
in order to stay consistent with the change in pmg-api
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
Reviewed-By: Dominik Csapak <d.csapak@proxmox.com>
which expects the entry as parameter instead of part of the path
this allows all special characters to be included in the entry
in the url, some characters were problematic (e.g. '/') and not properly
handled by the api in the backend
we use Ext.applyIf (which copies the non-existant entries to params) here
instead of getting the ExtraParams from the proxy and setting '.address'
(that would modify the ExtraParams of the proxy and send unwanted
parameters to subsequent api calls like the list-loading)
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
By adding a flex value to the domain list items they become scrollable, should
the grid contain more entries than fit on the screen.
This fixes#2579.
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
The listing of the contents of the deferred queue gets its data via
postqueue (1) json output, which lists the size in bytes.
Change the column renderer to use the Proxmox.Utils.format_size
renderer, which computes a sane human readable unit.
Tested by sending a mail, which gets deferred and comparing the
output with the size of the file on disk in
'/var/spool/postfix/deferred'
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
by making the selector field a ComboBox, users can pick from any existing
selector without changing it, replace it or create a new one.
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
new feature lmtp support for simplifying setups
with lmtp capable downstream servers (e.g. dovecot)
Postfix support lmtp out of the box and can now deliver
mails directly to internal mailbox servers without
one more smtp connection
extending the gui code for new lmtp option:
MailProxyConfiguration & MailProxyConfiguration:Transport:
Adding combobox "smtp" / "lmtp" as a new option
Generalizing some "SMTP" keywords
Signed-off-by: Julian Zehnter <pmg-devel@j-z.it>
to prevent indefinite caching of the js files in the browser,
we add the package version to the js files, this will be read
by the pmgproxy and added as template variables
we use those to add the version to the get parameter and
thus tell the browser the file has changed
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This partially reverts commit 28c12d957f.
Given that the before queue filtering currently breaks pmg-log-tracker, and
the Tracking Center is one of the central features of PMG, we should
release the before queue support as experimental feature for now.
That way users who really want to use it are a bit more aware, that
log-tracking will currently not work on the GUI.
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
Generation of NDRs on block and before queue filtering are configured
via 2 boolean flags and belong to the MailProxyOptions.
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
Bug 1652 indicates a slight misalignment of our use of NDR with the
expectations users might have:
We use it throughout our codebase meaning - mails with empty senders (NDRs
a.k.a bounces do most often have an empty sender (to prevent mailloops) but
quite a few messages being directly non-delivery-notifications also use an
empty sender (since noone would be reading the automated bounces for them) -
e.g. our quarantine report)
By renaming the GUI-display field it should be more clear to users of the
Tracking center.
The fix is left at the GUI-level, since the use of ndr for empty sender is
quite consistent throughout our complete stack (in that case from the GUI, via
pmg-api down to the pmg-log-tracker) and I don't see the direct benefit for
renaming it everywhere (and am lacking a better concise phrase for "empty
envelope sender").
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
with this panel, users can manually override a rule score for
SpamAssassin rules. This can be useful sometimes, e.g. if
a certain rule always triggers in a certain environment which
is considered spam by the SpamAssassin rules
after adding/editing a rule, we show diff, similar to the network
panel, and offer a button to apply those changes (and restart
pmg-smtp-filter). the changes can also be reverted
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
on deleting the last mail in the list, the selection is empty and
the access below to 'rec.data.id' breaks, leaving the maillist broken
(until the user changed the panel or reloaded)
so give rec an empty fallback object and check if there is a 'data'
property and use that, otherwise set the id to the empty string
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
Tested-By: Stoiko Ivanov <s.ivanov@proxmox.com>
Reviewed-By: Stoiko Ivanov <s.ivanov@proxmox.com>
This avoids all the strange click event hack. We already have a
button where the users needs to click on, so just use that.
A viewModel with a downloadMailURL formula to assemble the href
allows us to just bind the "href" config from the Download button,
and be done with it..
refactors commit 7ad0de10d6
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
since datauri downloads are size limited (2MB in chrome), we have
to use another method, and instead of working around in the gui
(e.g. by using URL.createObjectURL) make use of the existing download
code in the api, which should have better compatibility
(and omits the whole raw -> json -> raw -> base64 conversion chain from
file to download)
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
Tested-By: Stoiko Ivanov <s.ivanov@proxmox.com>
Reviewed-By: Stoiko Ivanov <s.ivanov@proxmox.com>
and set state of the buttons accordingly
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
Reviewed-By: Stoiko Ivanov <s.ivanov@proxmox.com>
Tested-By: Stoiko Ivanov <s.ivanov@proxmox.com>
to make it consistent with the grid in which the actions get shown,
since we have a different column with the name 'description' there
already
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This adds another panel to the MailProxy configuration for DKIM-Settings.
Additionally the index-template now includes the css-file from
proxmox-widget-toolkit (for the pmx-hint user-class), needed in the
Settings-panel.
The Panel consists of 2 Grids:
* DKIM Settings
* DKIM Domains
DKIMDomains is a list of domain, currently like RelayDomains (hence the
code-reuse).
The DKIM settings grid binds to the dkim-related settings in pmg.conf, but the
edit-window for the selector uses the /config/dkim/selector route in the
PMG-API.
Additionally 2 checks for invalid configurations are excluded (you cannot
enable DKIM-Signing without creating a private key first)
The warnings were inspired by PVE's handling of EFIDisks and BIOS.
Finally the 'View DNS Record' button displays the DKIM TXT record for the
current key in the same format that opendkim-genkey writes it out.
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
by making the base-url, the description text and the online help anchor static
fields we can override it and reuse the component for DKIMDomains.
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
the Quarantine part is mostly copied from VirusQuarantine and adapted
the AttachmentGrid is inspired by the SpamScore list
this adds a new quarantine type 'Attachment' in the gui, where the admins
can review and control the mails in the attachment quarantine
it also shows a list of attachment/parts and a link where they can
be downloaded (in case the admin want to only forward a single
attachment or review the file in detail)
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
Reviewed-By: Stoiko Ivanov <s.ivanov@proxmox.com>
Tested-By: Stoiko Ivanov <s.ivanov@proxmox.com>
this will be used to show the icon in the attachment list
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
Reviewed-By: Stoiko Ivanov <s.ivanov@proxmox.com>
Tested-By: Stoiko Ivanov <s.ivanov@proxmox.com>
since the content of the window is encoded with 'Ext.htmlEncode'
we have to decode it with 'Ext.String.htmlDecode' (Ext.htmlDecode is
a deprecated alias for it) before downloading the file
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
As described in the release notes of ClamAV 0.101.0 the legacy Option
ArchiveBlockEncrypted was used for blocking both encrypted archives _and_
documents. This patch reflects the change in the VirusDetectorOptions.
[0] https://blog.clamav.net/2018/12/clamav-01010-has-been-released.html
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
PMG (optionally) sends two kinds of reports:
* the reports to users, which mails of theirs are in the Spamquarantine
(`pmgqm`)
* the reports about the System's state and performance to the Administrator
(`pmgreport`)
Given that these get confused quite often, make their labels in the GUI
more explicit.
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
that defaults to on, this way we have a new default on the gui without
breaking existing installations
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
using gettext the way we did, broke the jsgettext.pl in proxmox-i18n
during a 'make update'
instead of using the template way, simply replace it by using plain
gettext as a function, this way we do not skip over the getttext uses
accidentally
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
remove the toolbar altogether when there is a valid subscription,
since on every navigate to the page, framework7 shows it again
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
this patch implements a UI for the Quarantine, designed to
be looked at on mobile phones
for this we use Framework7 instead of extjs, since it has much more
features and looks more native on phones
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
make TLS policy selection a widget of its own, and improve splitting
between logic and presentation
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
* add js/MailProxyTLSDomains.js for setting per domain TLS policies
* add js/MailProxyTLSPanel.js as a wrapper for the current MailProxyTLS.js and
MailProxyTLSDomains.js
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
d/D: deliver
delete: delete
w/W: whitelist
b/B: blacklist
the delete key registers differently depending on browser,
so we have to check for event.DELETE and '127'
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
when an e-mail is selected and an action goes through,
select the e-mail on the position the old one was,
this way, one does not have to reselect an e-mail after
an action is done
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>