This commit is contained in:
the-djmaze 2024-08-27 16:47:44 +02:00
parent 5e4520e10c
commit 1ad946d013
12 changed files with 47 additions and 36 deletions

View file

@ -1,8 +1,14 @@
## 2.37.3 2024-08-13
## 2.37.3 2024-08-27
### Added
- Mark images with width=1 as tracking pixel
- Show warning in Admin -> About when PHP runs in 32bit
- Edit ACL rules
[#157](https://github.com/the-djmaze/snappymail/issues/157)
- Show GnuPG version for
[#1560](https://github.com/the-djmaze/snappymail/issues/1560)
- Make sure only scalar values are allowed in $_ENV for
[#1560](https://github.com/the-djmaze/snappymail/issues/1560)
- Change minimum new mail check interval
[#1678](https://github.com/the-djmaze/snappymail/issues/1678)
- Sieve editor does not support "index" extension
@ -10,17 +16,26 @@
### Changed
- Improved domain autoconfig interaction
- MS autodiscover priorities DNS over subdomain
- Simplify sieve scripts list
[#1675](https://github.com/the-djmaze/snappymail/issues/1675)
- Handling of (token) errors due to
[#1706](https://github.com/the-djmaze/snappymail/issues/1706)
- Sabre/Xml to v4.0.5
- Update Chinese by @Artoria2e5
- Update French by @hguilbert
### Fixed
- Thread sorting visible after disabling the imap capability
[#1574](https://github.com/the-djmaze/snappymail/issues/1574)
- Creating new message impossible as long as a draft exists?
[#1710](https://github.com/the-djmaze/snappymail/issues/1710)
- InvalidToken error at login
[#1706](https://github.com/the-djmaze/snappymail/issues/1706)
### Nextcloud
- Force Nextcloud personal language by default
[#1428](https://github.com/the-djmaze/snappymail/issues/1428)
## 2.37.2 2024-08-13

View file

@ -140,26 +140,26 @@ RainLoop 1.17 vs SnappyMail
|js/* |RainLoop |Snappy |
|--------------- |--------: |--------: |
|admin.js |2.170.153 | 84.054 |
|app.js |4.207.787 | 441.754 |
|boot.js | 868.735 | 4.147 |
|admin.js |2.170.153 | 84.203 |
|app.js |4.207.787 | 445.359 |
|boot.js | 868.735 | 4.343 |
|libs.js | 658.812 | 193.716 |
|sieve.js | 0 | 84.598 |
|sieve.js | 0 | 84.571 |
|polyfills.js | 334.608 | 0 |
|serviceworker.js | 0 | 285 |
|TOTAL |8.240.095 | 808.554 |
|TOTAL |8.240.095 | 812.477 |
|js/min/* |RainLoop |Snappy |RL gzip |SM gzip |RL brotli |SM brotli |
|--------------- |--------: |--------: |------: |------: |--------: |--------: |
|admin.min.js | 256.831 | 41.162 | 73.606 | 13.885 | 60.877 | 12.434 |
|app.min.js | 515.367 | 199.730 |139.456 | 67.669 |110.485 | 57.672 |
|boot.min.js | 84.659 | 2.087 | 26.998 | 1.204 | 23.643 | 1.002 |
|admin.min.js | 256.831 | 41.256 | 73.606 | 13.940 | 60.877 | 12.493 |
|app.min.js | 515.367 | 201.270 |139.456 | 68.096 |110.485 | 58.078 |
|boot.min.js | 84.659 | 2.231 | 26.998 | 1.271 | 23.643 | 1.067 |
|libs.min.js | 584.772 | 92.365 |180.901 | 34.487 |155.182 | 30.830 |
|sieve.min.js | 0 | 41.093 | 0 | 10.325 | 0 | 9.327 |
|sieve.min.js | 0 | 41.288 | 0 | 10.327 | 0 | 9.318 |
|polyfills.min.js | 32.837 | 0 | 11.406 | 0 | 10.175 | 0 |
|TOTAL user |1.217.635 | 294.182 |358.761 |103.360 |299.485 | 89.504 |
|TOTAL user+sieve |1.217.635 | 335.275 |358.761 |113.685 |299.485 | 98.831 |
|TOTAL admin | 959.099 | 135.614 |292.911 | 49.576 |249.877 | 44.266 |
|TOTAL user |1.217.635 | 295.866 |358.761 |103.854 |299.485 | 89.975 |
|TOTAL user+sieve |1.217.635 | 337.154 |358.761 |114.181 |299.485 | 99.293 |
|TOTAL admin | 959.099 | 135.852 |292.911 | 49.698 |249.877 | 44.390 |
For a user it is around 68% smaller and faster than traditional RainLoop.

View file

@ -1,4 +1,4 @@
This app packages SnappyMail <upstream>2.37.2</upstream>.
This app packages SnappyMail <upstream>2.37.3</upstream>.
SnappyMail is a simple, modern, lightweight & fast web-based email client.

View file

@ -4,7 +4,7 @@ RUN mkdir -p /app/code
WORKDIR /app/code
# If you change the extraction below, be sure to test on scaleway
VERSION=2.37.2
VERSION=2.37.3
RUN wget https://github.com/the-djmaze/snappymail/releases/download/v${VERSION}/snappymail-${VERSION}.zip -O /tmp/snappymail.zip && \
unzip /tmp/snappymail.zip -d /app/code && \
rm /tmp/snappymail.zip && \

View file

@ -3,7 +3,7 @@
<id>snappymail</id>
<name>SnappyMail</name>
<summary>SnappyMail Webmail</summary>
<version>2.37.2</version>
<version>2.37.3</version>
<licence>agpl</licence>
<author>SnappyMail, RainLoop Team, Nextgen-Networks, Tab Fitts, Nathan Kinkade, Pierre-Alain Bandinelli</author>
<description><![CDATA[**Lightweight & fast email client.**

View file

@ -20,7 +20,7 @@ return "SnappyMail Webmail is a browser-based multilingual IMAP client with an a
# script_snappymail_versions()
sub script_snappymail_versions
{
return ( "2.37.2" );
return ( "2.37.3" );
}
sub script_snappymail_version_desc

View file

@ -3,7 +3,7 @@
"title": "SnappyMail",
"description": "Simple, modern & fast web-based email client",
"private": true,
"version": "2.37.2",
"version": "2.37.3",
"homepage": "https://snappymail.eu",
"author": {
"name": "DJ Maze",

View file

@ -116,12 +116,16 @@ class AvatarsPlugin extends \RainLoop\Plugins\AbstractPlugin
* Nextcloud Mail uses insecure unencrypted 'index.php/apps/mail/api/avatars/url/local%40example.com'
*/
// public function ServiceAvatar(...$aParts)
public function ServiceAvatar(string $sServiceName, string $sBimi, string $sEmail)
public function ServiceAvatar(string $sServiceName, string $sBimi, string $sEncryptedEmail)
{
$sEmail = \SnappyMail\Crypt::DecryptUrlSafe($sEmail);
$maxAge = 86400;
$sEmail = \SnappyMail\Crypt::DecryptUrlSafe($sEncryptedEmail);
$aBimi = \explode('-', $sBimi, 2);
$sBimiSelector = isset($aBimi[1]) ? $aBimi[1] : 'default';
// $sEmail && \MailSo\Base\Http::setETag("{$sBimiSelector}-{$sEncryptedEmail}");
if ($sEmail && ($aResult = $this->getAvatar($sEmail, !empty($aBimi[0]), $sBimiSelector))) {
\header("Cache-Control: max-age={$maxAge}, private");
\header('Expires: '.\gmdate('D, j M Y H:i:s', $maxAge + \time()).' UTC');
\header('Content-Type: '.$aResult[0]);
echo $aResult[1];
} else {

View file

@ -184,6 +184,7 @@ trait Accounts
$bReload = false;
$oAccount = $this->getAccountFromToken();
if ($oAccount instanceof AdditionalAccount && $oAccount->Email() === $sEmailToDelete) {
// $this->SetAdditionalAuthToken(null);
\SnappyMail\Cookies::clear(self::AUTH_ADDITIONAL_TOKEN_KEY);
$bReload = true;
}

View file

@ -76,12 +76,16 @@ abstract class Base
function __destruct()
{
$this->proc_close();
$gpgconf = static::findBinary('gpgconf');
if ($gpgconf) {
$cmd = $gpgconf . ' --kill gpg-agent';
// https://github.com/the-djmaze/snappymail/issues/1560#issuecomment-2144817883
// if (\version_compare($this->version, '2.4.0', '<')) {
$cmd .= ' ' . \escapeshellarg($this->options['homedir']);
// }
$env = ['GNUPGHOME' => $this->options['homedir']];
$pipes = [];
if ($process = \proc_open($gpgconf . ' --kill gpg-agent --homedir ' . \escapeshellarg($this->options['homedir']), [], $pipes, null, $env)) {
if ($process = \proc_open($cmd, [], $pipes, null, $env)) {
\proc_close($process);
}
}

View file

@ -58,20 +58,6 @@ class SMIME extends Base
}
}
function __destruct()
{
$this->proc_close();
$gpgconf = static::findBinary('gpgconf');
if ($gpgconf) {
$env = ['GNUPGHOME' => $this->options['homedir']];
$pipes = [];
if ($process = \proc_open($gpgconf . ' --kill gpg-agent --homedir ' . \escapeshellarg($this->options['homedir']), [], $pipes, null, $env)) {
\proc_close($process);
}
}
}
public static function isSupported() : bool
{
return parent::isSupported() && static::findBinary('gpgsm');

View file

@ -25,6 +25,7 @@ ko.utils = {
: node => node.cloneNode(true)),
setDomNodeChildren: (domNode, childNodes) => {
// domNode.replaceChildren(...childNodes);
ko.utils.emptyDomNode(domNode);
childNodes && domNode.append(...childNodes);
},