================
News / Changelog
================


.. _news-1.3.7:

1.3.7
=====

(2023-01-04)

- ``hyperkitty_import`` will now import messages to a list with archiving
  disabled.  (Closes #451)
- Add support for Python 3.11.


.. _news-1.3.6:

1.3.6
=====

(2022-10-22)

- Fixed an issue in hyperkitty_import with an empty Message-ID.  (Closes #396)
- Set Q_CLUSTER retry > timeout in example_project.  (Closes #402)
- Set DEFAULT_AUTO_FIELD to silence errors with Django >= 3.2.
- Require mistune >= 2.0.0 and fix a problem with importing from it. (Closes #395)
- Adapt parsing of emails to be compatible with python 3.10. (Closes #401)
- Add gitlab-ci integration for python 3.10.
- Skip lists with private archives in the find list search. (Closes #237)
- Add a new setting ``HYPERKITTY_MBOX_EXPORT`` which, when set to false,
  removes the :guilabel:`Download` button and disables the export view. (
  Fixes #386)
- Return 400 instead of 500 when the sort mode is invalid. (Fixes #270)
- Allow HyperKitty to find attachments in either the database or the
  ``HYPERKITTY_ATTACHMENT_FOLDER``.  (Closes #213)
- Implemented a new ``attachments_to_file`` management command to move
  attachment content to the file system after setting
  ``HYPERKITTY_ATTACHMENT_FOLDER``.  (Closes #413)
- Handle exception when a banned address tries to post. (Fixes #325)
- Add an index on the 'name' column (fqdn)for the MailingList table since it is
  most frequently used to query the MailingList object.
- Add the ability to view a thread without Javascript enabled. This uses the
  same mechanism we use with bot-detection and rendering of the entire page at
  once, which will be slow to load but allow reading. (See #422)
- Improve the performance of the thread view for logged-in users by optimizing
  the total database calls made. (See !409)
- Add support for Django <= 4.1
- Remove support for Django < 3.2
- Remove support for Python 3.6
- Fix tests to be compatible with Python 3.10
- Replace use of ``mock`` with ``unittest.mock`` in all tests. (Closes #429)
- The check for writability of ``HYPERKITTY_ATTACHMENT_FOLDER`` when set has
  been improved to avoid a potential race condition.  (Closes #389)

Third Party
-----------

- Bump Jquery-ui to 1.13.1 to fix the broken search. (Closes #411)

UI
--

- Change the design of the thread list page and some minor tweaks
  to the index page. (See !398)
- Remove the counter in the "Top posters" section and all the list of threads
  in the list of overview page. (Fixes #31)


Misc
----

- Use Pytest as the test runner.


.. _news-1.3.5:

1.3.5
=====

(2021-10-12)

- Added feed for mailing lists with an option to configure the number of items
  in those feeds using ```HYPERKITTY_MLIST_FEED_LENGTH``` which defaults to 30
- Print a warning message when skipping older emails during
  ``hyperkitty_import`` execution. (Closes #304)
- Remove links to google fonts (Closes #344)
- Scrubbed messages now have null bytes removed. (Fixed in django-mailman3)
  (Closes #346)
- Add support for rendering Emails as rich text using Markdown parsing rules. (
  See !324)
- Use markdown renderer based on MailingList settings. (Closes #352)
- Mangle lines starting with ``From`` when exporting mbox. (Closes #348)
- Let tasks for non-existent mailing lists fail gracefully.
- ``hyperkitty_import`` now does clean-up of incoming Message-ID headers.
  (Closes #382)
- The ``Email.as_message()`` method removes some bogus characters from the
  Message-ID.  (Closes #383)
- Bump jQuery to 3.6.0.
- Selecting threads by month now works on non-English mobile devices.
  (Closes #384)
- Replace control characters in RSS feed with HTML entities.  (Closes #388)

Security
--------

- Importing a private mailing list with ``hyperkitty_import`` will enforce
  the visibility of the archives for the duration of the import. This fixes
  a bug where the private archives would have public visibility during imports
  which could lead to temporary information leakage.
  (CVE-2021-33038, Closes #380)
- Check the secret archiver key in a way that is resistant to timing attacks.
  (CVE-2021-35057, Closes #387)
- Pass the secret archiver key in a HTTP Authorization header instead of a GET
  query parameter so it doesn't appear in logs. (CVE-2021-35058, Closes #387)
- Fix a vulnerability added in !320, which exposes the archives of Private
  Mailing lists through the new RSS Feeds API due to missing authn/authz checks
  in the new view. (See !362)


.. _news-1.3.4:

1.3.4
=====

(2021-02-02)

- Sync owners and moderators from Mailman Core for MailingList. (Fixes #302)
- Implemented a new ``HYPERKITTY_JOBS_UPDATE_INDEX_LOCK_LIFE`` setting to set
  the lock lifetime for the ``update_and_clean_index`` job.  (Closes #300)
- Implemented a new ``HYPERKITTY_ALLOW_WEB_POSTING`` that allows disabling the
  web posting feature. (Closes #264)
- Add the ability to disable Gravatar using ``HYPERKITTY_ENABLE_GRAVATAR``
  settings. (Closes #303)
- Replaced deprecated ``ugettext`` functions with ``gettext``. (Closes #310)
- Fix export of Email message where the ``In-Reply-To`` header doesn't include
  the ``<>`` brackets. (Closes #331)
- We now catch a few more exceptions in ``hyperkitty_import`` when getting
  messages from a mbox. (Closes #313 and #314)
- Added a new contrib/check_hk_import script to check mboxes before running
  hyperkitty_import.
- We now ignore a ``ValueError`` in ``hyperkitty_import`` when trying to
  replace a ``Subject:`` header. (Closes #317)
- ``hyperkitty_import`` now includes the mbox name in error messages when
  importing multiple mboxes. (Closes #318)
- `` at `` is now only replaced with ``@`` in ``From:`` header values when
  necessary and not unconditionally. (Closes #320)
- The wildcard notation for any host ``'*'`` is now supported into
  ``MAILMAN_ARCHVER_FROM`` to disable Hyperkitty clients IP checking.
- Join the searchbar and search button  like it was before bootstrap 4
  migration. (See !301)
- Use the umd builds for popper.js instead of the regular ones. (See !309)
- Exceptions thrown by smtplib in sending replies are now caught and give an
  appropriate error message.  (Closes #309)

.. _news-1.3.3:

1.3.3
=====

(2020-06-01)

- Allow ``SHOW_INACTIVE_LISTS_DEFAULT`` setting to be configurable. (Closes #276)
- Fix a bug where the user couldn't chose the address to send reply or new post
  as. (Closes #288)
- Improve the Django admin command reference from hyperkitty_import.
  (Closes #281)
- Fix ``FILTER_VHOST`` to work with web hosts other than the email host.
  (Closes #254)
- Fixed a bug where ``export`` can fail if certain headers are wrapped.
  (Closes #292)
- Fixed ``hyperkitty_import`` to allow odd line endings in a folded message
  subject.  (Closes #280)
- Fixed a bug that could throw an ``IndexError`` when exporting messages.
  (Closes #293)
- Use ``errors='replace'`` when encoding attachments.  (Closes #294)

1.3.2
=====

(2020-01-12)

- Remove support for Django 1.11. (Closes #273)
- Skip ``Thread.DoesNotExist`` exception when raised within
  ``rebuild_thread_cache_votes``. (Closes #245)
- Send 400 status code for ``ValueError`` when archiving. (Closes #271)
- Fix a bug where exception for elasticsearch backend would not be caught. (Closes #263)

1.3.1
=====

(2019-12-08)

- Add support to delete mailing list. (Closes #3)
- Fix a bug where messages with attachments would skip adding the body when
  exporting the email. (Closes #252)
- Fix a bug where exporting mbox with messages that have attachments saved
  to disk would raise exception and return a corrupt mbox. (Closes #258)
- Fix a bug where downloaded attachments are returned as a memoryview object
  instead of bytes and hence fail to download. (Closes #247)
- Fix a bug where migrations would fail with exceptions on postgresl. (Closes
  #266)
- Add support for Django 3.0.
- Add support for Python 3.8 with Django 2.2.


1.3.0
=====
(2019-09-04)

- Unread messages now have a blue envelope icon, instead of a gray one before to
  to make them more visible.
- Quoted text in emails have different visual background to improve readability.
- Quoted text is now visually quoted to 3 levels of replies with different visual
  background to improve readability.
- Add a new "All Threads" button in MailingList overview page to point to all the
  the threads in reverse date order. This should give a continuous list of threads.
- Fixes a bug where "All Threads" button leads to 500 page if there aren't any
  threads. (Closes #230)
- Add support for Django 2.2.
- Fix a bug where bad Date header could cause ``hyperkitty_import`` to exit with
  ``TypeError`` due to bad date type.
- Change the Overview page to remove the List of months from left side bar and
  convert different thread categories into tabs.
- Replace unmaintained ``lockfile`` dependency with ``flufl.lock``.
- Remove ``SingletonAsync`` implementation of ``AsyncTask`` and use the upstream
  version for better maintenance.
- Run update_index job hourly by default instead of minutely for performance
  reasons of whoosh.
- Email body now preserves leading whitespaces on lines and wraps around line
  boundary. (Closes #239)
- Do not indent replies on small screens. (Closes #224)
- Add a keyboard shortcut ``?`` to bring up list of keyboard shortcuts.
	(Closes #240)

1.2.2
=====
(2019-02-22)

- ``paintstore`` is no longer a dependency of Hyperkitty. This change requires
  that people change their ``settings.py`` and remove ``paintstore`` from
  ``INSTALLED_APPS``. (See #72)
- Folded Message-ID headers will no longer break threading.  (#216)
- MailingList descriptions are no longer a required field. This makes HyperKity
  more aligned with Core. (Closes #211)


1.2.1
=====
(2018-08-30)

- Several message defects that would cause ``hyperkitty_import`` to abort will
  now just cause the message to be skipped and allow importing to continue.
  (#183)
- If an imported message has no Date: header, ``hyperkitty_import`` will now
  look for Resent-Date: and the unixfrom date before archiving the message
  with the current date.  (#184)
- Add support for Django 2.1. Hyperkitty now supports Django 1.11-2.1 (#193)


1.2.0
=====
(2018-07-10)

- Handle email attachments returned by Scrubber as bytes or as strings with
  no specified encoding. (#171)
- Remove robotx.txt from Hyperkitty. It wasn't working correctly anyway.
  If you still need it, serve it from the webserver directly. (#176)
- Add the possibility to store attachments on the filesystem, using the
  ``HYPERKITTY_ATTACHMENT_FOLDER`` config variable.
- If a message in the mbox passed to ``hyperkitty_import`` is missing a
  ``Message-ID``, a generated one will be added. (#180)
- There is a new management command ``update_index_one_list`` to update the
  search index for a single list. (#175)


1.1.4
=====
(2017-10-09)

- Use an auto-incrementing integer for the MailingLists's id.
  **WARNING**: this migration will take a very long time (hours!) if you have
  a lot of emails in your database.
- Protect a couple tasks against thread and email deletion
- Improve performance in the cache rebuilding async task
- Drop the ``mailman2_download`` command. (#148)
- Adapt to the newest mailmanclient version (3.1.1).
- Handle the case when a moderated list is opened and there are pending
  subscriptions. (#152)
- Protect export_mbox against malformed URLs. (#153)


1.1.1
=====
(2017-08-04)

- Fix the Javascript in the overview page
- Make two Django commands compatible with Django >= 1.10
- Fix sorting in the MailingList's cache value
- Don't show emails before they have been analyzed
- Fix slowdown with PostgreSQL on some overview queries


1.1.0
=====
(2017-05-26)

- Add an async task system, check out the installation documentation to run the necessary commands.
- Support Django < 1.11 (support for 1.11 will arrive soon, only a dependency is not compatible).
- Switch to the Allauth login library
- Performance optimizations.
- Better REST API.
- Better handling of email sender names.
- Improve graphic design.


1.0.3
=====
(2015-11-15)

- Switch from LESS to Sass
- Many graphical improvements
- The SSLRedirect middleware is now optional
- Add an "Export to mbox" feature
- Allow choosing the email a reply or a new message will be sent as


0.9.6
=====
(2015-03-16)

* Adapt to the port of Mailman to Python3
* Merge KittyStore into HyperKitty
* Split off the Mailman archiver Plugin in its own module: mailman-hyperkitty
* Compatibility with Django 1.7


0.1.7
=====
(2014-01-30)

Many significant changes, mostly on:
* The caching system
* The user page
* The front page
* The list overview page


0.1.5
=====
(2013-05-18)

Here are the significant changes since 0.1.4:

* Merge and compress static files (CSS and Javascript)
* Django 1.5 compatibility
* Fixed REST API
* Improved RPM packaging
* Auto-subscribe the user to the list when they reply online
* New login providers: generic OpenID and Fedora
* Improved page loading on long threads: the replies are loaded asynchronously
* Replies are dynamically inserted in the thread view


0.1.4
=====
(2013-02-19)

Here are the significant changes:

* Beginning of RPM packaging
* Improved documentation
* Voting and favoriting is more dynamic (no page reload)
* Better emails display (text is wrapped)
* Replies are sorted by thread
* New logo
* DB schema migration with South
* General style update (Boostream, fluid layout)


0.1 (alpha)
===========
(2012-11-22)

Initial release of HyperKitty.

* login using django user account / browserid / google openid / yahoo openid
* use Twitter Bootstrap for stylesheets
* show basic list info and metrics
* show basic user profile
* Add tags to message threads
