--------------------------
Features
~~~~~~~~
- Added possibility to `extend openwisp-controller
<https://github.com/openwisp/openwisp-controller#extending-openwisp-controller>`_
- Added flat JSON widget for configuration variables
- Added JSON Schema widget to credentials admin
- Added ``device_registered`` signal
- Added `OpenWISP Notifications
<https://github.com/openwisp/openwisp-notifications#openwisp-notifications>`_
module as a dependency, which brings support for web and email
notifications for important events
- Allow using a different device model in update_config: his allows
`OpenWISP Monitoring
<https://github.com/openwisp/openwisp-monitoring#openwisp-monitoring>`_
to override the ``can_be_updated`` method to take into account the
monitoring status, so that push updates won't be attempted
- Added notifications for changes of ``is_working`` status of credentials
- UX, automatically add/remove default values to device context:
automatically add or remove default values of templates to the
configuration context (a.k.a. configuration variables) when templates
are added or removed from devices
- UX: added `system defined variables
<https://github.com/openwisp/openwisp-controller#system-defined-variables>`_
section
Changes
~~~~~~~
- **Backward incompatible**: the code of `django-netjsonconfig
<https://github.com/openwisp/django-netjsonconfig>`_ was merged in
openwisp-controller to simplify maintenance
- Changed API of ``device_location`` view for consistency:
``/api/device-location/{id}/`` becomes
``/api/v1/device/{id}/location/``, the old URL is kept for backward
compatibility but will be removed in the future
- **Backward incompatible change**: schema url endpoint changed to
``<controller-url>/config/schema.json`` and it's now in config namespace
instead of admin namespace
- Changed VPN DH length to 2048 and move its generation to the background
because it's a lot slower
- Admin: Order Device, Template and VPN alphabetically by default
- Admin: Added ``mac_address`` field to the device list page
(``DeviceAdmin.list_display``)
- Increased ``max_length`` of common name to ``64``
- Changed the config apply logic to avoid restarting the openwisp-config
deamon if the configuration apply procedure is already being run
- Made template ``config`` field required in most cases
- Changed ``DeviceConnection.failure_reason`` field to ``TextField``, this
avoids possible exception if ``failed_reason`` is very long, which may
happen in some corner cases
- Made Device ``verbose_name`` configurable, see
``OPENWISP_CONTROLLER_DEVICE_VERBOSE_NAME``
- Increased `netjsonconfig
<https://github.com/openwisp/netjsonconfig#netjsonconfig>`__ version to
0.9.x (which brings support for new interface types, `see the change log
of netjsonconfig
<http://netjsonconfig.openwisp.org/en/latest/general/changelog.html#version-0-9-0-2020-11-18>`_
for more information)
- Increased `django-x509
<https://github.com/openwisp/django-x509#django-x509>`_ version to 0.9.x
- Increased `django-loci
<https://github.com/openwisp/django-loci#django-loci>`_ version to 0.4.x
(which brings many bug fixes to the mapping feature, as long as support
for geo-coding and reverse geo-coding, `see the change log of
django-loci
<https://github.com/openwisp/django-loci/blob/master/CHANGES.rst#version-040-2020-11-19>`_
for more information)
- Increased `openwisp-users
<https://github.com/openwisp/openwisp-users#openwisp-users>`__ version
from 0.2.x to 0.5.x (which brings many interesting improvements to
multi-tenancy, `see the change log of openwisp-users
<https://github.com/openwisp/openwisp-users/blob/master/CHANGES.rst#version-050-2020-11-18>`_
for more information)
- Increased `django-taggit <https://github.com/jazzband/django-taggit>`_
version to 1.3.x
- Increased `openwisp-utils
<https://github.com/openwisp/openwisp-utils#openwisp-utils>`__ version
to 0.7.x
- Increased `django-rest-framework-gis
<https://github.com/openwisp/django-rest-framework-gis>`_ version to
0.16.x
- Added support for django 3.1
Bugfixes
~~~~~~~~
- Fixed JSON validation error when dealing with OpenVPN configuration
- Ensured ``unique`` in ``HARDWARE_ID_OPTIONS`` defaults to ``False``
- Avoid need of migration if ``HARDWARE_ID_OPTIONS`` is changed
- JS: prevent crash if backend value is empty
- Do not execute default template selection if device exists
- Close preview overlay on errors
- Avoid triggering ``config_modified`` signal during registration
- UI: Fixed whitespace after overview tab in in device page
- Validate ``Config.context`` and ``Template.default_values``:
``Config.context`` and ``Template.default_values`` must always be a
dictionary, falsy values will be converted to empty dictionary
automatically
- Fixed failures in ``update_config`` operation: the ``update_config``
operation will be executed only when the transaction is committed to the
database; also handled rare but possible error conditions
- Handled device not existing case in ``update_config`` task
- Fixed auto cert feature failure when device name is too long
- UI: avoid showing main scrollbar in preview mode
- Fixed ``OPENWISP_CONTROLLER_BACKEND_DEVICE_LIST = False``
- UI fixed advanced mode bugs: positioning is done using css instead of
js. Removed body scrollbar when in advanced mode. Back to normal mode
with ESC key. Hidden netjsonconfig docs hint on narrow screens.
- Avoid simultaneous ``update_config`` tasks: since now the launch of the
task is executed when the transaction is committed to the database, also
the check for other updates in progress must be moved there
- Fixed ``OPENWISP_CONTROLLER_CONTEXT`` setting getting modified at run
time
- Fixed z-index of preview overlay: the z-index is increased so it's
higher than the main navigation menu to avoid the possibility of
triggering the main menu inadvertently
- Prevent sending ``config_modified`` signal multiple times
- Fix timeout when changing template: slow operations are moved to the
background
- Fixed variablle validation: now all the available context (device
variables, system variables) are taken into account when performing
validation
- Removed unnecessary ``static()`` call from media assets