diff --git a/.docker/dev/php/Dockerfile b/.docker/dev/php/Dockerfile index 4a2b7497f..74759db6c 100644 --- a/.docker/dev/php/Dockerfile +++ b/.docker/dev/php/Dockerfile @@ -15,7 +15,7 @@ RUN pecl install xxtea-1.0.11 && \ RUN docker-php-ext-configure intl && \ docker-php-ext-configure ldap && \ - docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && \ + docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/ && \ docker-php-ext-install opcache pdo_mysql zip intl gd ldap RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer diff --git a/.docker/release/Dockerfile b/.docker/release/Dockerfile index 0c7d66ea8..f1ba85139 100644 --- a/.docker/release/Dockerfile +++ b/.docker/release/Dockerfile @@ -27,7 +27,7 @@ RUN mkdir -p /usr/share/man/man1/ /usr/share/man/man3/ /usr/share/man/man7/ && \ RUN php -m && \ docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ && \ docker-php-ext-configure intl && \ - docker-php-ext-configure gd --with-freetype-dir=/usr/include --with-jpeg-dir=/usr/include/ && \ + docker-php-ext-configure gd --with-freetype --with-jpeg && \ docker-php-ext-install ldap opcache pdo_mysql pdo_pgsql zip intl gd && \ php -m diff --git a/.docker/release/files/usr/local/include/application.ini b/.docker/release/files/usr/local/include/application.ini index e63a9b5df..0630af79c 100644 --- a/.docker/release/files/usr/local/include/application.ini +++ b/.docker/release/files/usr/local/include/application.ini @@ -30,6 +30,9 @@ allow_additional_identities = On ; Number of messages displayed on page by default messages_per_page = 20 +; Mark message read after N seconds +message_read_delay = 5 + ; File size limit (MB) for file upload on compose screen ; 0 for unlimited. attachment_size_limit = 2 @@ -68,6 +71,8 @@ hide_x_mailer_header = On admin_panel_host = "" admin_panel_key = "admin" content_security_policy = "" +csp_report = Off +encrypt_cipher = "aes-256-cbc-hmac-sha1" [ssl] ; Require verification of SSL certificate used. @@ -86,18 +91,12 @@ capath = "" client_cert = "" [capa] -composer = On contacts = On -settings = On quota = On -help = On -reload = On search = On search_adv = On -x-templates = Off dangerous_actions = On message_actions = On -messagelist_actions = On attachments_actions = On [login] @@ -134,6 +133,7 @@ view_editor_type = "Html" view_layout = 1 view_use_checkboxes = On autologout = 30 +view_html = On show_images = Off contacts_autosave = On mail_use_threads = Off @@ -144,6 +144,17 @@ mail_reply_same_folder = Off ; Enable logging enable = Off +; Log messages of set RFC 5424 section 6.2.1 Severity level and higher (0 = highest, 7 = lowest). +; 0 = Emergency +; 1 = Alert +; 2 = Critical +; 3 = Error +; 4 = Warning +; 5 = Notice +; 6 = Informational +; 7 = Debug +level = 4 + ; Logs entire request only if error occured (php requred) write_on_error_only = Off @@ -193,6 +204,9 @@ auth_logging = Off auth_logging_filename = "fail2ban/auth-{date:Y-m-d}.txt" auth_logging_format = "[{date:Y-m-d H:i:s}] Auth failed: ip={request:ip} user={imap:login} host={imap:host} port={imap:port}" +; Enable auth logging to syslog for fail2ban +auth_syslog = On + [debug] ; Special option required for development purposes enable = Off @@ -206,7 +220,7 @@ enable = On ; Additional caching key. If changed, cache is purged index = "v1" -; Can be: files, APC, memcache, redis (beta) +; Can be: files, APCU, memcache, redis (beta) fast_cache_driver = "files" ; Additional caching key. If changed, fast cache is purged @@ -222,12 +236,10 @@ http_expires = 3600 server_uids = On [labs] -update_channel = "stable" -allow_prefetch = On -allow_smart_html_links = On +allow_prefetch = Off cache_system_data = On date_from_headers = On -autocreate_system_folders = On +autocreate_system_folders = Off allow_message_append = Off login_fault_delay = 1 log_ajax_response_write_limit = 300 @@ -239,7 +251,6 @@ use_mobile_version_for_tablets = Off use_app_debug_css = Off use_imap_sort = On use_imap_force_selection = Off -use_imap_list_subscribe = On use_imap_thread = On use_imap_move = Off use_imap_expunge_all_on_delete = Off @@ -254,18 +265,16 @@ imap_message_all_headers = Off imap_large_thread_limit = 50 imap_folder_list_limit = 200 imap_show_login_alert = On -imap_use_auth_plain = On -imap_use_auth_cram_md5 = Off +imap_use_list_status = On +imap_timeout = 300 smtp_show_server_errors = Off -smtp_use_auth_plain = On -smtp_use_auth_cram_md5 = Off -sieve_utf8_folder_name = On +smtp_timeout = 60 sieve_auth_plain_initial = On sieve_allow_fileinto_inbox = Off -imap_timeout = 300 -smtp_timeout = 60 sieve_timeout = 10 -domain_list_limit = 99 +sasl_allow_plain = On +sasl_allow_scram_sha = Off +sasl_allow_cram_md5 = Off mail_func_clear_headers = On mail_func_additional_parameters = Off favicon_status = On @@ -285,12 +294,12 @@ cookie_default_path = "" cookie_default_secure = Off check_new_messages = On replace_env_in_configuration = "" -startup_url = "" strict_html_parser = Off boundary_prefix = "" +kolab_enabled = Off dev_email = "" dev_password = "" [version] -current = "2.7.1" -saved = "Mon, 23 Aug 2021 07:55:13 +0000" +current = "2.13.4" +saved = "Fri, 04 Mar 2022 08:55:26 +0000" diff --git a/.eslintrc.js b/.eslintrc.js index 4088884ec..851a1868e 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -9,7 +9,7 @@ module.exports = { env: { node: true, browser: true, - es6: true + es2020: true }, globals: { // SnappyMail @@ -35,7 +35,9 @@ module.exports = { // vendors/jua 'Jua': "readonly", // vendors/bootstrap/bootstrap.native.js - 'BSN': "readonly" + 'BSN': "readonly", + // Mailvelope + 'mailvelope': "readonly" }, // http://eslint.org/docs/rules/ rules: { diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index d31f25db1..fc1bece3e 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,3 +1,2 @@ -github: the-djmaze community_bridge: SnappyMail custom: ["https://www.paypal.me/thedjmaze", "https://snappymail.eu"] diff --git a/.gitignore b/.gitignore index 088e6c54e..ae906552b 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,11 @@ /include.php .idea/ .env +/test +/public_html +/vendors/knockout/spec +/vendors/openpgp-5 +!/vendors/openpgp-5/dist +/vendors/vanillaqr.js/ +/integrations/nextcloud/rainloop +/integrations/owncloud/rainloop diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..cfb771834 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "vendors/openpgp-5"] + path = vendors/openpgp-5 + url = git@github.com:the-djmaze/openpgpjs.git diff --git a/README.md b/README.md index 0b507b619..f95ff9df9 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ And don't forget to read the [RainLoop documentation](https://www.rainloop.net/d **GNU AFFERO GENERAL PUBLIC LICENSE Version 3 (AGPL)**. http://www.gnu.org/licenses/agpl-3.0.html -Copyright (c) 2020 - 2021 SnappyMail +Copyright (c) 2020 - 2022 SnappyMail Copyright (c) 2013 - 2021 RainLoop ## Modifications @@ -45,24 +45,25 @@ This fork of RainLoop has the following changes: * Admin uses password_hash/password_verify * Auth failed attempts written to syslog * Added Fail2ban instructions -* ES2015 +* ES2018 * PHP 7.3+ required * PHP mbstring extension required * PHP replaced pclZip with PharData and ZipArchive -* PHP yaml extension else use the old Spyc +* Dark mode * Added option to remove background/font colors from messages for real "dark mode" * Removed BackwardCapability (class \RainLoop\Account) * Removed ChangePassword (re-implemented as plugin) -* Removed OAuth support * Removed POP3 support * Removed background video support * Removed Sentry (Application Monitoring and Error Tracking Software) +* Removed Spyc yaml * Replaced gulp-uglify with gulp-terser * CRLF => LF line endings * Embed boot.js and boot.css into index.html * Ongoing removal of old JavaScript code (things are native these days) * Added modified [Squire](https://github.com/neilj/Squire) HTML editor as replacement for CKEditor * Split Admin specific JavaScript code from User code +* Split Sieve specific JavaScript code from User code * JSON reviver * Better memory garbage collection management * Added serviceworker for Notifications @@ -76,6 +77,16 @@ This fork of RainLoop has the following changes: * Prevent Google FLoC * Added [Fetch Metadata Request Headers](https://www.w3.org/TR/fetch-metadata/) checks * Reduced excessive DOM size +* Support [Kolab groupware](https://kolab.org/) +* Support IMAP RFC 2971 ID extension +* Support IMAP RFC 5258 LIST-EXTENDED +* Support IMAP RFC 5464 METADATA +* Support IMAP RFC 5819 LIST-STATUS +* Support IMAP RFC 7628 SASL OAUTHBEARER aka XOAUTH2 +* Support IMAP4rev2 RFC 9051 +* Support Sodium and OpenSSL for encryption +* Much better PGP support + ### Supported browsers @@ -96,10 +107,9 @@ The result is faster and smaller download code (good for mobile networks). * Added dev/prototype.js for some additional features * boot.js without webpack overhead * Modified Jua.js to be without jQuery -* Replaced ProgressJS with simple native dropin * Replaced Autolinker with simple https/email detection * Replaced ifvisible.js with simple drop-in replacement -* Replaced momentToNode with proper HTML5