openwisp-controller 1.0.3__tar.gz → 1.1.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (352) hide show
  1. openwisp_controller-1.1.1/CHANGES.rst +817 -0
  2. openwisp_controller-1.1.1/PKG-INFO +161 -0
  3. openwisp_controller-1.1.1/README.rst +110 -0
  4. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/__init__.py +1 -1
  5. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/admin.py +1 -0
  6. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/admin.py +557 -55
  7. openwisp_controller-1.1.1/openwisp_controller/config/api/download_views.py +47 -0
  8. openwisp_controller-1.1.1/openwisp_controller/config/api/filters.py +144 -0
  9. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/api/serializers.py +121 -62
  10. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/api/urls.py +14 -3
  11. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/api/views.py +61 -31
  12. openwisp_controller-1.1.1/openwisp_controller/config/api/zerotier_service.py +195 -0
  13. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/apps.py +150 -1
  14. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/base/config.py +263 -32
  15. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/base/device.py +193 -12
  16. openwisp_controller-1.1.1/openwisp_controller/config/base/device_group.py +118 -0
  17. openwisp_controller-1.1.1/openwisp_controller/config/base/multitenancy.py +119 -0
  18. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/base/template.py +14 -7
  19. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/base/vpn.py +366 -87
  20. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/controller/views.py +29 -4
  21. openwisp_controller-1.1.1/openwisp_controller/config/exceptions.py +24 -0
  22. openwisp_controller-1.1.1/openwisp_controller/config/exportable.py +171 -0
  23. openwisp_controller-1.1.1/openwisp_controller/config/filters.py +36 -0
  24. openwisp_controller-1.1.1/openwisp_controller/config/handlers.py +154 -0
  25. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0001_squashed_0002_config_settings_uuid.py +2 -11
  26. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0003_template_tags.py +1 -2
  27. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0004_add_device_model.py +0 -1
  28. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0006_config_device_not_null.py +0 -1
  29. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0007_simplify_config.py +0 -1
  30. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0008_update_indexes.py +0 -1
  31. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0009_device_system.py +0 -1
  32. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0010_auto_20180106_1814.py +0 -1
  33. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0011_update_device_mac_address.py +0 -1
  34. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0012_auto_20180219_1501.py +0 -1
  35. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0013_last_ip_management_ip_and_status_applied.py +7 -2
  36. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0014_device_hardware_id.py +0 -1
  37. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0017_template_name_organization_unique_together.py +0 -1
  38. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0018_config_context.py +0 -1
  39. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0019_organization_mac_add_hardware_id_name_unique_together.py +0 -1
  40. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0020_remove_config_organization.py +0 -1
  41. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0021_vpn_key.py +0 -1
  42. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0022_vpn_format_dh.py +0 -1
  43. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0023_update_context.py +0 -1
  44. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0024_update_context_data.py +0 -1
  45. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0025_update_device_key.py +0 -1
  46. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0026_hardware_id_not_unique.py +0 -1
  47. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0027_add_indexes_on_ip_fields.py +7 -2
  48. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0028_template_default_values.py +0 -1
  49. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0029_merge_django_netjsonconfig.py +0 -1
  50. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0030_django_taggit_update.py +3 -2
  51. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0031_update_vpn_dh_param.py +0 -1
  52. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0032_update_legacy_vpn_backend.py +0 -1
  53. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0033_name_unique_per_organization.py +0 -1
  54. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0034_template_required.py +0 -1
  55. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0035_device_name_unique_optional.py +0 -1
  56. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0036_device_group.py +6 -1
  57. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0037_alter_taggedtemplate.py +0 -1
  58. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0038_vpn_subnet.py +0 -1
  59. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0039_wireguard_vxlan_ipam.py +4 -2
  60. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0040_vpnclient_ip_setnull.py +0 -1
  61. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0041_default_groups_organizationconfigsettings_permission.py +0 -1
  62. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0042_multiple_wireguard_tunnels.py +0 -1
  63. openwisp_controller-1.1.1/openwisp_controller/config/migrations/0043_devicegroup_templates.py +32 -0
  64. openwisp_controller-1.1.1/openwisp_controller/config/migrations/0044_config_error_reason.py +22 -0
  65. openwisp_controller-1.1.1/openwisp_controller/config/migrations/0045_alter_vpn_webhook_endpoint.py +25 -0
  66. openwisp_controller-1.1.1/openwisp_controller/config/migrations/0046_organizationlimits.py +49 -0
  67. openwisp_controller-1.1.1/openwisp_controller/config/migrations/0047_add_organizationlimits.py +18 -0
  68. openwisp_controller-1.1.1/openwisp_controller/config/migrations/0048_wifi_radio_band_migration.py +154 -0
  69. openwisp_controller-1.1.1/openwisp_controller/config/migrations/0049_devicegroup_context.py +30 -0
  70. openwisp_controller-1.1.1/openwisp_controller/config/migrations/0050_alter_vpnclient_unique_together.py +16 -0
  71. openwisp_controller-1.1.1/openwisp_controller/config/migrations/0051_organizationconfigsettings_context.py +30 -0
  72. openwisp_controller-1.1.1/openwisp_controller/config/migrations/0052_vpn_node_network_id.py +22 -0
  73. openwisp_controller-1.1.1/openwisp_controller/config/migrations/0053_vpnclient_secret.py +17 -0
  74. openwisp_controller-1.1.1/openwisp_controller/config/migrations/0054_device__is_deactivated.py +17 -0
  75. openwisp_controller-1.1.1/openwisp_controller/config/migrations/0055_alter_config_status.py +39 -0
  76. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/__init__.py +10 -0
  77. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/models.py +14 -1
  78. openwisp_controller-1.1.1/openwisp_controller/config/settings.py +69 -0
  79. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/signals.py +24 -0
  80. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/sortedm2m/fields.py +11 -0
  81. openwisp_controller-1.1.1/openwisp_controller/config/sortedm2m/forms.py +24 -0
  82. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/static/config/css/admin.css +72 -21
  83. openwisp_controller-1.1.1/openwisp_controller/config/static/config/css/device-delete-confirmation.css +11 -0
  84. openwisp_controller-1.1.1/openwisp_controller/config/static/config/css/devicegroup.css +10 -0
  85. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/static/config/css/lib/advanced-mode.css +13 -10
  86. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/static/config/css/lib/jsonschema-ui.css +22 -2
  87. openwisp_controller-1.1.1/openwisp_controller/config/static/config/js/device-delete-confirmation.js +12 -0
  88. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/static/config/js/lib/jsonschema-ui.js +1 -1
  89. openwisp_controller-1.1.1/openwisp_controller/config/static/config/js/management_ip.js +40 -0
  90. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/static/config/js/preview.js +5 -1
  91. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/static/config/js/relevant_templates.js +46 -20
  92. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/static/config/js/unsaved_changes.js +4 -0
  93. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/static/config/js/vpn.js +18 -16
  94. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/static/config/js/widget.js +84 -8
  95. openwisp_controller-1.1.1/openwisp_controller/config/static/import_export/import-openwisp.css +38 -0
  96. openwisp_controller-1.1.1/openwisp_controller/config/static/sortedm2m/patch_sortedm2m.js +16 -0
  97. openwisp_controller-1.1.1/openwisp_controller/config/static/support.css +4 -0
  98. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/tasks.py +49 -4
  99. openwisp_controller-1.1.1/openwisp_controller/config/tasks_zerotier.py +297 -0
  100. openwisp_controller-1.1.1/openwisp_controller/config/templates/admin/config/change_device_group.html +47 -0
  101. openwisp_controller-1.1.1/openwisp_controller/config/templates/admin/config/change_list_device.html +9 -0
  102. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/templates/admin/config/clone_template_form.html +24 -13
  103. openwisp_controller-1.1.1/openwisp_controller/config/templates/admin/config/device/change_form.html +34 -0
  104. openwisp_controller-1.1.1/openwisp_controller/config/templates/admin/config/device/delete_confirmation.html +81 -0
  105. openwisp_controller-1.1.1/openwisp_controller/config/templates/admin/config/device/delete_selected_confirmation.html +87 -0
  106. openwisp_controller-1.1.1/openwisp_controller/config/templates/admin/device_group/change_form.html +23 -0
  107. openwisp_controller-1.1.1/openwisp_controller/config/templates/admin/import_export/import.html +7 -0
  108. openwisp_controller-1.1.1/openwisp_controller/config/templates/reversion/config/revision_form.html +31 -0
  109. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/tests/pytest.py +1 -3
  110. openwisp_controller-1.1.1/openwisp_controller/config/tests/test_admin.py +2631 -0
  111. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/tests/test_api.py +631 -85
  112. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/tests/test_apps.py +34 -2
  113. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/tests/test_config.py +145 -27
  114. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/tests/test_controller.py +224 -24
  115. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/tests/test_device.py +279 -5
  116. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/tests/test_device_group.py +25 -3
  117. openwisp_controller-1.1.1/openwisp_controller/config/tests/test_handlers.py +37 -0
  118. openwisp_controller-1.1.1/openwisp_controller/config/tests/test_notifications.py +340 -0
  119. openwisp_controller-1.1.1/openwisp_controller/config/tests/test_selenium.py +405 -0
  120. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/tests/test_template.py +49 -12
  121. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/tests/test_views.py +51 -10
  122. openwisp_controller-1.1.1/openwisp_controller/config/tests/test_vpn.py +2039 -0
  123. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/tests/utils.py +174 -7
  124. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/utils.py +6 -0
  125. openwisp_controller-1.1.1/openwisp_controller/config/views.py +192 -0
  126. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/widgets.py +18 -21
  127. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/admin.py +25 -12
  128. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/api/serializer.py +11 -2
  129. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/api/views.py +30 -31
  130. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/apps.py +16 -26
  131. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/base/models.py +74 -15
  132. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/commands.py +20 -2
  133. openwisp_controller-1.1.1/openwisp_controller/connection/connectors/airos/snmp.py +5 -0
  134. openwisp_controller-1.1.1/openwisp_controller/connection/connectors/openwrt/snmp.py +5 -0
  135. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/connectors/openwrt/ssh.py +1 -1
  136. openwisp_controller-1.1.1/openwisp_controller/connection/connectors/snmp.py +34 -0
  137. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/connectors/ssh.py +17 -0
  138. openwisp_controller-1.1.1/openwisp_controller/connection/exceptions.py +9 -0
  139. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/migrations/0001_initial.py +0 -1
  140. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/migrations/0002_credentials_auto_add.py +0 -1
  141. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/migrations/0004_django3_1_upgrade.py +0 -1
  142. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/migrations/0005_device_connection_failure_reason.py +0 -1
  143. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/migrations/0006_name_unique_per_organization.py +0 -1
  144. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/migrations/0007_command.py +1 -1
  145. openwisp_controller-1.1.1/openwisp_controller/connection/migrations/0008_remove_conflicting_deviceconnections.py +30 -0
  146. openwisp_controller-1.1.1/openwisp_controller/connection/migrations/0009_alter_deviceconnection_unique_together.py +18 -0
  147. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/settings.py +15 -1
  148. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/static/connection/css/command-inline.css +41 -25
  149. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/static/connection/css/credentials.css +12 -5
  150. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/static/connection/js/commands.js +31 -17
  151. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/tasks.py +25 -6
  152. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/tests/test_admin.py +64 -8
  153. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/tests/test_api.py +144 -22
  154. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/tests/test_command_utilities.py +1 -1
  155. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/tests/test_models.py +217 -22
  156. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/tests/test_notifications.py +29 -29
  157. openwisp_controller-1.1.1/openwisp_controller/connection/tests/test_selenium.py +69 -0
  158. openwisp_controller-1.1.1/openwisp_controller/connection/tests/test_snmp.py +59 -0
  159. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/tests/test_ssh.py +14 -1
  160. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/tests/utils.py +4 -1
  161. openwisp_controller-1.1.1/openwisp_controller/connection/utils.py +6 -0
  162. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/widgets.py +8 -12
  163. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/geo/admin.py +46 -9
  164. openwisp_controller-1.1.1/openwisp_controller/geo/api/filters.py +27 -0
  165. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/geo/api/views.py +25 -18
  166. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/geo/apps.py +3 -0
  167. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/geo/base/models.py +2 -2
  168. openwisp_controller-1.1.1/openwisp_controller/geo/exportable.py +94 -0
  169. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/geo/migrations/0001_initial.py +0 -1
  170. openwisp_controller-1.1.1/openwisp_controller/geo/migrations/0003_alter_devicelocation_floorplan_location.py +34 -0
  171. openwisp_controller-1.1.1/openwisp_controller/geo/tests/test_admin.py +284 -0
  172. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/geo/tests/test_api.py +123 -16
  173. openwisp_controller-1.1.1/openwisp_controller/mixins.py +37 -0
  174. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/admin.py +2 -2
  175. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/api/serializers.py +2 -0
  176. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/apps.py +3 -0
  177. openwisp_controller-1.1.1/openwisp_controller/pki/base/__init__.py +0 -0
  178. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/base/models.py +0 -1
  179. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/migrations/0001_initial.py +0 -1
  180. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/migrations/0002_add_organization_name.py +0 -1
  181. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/migrations/0004_auto_20180106_1814.py +0 -1
  182. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/migrations/0005_organizational_unit_name.py +0 -1
  183. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/migrations/0006_add_x509_passphrase_field.py +0 -1
  184. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/migrations/0008_serial_number_length.py +0 -1
  185. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/migrations/0009_common_name_maxlength_64.py +0 -1
  186. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/migrations/0010_common_name_organization_unique.py +0 -1
  187. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/migrations/0011_disallowed_blank_key_length_or_digest.py +0 -1
  188. openwisp_controller-1.1.1/openwisp_controller/pki/tests/__init__.py +0 -0
  189. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/tests/test_admin.py +13 -14
  190. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/tests/test_api.py +12 -3
  191. openwisp_controller-1.1.1/openwisp_controller/subnet_division/__init__.py +0 -0
  192. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/subnet_division/admin.py +12 -15
  193. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/subnet_division/base/models.py +24 -12
  194. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/subnet_division/filters.py +30 -1
  195. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/subnet_division/migrations/0001_initial.py +0 -1
  196. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/subnet_division/migrations/0003_related_field_allow_blank.py +0 -1
  197. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/subnet_division/migrations/0004_index_rule_on_delete.py +0 -1
  198. openwisp_controller-1.1.1/openwisp_controller/subnet_division/migrations/0005_number_of_subnets_and_ips.py +41 -0
  199. openwisp_controller-1.1.1/openwisp_controller/subnet_division/rule_types/__init__.py +0 -0
  200. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/subnet_division/rule_types/base.py +52 -12
  201. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/subnet_division/rule_types/vpn.py +12 -0
  202. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/subnet_division/tasks.py +1 -3
  203. openwisp_controller-1.1.1/openwisp_controller/subnet_division/tests/__init__.py +0 -0
  204. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/subnet_division/tests/helpers.py +2 -4
  205. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/subnet_division/tests/test_admin.py +76 -1
  206. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/subnet_division/tests/test_models.py +364 -35
  207. openwisp_controller-1.1.1/openwisp_controller/subnet_division/tests/test_rule.py +39 -0
  208. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/tests/mixins.py +3 -0
  209. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/tests/test_selenium.py +45 -56
  210. openwisp_controller-1.1.1/openwisp_controller/tests/utils.py +51 -0
  211. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/vpn_backends.py +36 -1
  212. openwisp_controller-1.1.1/openwisp_controller.egg-info/PKG-INFO +161 -0
  213. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller.egg-info/SOURCES.txt +50 -1
  214. openwisp_controller-1.1.1/openwisp_controller.egg-info/requires.txt +18 -0
  215. openwisp_controller-1.1.1/pyproject.toml +22 -0
  216. openwisp_controller-1.1.1/requirements.txt +18 -0
  217. openwisp_controller-1.1.1/setup.cfg +12 -0
  218. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/setup.py +4 -20
  219. openwisp-controller-1.0.3/CHANGES.rst +0 -577
  220. openwisp-controller-1.0.3/PKG-INFO +0 -3802
  221. openwisp-controller-1.0.3/README.rst +0 -3780
  222. openwisp-controller-1.0.3/openwisp_controller/config/__init__.py +0 -1
  223. openwisp-controller-1.0.3/openwisp_controller/config/base/device_group.py +0 -41
  224. openwisp-controller-1.0.3/openwisp_controller/config/base/multitenancy.py +0 -35
  225. openwisp-controller-1.0.3/openwisp_controller/config/handlers.py +0 -71
  226. openwisp-controller-1.0.3/openwisp_controller/config/settings.py +0 -80
  227. openwisp-controller-1.0.3/openwisp_controller/config/static/config/css/clone-template-form.css +0 -31
  228. openwisp-controller-1.0.3/openwisp_controller/config/static/config/css/devicegroup.css +0 -10
  229. openwisp-controller-1.0.3/openwisp_controller/config/tests/test_admin.py +0 -1337
  230. openwisp-controller-1.0.3/openwisp_controller/config/tests/test_notifications.py +0 -80
  231. openwisp-controller-1.0.3/openwisp_controller/config/tests/test_selenium.py +0 -261
  232. openwisp-controller-1.0.3/openwisp_controller/config/tests/test_vpn.py +0 -913
  233. openwisp-controller-1.0.3/openwisp_controller/config/views.py +0 -117
  234. openwisp-controller-1.0.3/openwisp_controller/connection/__init__.py +0 -1
  235. openwisp-controller-1.0.3/openwisp_controller/geo/__init__.py +0 -1
  236. openwisp-controller-1.0.3/openwisp_controller/geo/tests/test_admin.py +0 -133
  237. openwisp-controller-1.0.3/openwisp_controller/mixins.py +0 -14
  238. openwisp-controller-1.0.3/openwisp_controller/pki/__init__.py +0 -1
  239. openwisp-controller-1.0.3/openwisp_controller/subnet_division/__init__.py +0 -1
  240. openwisp-controller-1.0.3/openwisp_controller/subnet_division/tests/test_rule.py +0 -13
  241. openwisp-controller-1.0.3/openwisp_controller/tests/utils.py +0 -56
  242. openwisp-controller-1.0.3/openwisp_controller.egg-info/PKG-INFO +0 -3802
  243. openwisp-controller-1.0.3/openwisp_controller.egg-info/requires.txt +0 -18
  244. openwisp-controller-1.0.3/requirements.txt +0 -18
  245. openwisp-controller-1.0.3/setup.cfg +0 -22
  246. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/LICENSE +0 -0
  247. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/MANIFEST.in +0 -0
  248. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/base.py +0 -0
  249. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/checks.py +0 -0
  250. {openwisp-controller-1.0.3/openwisp_controller/config/api → openwisp_controller-1.1.1/openwisp_controller/config}/__init__.py +0 -0
  251. {openwisp-controller-1.0.3/openwisp_controller/config/base → openwisp_controller-1.1.1/openwisp_controller/config/api}/__init__.py +0 -0
  252. {openwisp-controller-1.0.3/openwisp_controller/config/controller → openwisp_controller-1.1.1/openwisp_controller/config/base}/__init__.py +0 -0
  253. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/base/base.py +0 -0
  254. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/base/channels_consumer.py +0 -0
  255. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/base/tag.py +0 -0
  256. {openwisp-controller-1.0.3/openwisp_controller/config/sortedm2m → openwisp_controller-1.1.1/openwisp_controller/config/controller}/__init__.py +0 -0
  257. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/controller/urls.py +0 -0
  258. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/crypto.py +0 -0
  259. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/fixtures/test_templates.json +0 -0
  260. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0005_populate_device.py +0 -0
  261. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0015_default_groups_permissions.py +0 -0
  262. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/migrations/0016_default_organization_config_settings.py +0 -0
  263. {openwisp-controller-1.0.3/openwisp_controller/connection/base → openwisp_controller-1.1.1/openwisp_controller/config/sortedm2m}/__init__.py +0 -0
  264. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/static/config/css/lib/img/jsoneditor-icons.svg +0 -0
  265. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/static/config/js/lib/advanced-mode.js +0 -0
  266. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/static/config/js/lib/tomorrow_night_bright.js +0 -0
  267. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/static/config/js/switcher.js +0 -0
  268. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/static/config/js/tabs.js +0 -0
  269. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/static/config/js/utils.js +0 -0
  270. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/templates/admin/config/change_form.html +0 -0
  271. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/templates/admin/config/device_recover_form.html +0 -0
  272. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/templates/admin/config/jsonschema-widget.html +0 -0
  273. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/templates/admin/config/preview.html +0 -0
  274. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/templates/admin/config/system_context.html +0 -0
  275. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/tests/__init__.py +0 -0
  276. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/tests/test_tag.py +0 -0
  277. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/urls.py +0 -0
  278. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/config/validators.py +0 -0
  279. {openwisp-controller-1.0.3/openwisp_controller/connection/connectors → openwisp_controller-1.1.1/openwisp_controller/connection}/__init__.py +0 -0
  280. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/api/urls.py +0 -0
  281. {openwisp-controller-1.0.3/openwisp_controller/connection/connectors/openwrt → openwisp_controller-1.1.1/openwisp_controller/connection/base}/__init__.py +0 -0
  282. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/channels/consumers.py +0 -0
  283. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/channels/routing.py +0 -0
  284. {openwisp-controller-1.0.3/openwisp_controller/connection/tests → openwisp_controller-1.1.1/openwisp_controller/connection/connectors}/__init__.py +0 -0
  285. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/connectors/exceptions.py +0 -0
  286. {openwisp-controller-1.0.3/openwisp_controller/geo/api → openwisp_controller-1.1.1/openwisp_controller/connection/connectors/openwrt}/__init__.py +0 -0
  287. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/migrations/0003_default_group_permissions.py +0 -0
  288. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/migrations/__init__.py +0 -0
  289. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/models.py +0 -0
  290. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/schema.py +0 -0
  291. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/signals.py +0 -0
  292. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/static/connection/js/credentials.js +0 -0
  293. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/static/connection/js/lib/reconnecting-websocket.min.js +0 -0
  294. {openwisp-controller-1.0.3/openwisp_controller/geo/base → openwisp_controller-1.1.1/openwisp_controller/connection/tests}/__init__.py +0 -0
  295. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/tests/base.py +0 -0
  296. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/tests/pytest.py +0 -0
  297. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/tests/test-key.ed25519 +0 -0
  298. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/tests/test-key.rsa +0 -0
  299. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/connection/tests/test_tasks.py +0 -0
  300. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/context_processors.py +0 -0
  301. {openwisp-controller-1.0.3/openwisp_controller/geo/channels → openwisp_controller-1.1.1/openwisp_controller/geo}/__init__.py +0 -0
  302. {openwisp-controller-1.0.3/openwisp_controller/geo/tests → openwisp_controller-1.1.1/openwisp_controller/geo/api}/__init__.py +0 -0
  303. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/geo/api/serializers.py +0 -0
  304. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/geo/api/urls.py +0 -0
  305. {openwisp-controller-1.0.3/openwisp_controller/pki → openwisp_controller-1.1.1/openwisp_controller/geo}/base/__init__.py +0 -0
  306. {openwisp-controller-1.0.3/openwisp_controller/pki/tests → openwisp_controller-1.1.1/openwisp_controller/geo/channels}/__init__.py +0 -0
  307. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/geo/channels/consumers.py +0 -0
  308. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/geo/channels/routing.py +0 -0
  309. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/geo/migrations/0002_default_groups_permissions.py +0 -0
  310. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/geo/migrations/__init__.py +0 -0
  311. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/geo/models.py +0 -0
  312. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/geo/templates/admin/widgets/foreign_key_raw_id.html +0 -0
  313. {openwisp-controller-1.0.3/openwisp_controller/subnet_division/rule_types → openwisp_controller-1.1.1/openwisp_controller/geo/tests}/__init__.py +0 -0
  314. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/geo/tests/pytest.py +0 -0
  315. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/geo/tests/test_admin_inline.py +0 -0
  316. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/geo/tests/test_apps.py +0 -0
  317. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/geo/tests/test_models.py +0 -0
  318. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/geo/tests/utils.py +0 -0
  319. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/geo/utils.py +0 -0
  320. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/migrations.py +0 -0
  321. {openwisp-controller-1.0.3/openwisp_controller/subnet_division/tests → openwisp_controller-1.1.1/openwisp_controller/pki}/__init__.py +0 -0
  322. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/api/urls.py +0 -0
  323. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/api/views.py +0 -0
  324. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/migrations/0003_fill_organization_name.py +0 -0
  325. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/migrations/0007_default_groups_permissions.py +0 -0
  326. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/migrations/__init__.py +0 -0
  327. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/models.py +0 -0
  328. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/static/admin/pki/js/show-org-field.js +0 -0
  329. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/templates/admin/pki/change_form.html +0 -0
  330. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/tests/test_models.py +0 -0
  331. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/tests/utils.py +0 -0
  332. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/urls.py +0 -0
  333. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/pki/utils.py +0 -0
  334. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/routing.py +0 -0
  335. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/settings.py +0 -0
  336. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/subnet_division/apps.py +0 -0
  337. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/subnet_division/migrations/0002_default_group_migration.py +0 -0
  338. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/subnet_division/migrations/__init__.py +0 -0
  339. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/subnet_division/models.py +0 -0
  340. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/subnet_division/rule_types/device.py +0 -0
  341. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/subnet_division/settings.py +0 -0
  342. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/subnet_division/signals.py +0 -0
  343. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/subnet_division/static/subnet-division/css/subnet-division.css +0 -0
  344. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/subnet_division/static/subnet-division/js/subnet-division.js +0 -0
  345. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/subnet_division/utils.py +0 -0
  346. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/tests/__init__.py +0 -0
  347. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/tests/test_users_integration.py +0 -0
  348. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/tests/test_utilities.py +0 -0
  349. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller/urls.py +0 -0
  350. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller.egg-info/dependency_links.txt +0 -0
  351. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller.egg-info/not-zip-safe +0 -0
  352. {openwisp-controller-1.0.3 → openwisp_controller-1.1.1}/openwisp_controller.egg-info/top_level.txt +0 -0
@@ -0,0 +1,817 @@
1
+ Changelog
2
+ =========
3
+
4
+ Version 1.1.1 [2025-01-31]
5
+ --------------------------
6
+
7
+ Bugfixes
8
+ ~~~~~~~~
9
+
10
+ - Fixed `recovering deleted device with related location
11
+ <https://github.com/openwisp/openwisp-controller/issues/936>`__.
12
+ - Fixed `deleting device with “deactivating” config status
13
+ <https://github.com/openwisp/openwisp-controller/issues/949>`__.
14
+ - Fixed `conversion of MAC address to uppercase format
15
+ <https://github.com/openwisp/openwisp-controller/issues/922>`__ with the
16
+ openwisp-config agent.
17
+ - Fixed `updating templates with invalid configurations to prevent
18
+ ValidationError due to cache invalidation mechanism
19
+ <https://github.com/openwisp/openwisp-controller/pull/948>`__.
20
+
21
+ Version 1.1.0 [2024-11-22]
22
+ --------------------------
23
+
24
+ Features
25
+ ~~~~~~~~
26
+
27
+ - Added `support for ZeroTier
28
+ <https://openwisp.io/docs/stable/controller/user/zerotier.html>`_.
29
+ - Added support for adding `configuration templates
30
+ <https://openwisp.io/docs/stable/controller/user/device-groups.html#group-templates>`_
31
+ and `configuration variables
32
+ <https://openwisp.io/docs/stable/controller/user/device-groups.html#group-configuration-variables>`_
33
+ to device groups.
34
+ - Implemented support for `SNMP credentials
35
+ <https://openwisp.io/docs/stable/controller/user/intro.html#snmp>`_.
36
+ - Added support for device deactivation and reactivation.
37
+ - Introduced an admin action to quickly move devices between groups.
38
+ - Added autocomplete support for filters in the admin interface.
39
+ - Added support to display configuration errors reported by the OpenWISP
40
+ config agent.
41
+ - Enabled filtering of subnets by Subnet Division Rule type.
42
+ - Allowed `limiting the number of devices per organization
43
+ <https://openwisp.io/docs/stable/controller/user/organization-limits.html>`_.
44
+ - Added support for defining organization-level variables.
45
+ - Enabled `bulk import and export of devices
46
+ <https://openwisp.io/docs/stable/controller/user/import-export.html>`_.
47
+ - Added `functionality to configure available commands for each
48
+ organization
49
+ <https://openwisp.io/docs/stable/controller/user/settings.html#openwisp-controller-organization-enabled-commands>`_.
50
+ - Added a dashboard chart showing the distribution of devices across
51
+ different groups.
52
+ - Added filters to the REST API.
53
+
54
+ Changes
55
+ ~~~~~~~
56
+
57
+ - Removing a VPN template from a device will not deleted the certificates
58
+ associated with the ``VPNClient``. Instead, the certificates will be
59
+ marked as revoked.
60
+ - Allowed reusing ``VNI`` across all the tunnels created using an instance
61
+ VXLAN over WireGuard VPN.
62
+ - Added a data migration for updating ``hwmode`` configuration option of
63
+ radio to "band". The ``hwmode`` option is deprecated on OpenWrt > 21.
64
+ - The configuration push update will not flag the configuration status as
65
+ "applied". The status will be update once the OpenWISP Config agent on
66
+ the device reports the status.
67
+ - Updated ``DeviceConnection.connect`` to attempt all available
68
+ credentials.
69
+ - Changed the ``on_cascade`` property of ``BaseDeviceLocation.location``
70
+ and ``BaseDeviceLocation.floorplan`` from ``PROTECTED`` to ``CASCADE``.
71
+ - Controller views will return ``HTTP 404`` response for devices belonging
72
+ to disabled organizations.
73
+ - Show a loading indicator for commands in progress.
74
+ - Added VPN subnet CIDR to device's system-defined variables.
75
+ - Allowed defining subnet and IP address for VPNs with OpenVPN backend.
76
+ - Changed the target link for configuration error notifications to the
77
+ "Configuration" tab of the device.
78
+ - JSONSchema Editor widget allows to define extra CSS classes. It will
79
+ ignore fields with ``manual`` class.
80
+ - Increased the soft time limit for celery task that operates of bulk
81
+ objects.
82
+ - Added notifications for background subnet division rule errors.
83
+ - Added `name` and `mac_address` to device list filters in the API.
84
+ - Use autocomplete fields for related fields.
85
+
86
+ **Dependencies**:
87
+
88
+ - Bumped ``django-sortedm2m~=4.0.0``.
89
+ - Bumped ``django-reversion~=5.1.0``.
90
+ - Bumped ``django-taggit~=4.0.0``.
91
+ - Bumped ``netjsonconfig~=1.1.0``.
92
+ - Bumped ``django-x509~=1.2.0``.
93
+ - Bumped ``django-loci~=1.1.0``.
94
+ - Bumped ``django-flat-json-widget~=0.3.0``.
95
+ - Bumped ``openwisp-users~=1.1.0``.
96
+ - Bumped ``openwisp-utils[celery]~=1.1.1``.
97
+ - Bumped ``openwisp-notifications~=1.1.0``.
98
+ - Bumped ``openwisp-ipam~=1.1.0``.
99
+ - Bumped ``djangorestframework-gis~=1.1``.
100
+ - Bumped ``paramiko[ed25519]~=3.5.0``.
101
+ - Bumped ``scp~=0.15.0``.
102
+ - Bumped ``django-cache-memoize~=0.2.0``.
103
+ - Bumped ``shortuuid~=1.0.13``.
104
+ - Bumped ``netaddr~=1.3.0``.
105
+ - Bumped ``django-import-export~=3.3.0``.
106
+ - Added support for Django ``4.1.x`` and ``4.2.x``.
107
+ - Added support for Python ``3.10``.
108
+ - Dropped support for Python ``3.7``.
109
+ - Dropped support for Django ``3.0.x`` and ``3.1.x``.
110
+
111
+ Bugfixes
112
+ ~~~~~~~~
113
+
114
+ - Fixed `bug for displaying relevant templates where the backend of the
115
+ device's configuration template does not match
116
+ <https://github.com/openwisp/openwisp-controller/pull/771>`_.
117
+ - Fixed `displaying the command widget when the user has write permissions
118
+ <https://github.com/openwisp/openwisp-controller/pull/854>`_.
119
+ - Fixed `DeviceConnection.get_working_connection to handle scenario where
120
+ the device has no credentials
121
+ <https://github.com/openwisp/openwisp-controller/pull/720>`_.
122
+ - `User need to have required model permissions to perform admin actions
123
+ <https://github.com/openwisp/openwisp-controller/pull/873>`_.
124
+ - Fixed `import device preview table when browser is set to dark mode
125
+ <https://github.com/openwisp/openwisp-controller/issues/851>`_.
126
+ - Fixed `subnet division rule does not allow assigning only 1 ip in /32
127
+ <https://github.com/openwisp/openwisp-controller/issues/842>`_.
128
+ - Fixed `Device._has_group() wrongly returning True
129
+ <https://github.com/openwisp/openwisp-controller/pull/804>`_.
130
+ - Fixed `JS of history pages on config app
131
+ <https://github.com/openwisp/openwisp-controller/issues/681>`_.
132
+ - Fixed `REST API can creates device configs inadvertently
133
+ <https://github.com/openwisp/openwisp-controller/issues/699>`_.
134
+ - Fixed `broken shared template preview
135
+ <https://github.com/openwisp/openwisp-controller/issues/742>`_.
136
+ - Fixed `command APIs permissions
137
+ <https://github.com/openwisp/openwisp-controller/issues/754>`_.
138
+ - Fixed `deleting VpnClient result in deleting all provisioned subnets of
139
+ the device <https://github.com/openwisp/openwisp-controller/pull/805>`_.
140
+ - Fixed `group templates re-creating VPN clients
141
+ <https://github.com/openwisp/openwisp-controller/issues/703>`_.
142
+ - Fixed `DeviceListSerializer returning HTTP 500 instead of HTTP 400
143
+ reponse on invalid data
144
+ <https://github.com/openwisp/openwisp-controller/issues/695>`_.
145
+ - Fixed `re-ordering applied templates in device config
146
+ <https://github.com/openwisp/openwisp-controller/pull/830>`_.
147
+ - Fixed `re-ordering templates on device add page
148
+ <https://github.com/openwisp/openwisp-controller/issues/434>`_.
149
+ - Fixed `several issues with clone template feature
150
+ <https://github.com/openwisp/openwisp-controller/pull/838>`_.
151
+ - Fixed `updating template organization puts devices in perennial
152
+ "modified" state
153
+ <https://github.com/openwisp/openwisp-controller/issues/213>`_.
154
+ - Fixed `user defined commands that do not require input
155
+ <https://github.com/openwisp/openwisp-controller/pull/871>`_.
156
+ - Fixed `validation for SubnetDivisionRule
157
+ <https://github.com/openwisp/openwisp-controller/issues/706>`_.
158
+ - Fixed `subnet division rule validation when master subnet is empty
159
+ <https://github.com/openwisp/openwisp-controller/issues/866>`_.
160
+ - Fixed `validation in change device group admin action
161
+ <https://github.com/openwisp/openwisp-controller/issues/762>`_.
162
+ - `Increased "timeoutInterval" for ReconnectingWebSocket
163
+ <https://github.com/openwisp/openwisp-controller/issues/772>`_.
164
+ - Added `JS workaround for using mac address variable
165
+ <https://github.com/openwisp/openwisp-controller/pull/876>`_.
166
+ - Fixed `same credential can be added to a device twice
167
+ <https://github.com/openwisp/openwisp-controller/issues/795>`_.
168
+ - `Show reversion button to operators too
169
+ <https://github.com/openwisp/openwisp-controller/pull/652>`_.
170
+ - Fixed `unsaved changes alert triggering on previewing configuration
171
+ <https://github.com/openwisp/openwisp-controller/pull/857>`_.
172
+ - Fixed `dependency on the creation date in get_max_subnet method
173
+ <https://github.com/openwisp/openwisp-controller/issues/728>`_.
174
+ - Fixed `Vpn.webhook_endpoint accepting invalid URL
175
+ <https://github.com/openwisp/openwisp-controller/issues/689>`_.
176
+ - Fixed `object and config menu not opening in Device config editor
177
+ <https://github.com/openwisp/openwisp-controller/pull/913>`.
178
+
179
+ Version 1.0.3 [2022-08-03]
180
+ --------------------------
181
+
182
+ Bugfixes
183
+ ~~~~~~~~
184
+
185
+ - `Fixed tests failing due to openwisp-notification>=1.0.2
186
+ <https://github.com/openwisp/openwisp-controller/pull/670>`_
187
+ - `Fixed checksum cache is not invalidated on VPN server change
188
+ <https://github.com/openwisp/openwisp-controller/issues/667>`_
189
+
190
+ Version 1.0.2 [2022-07-01]
191
+ --------------------------
192
+
193
+ Bugfixes
194
+ ~~~~~~~~
195
+
196
+ - Fixed `device's "changed" signals emitting on the creation of new device
197
+ <https://github.com/openwisp/openwisp-controller/issues/649>`_
198
+ - Fixed *django-reversion's* recovery buttons were hidden from users of
199
+ the "Operator" group in the admin dashboard of ``Certificate`` and
200
+ ``CA`` models
201
+ - Removed `hardcoded static URLs
202
+ <https://github.com/openwisp/openwisp-controller/issues/660>`_ which
203
+ created issues when static files are served using an external service
204
+ (e.g. S3 storage buckets)
205
+ - Fixed `permissions for "Operator" and "Administrator" groups to access
206
+ "OrganizationConfigSettings" objects
207
+ <https://github.com/openwisp/openwisp-controller/issues/664>`_
208
+ - Fixed `support for multiple wireguard tunnels on the same devices
209
+ <https://github.com/openwisp/openwisp-controller/issues/657>`_
210
+ - Fixed `"/api/v1/controller/device/{id}/" REST API endpoint not updating
211
+ the device's configuration backend
212
+ <https://github.com/openwisp/openwisp-controller/issues/658>`_
213
+
214
+ Version 1.0.1 [2022-05-11]
215
+ --------------------------
216
+
217
+ Bugfixes
218
+ ~~~~~~~~
219
+
220
+ - Admin: show main group information in ``DeviceGroupAdmin`` list: - name
221
+ - organization - modified - created
222
+ - Fixed uncaught exception triggered on the deletion of VPN client
223
+ certificates
224
+ - SSH connection: fixed OpenWrt <= 19 authentication failure
225
+ - The SSH connection is now explicitly closed when the authentication
226
+ fails to avoid leaving lingering SSH connection objects open
227
+
228
+ Version 1.0.0 [2022-04-29]
229
+ --------------------------
230
+
231
+ Features
232
+ ~~~~~~~~
233
+
234
+ - Added support for `remotely executing shell commands on device
235
+ <https://github.com/openwisp/openwisp-controller#sending-commands-to-devices>`_
236
+ - Added `automatic provisioning of Subnets and IPs
237
+ <https://github.com/openwisp/openwisp-controller#subnet-division-app>`_
238
+ - Added `support for WireGuard and VXLAN tunnels
239
+ <https://github.com/openwisp/openwisp-controller#how-to-setup-wireguard-tunnels>`_
240
+ - Added `required templates
241
+ <https://github.com/openwisp/openwisp-controller#required-templates>`_
242
+ - Added support for generating configurations for OpenWrt 21
243
+ - Added `REST API
244
+ <https://github.com/openwisp/openwisp-controller#rest-api-reference>`_
245
+ - Added dashboard charts for *config status*, *model*, *OS*, *hardware*
246
+ and *location type*
247
+ - Added `management_ip_changed
248
+ <https://github.com/openwisp/openwisp-controller#management_ip_changed>`_
249
+ and `device_name_changed
250
+ <https://github.com/openwisp/openwisp-controller#device_name_changed>`_
251
+ signals
252
+ - Added `OPENWISP_CONTROLLER_DEVICE_NAME_UNIQUE setting
253
+ <https://github.com/openwisp/openwisp-controller#openwisp_controller_device_name_unique>`_
254
+ to conditionally enforce unique device names in an organization
255
+ - Added caching for ``DeviceChecksumView``
256
+ - Added support for ED25519 SSH keys in ``Credentials``
257
+ - Added `Device Groups
258
+ <https://github.com/openwisp/openwisp-controller#device-groups>`_ to
259
+ organize devices of a particular organization
260
+ - Configuration push updates now use the SIGUSR1 signal to reload
261
+ openwisp-config
262
+ - The device list admin page now allows to search for location address
263
+
264
+ Changes
265
+ ~~~~~~~
266
+
267
+ Backward incompatible changes
268
+ +++++++++++++++++++++++++++++
269
+
270
+ - Since django-sortedm2m, the widget we use to implement ordered
271
+ templates, clears all the many to many relationships every time it has
272
+ to make changes, we had to stop deleting ``VpnClient`` instances related
273
+ to VPN templates on ``post_clear`` m2m signals If you wrote any custom
274
+ derivative which relies on calls like
275
+ ``device.config.templates.clear()`` to delete related ``VpnClient``
276
+ instances and their x509 certificates, you will have to update your code
277
+ to remove all the templates using their primary keys, instead of using
278
+ ``clear()``
279
+ - The default behavior for the resolution of conflicting management IPs
280
+ between devices of different organizations has been changed; by default,
281
+ in this new version, the system assumes it's using only 1 management
282
+ tunnel for all the organizations, so different devices from any
283
+ organization will not have the same management IP to avoid conflicts.
284
+ The old behaviour can be restored by setting
285
+ `OPENWISP_CONTROLLER_SHARED_MANAGEMENT_IP_ADDRESS_SPACE
286
+ <https://github.com/openwisp/openwisp-controller#openwisp_controller_shared_management_ip_address_space>`_
287
+ to ``False``
288
+ - ``OPENWISP_CONTROLLER_BACKEND_DEVICE_LIST`` has been renamed to
289
+ ``OPENWISP_CONTROLLER_CONFIG_BACKEND_FIELD_SHOWN``
290
+ - ``Device.check_management_ip_changed`` has been changed to private API
291
+ ``Device._check_management_ip_changed``
292
+
293
+ Dependencies
294
+ ++++++++++++
295
+
296
+ - Dropped support for Python 3.6
297
+ - Dropped support for Django 2.2
298
+ - Added support for Python 3.8 and 3.9
299
+ - Added support for Django 3.2 and 4.0
300
+ - Upgraded django-sortedm2m to 3.1.x
301
+ - Upgraded django-reversion to 4.0.x
302
+ - Upgraded django-taggit to 2.1.x
303
+ - Upgraded djangorestframework-gis to 0.18.0
304
+ - Upgraded paramiko[ed25519] to 2.10.3
305
+ - Upgraded scp to 0.14.2
306
+ - Upgraded django-flat-json-widget to 0.2.x
307
+ - Upgraded celery to 5.2.x
308
+ - Upgraded channels to 3.0.x
309
+ - Upgraded django-x509 to 1.1.x
310
+ - Upgraded django-loci to 1.0.x
311
+ - Upgraded netjsonconfig to 1.0.x
312
+ - Upgraded openwisp-utils to 1.0.x
313
+ - Upgraded openwisp-users to 1.0.x
314
+ - Upgraded openwisp-notifications to 1.0.x
315
+ - Upgraded openwisp-ipam to 1.0.x
316
+ - Added shortuuid 1.0.x
317
+ - Added netaddr 0.8.x
318
+ - Added django-cache-memoize to 0.1
319
+
320
+ Other changes
321
+ +++++++++++++
322
+
323
+ - `Reworked implementation of config_modified signal
324
+ <https://github.com/openwisp/openwisp-controller#config_modified>`_:
325
+
326
+ - the signal is now always emitted on templates changes m2m events, also
327
+ if ``config.status`` is modified, with the differences that only
328
+ post_add and post_remove m2m events are used, while ``post_clear`` is
329
+ ignored, which fixes the duplicate signal emission caused by the
330
+ implementation of sortedm2m;
331
+ - added ``action`` and ``previous_status`` arguments, which allow to
332
+ understand where the ``config_modified`` signal is being emitted from,
333
+ this allows more advanced usage of the signal by custom
334
+ implementations
335
+
336
+ - Context variable follows template order: If two or more applied
337
+ templates have "default_values" with the same keys, then the context
338
+ variables of the template which comes later in the order will be used
339
+ - New credentials created with ``auto_add`` set to ``True`` will get added
340
+ to the existing devices in a background task. This improves the
341
+ responsiveness of the web application
342
+ - Decoupled admin LogEntry from Template model
343
+ - Device admin only lists relevant templates, i.e. templates that are
344
+ shared or belong to the device's organization
345
+ - Improved UX of `system-defined variables
346
+ <https://github.com/openwisp/openwisp-controller/issues/344>`_
347
+ - Name of ``Vpn``, ``Template`` and ``Credentials`` objects is unique only
348
+ within the same organization and within the shared objects
349
+ - Added functionality to configure connection failure reasons for which
350
+ the system should not send notifications. Added ``old_failure_reason``
351
+ parameter in
352
+ ``openwisp_controller.connection.signals.is_working_changed`` signal
353
+ - Allowed searching devices using their location address in Device admin.
354
+ - Removed deprecated ``api/device-location/<pk>`` endpoint
355
+ - Made device name unique per organization instead of unique system wide
356
+ - Added time limits to background celery tasks
357
+
358
+ Bugfixes
359
+ ~~~~~~~~
360
+
361
+ - Fixed a bug which caused ``VpnClient`` instances to be recreated every
362
+ time the configuration templates of a device were changed, which caused
363
+ x590 certificates to be destroyed and recreated as well
364
+ - Hardened config validation of OpenVPN backend. The validation fails if
365
+ the ``openvpn`` key is missing from the configuration
366
+ - Fixed a bug that caused issues in updating related ``Config`` whenever a
367
+ template's ``default_values`` were changed
368
+ - Fixed pop-up view of CA and Cert not displaying data
369
+ - Fixed config status stays ``applied`` after clearing all device
370
+ templates
371
+ - Fixed ``VpnClient`` not created when multiple VPN templates are added
372
+ - Fixed configuration editor raising validation error when using variables
373
+ in fields with ``maxLength`` set
374
+ - Fixed connection notifications reporting outdated status
375
+ - Fixed migrations referencing non-swappable OpenWISP modules that broke
376
+ OpenWISP's extensibility
377
+ - Fixed bugs in restoring deleted devices using ``django-reversion``
378
+ - Fixed cloning of shared templates
379
+ - Disallowed blank values for ``key_length`` or ``digest`` fields for
380
+ ``CA`` and ``Cert`` objects
381
+ - Fixed template ordering bug in the configuration preview on Device admin
382
+ The order of templates was not always retained when generating the
383
+ preview of a config object
384
+
385
+ Version 0.8.4 [2021-04-09]
386
+ --------------------------
387
+
388
+ Bugfixes
389
+ ~~~~~~~~
390
+
391
+ - Fixed `bug in connection module
392
+ <https://github.com/openwisp/openwisp-controller/issues/370>`_ that
393
+ raised ``UnicodeDecodeError``, improved logging and ignored unicode
394
+ conversion issues
395
+ - Fixed `context loading from default values of templates overwriting
396
+ system defined variables
397
+ <https://github.com/openwisp/openwisp-controller/issues/352>`_ in device
398
+ admin
399
+ - Fixed `default template selection not updating after changing backend
400
+ field <https://github.com/openwisp/openwisp-controller/issues/354>`_ in
401
+ device admin
402
+ - Fixed JSONSchema widget to enable working with a single schema
403
+ - Fixed `related configuration not getting updated after template
404
+ "default_values" are changed
405
+ <https://github.com/openwisp/openwisp-controller/issues/352>`_
406
+ - Fixed `bug which caused the unsaved changes alert in device admin
407
+ <https://github.com/openwisp/openwisp-controller/issues/388>`_ when
408
+ location of device is present
409
+ - Fixed `bug replacing manually entered device information with empty
410
+ string <https://github.com/openwisp/openwisp-controller/issues/425>`_
411
+ - Fixed `multiple requests for fetching default template values in device
412
+ admin <https://github.com/openwisp/openwisp-controller/issues/423>`_
413
+
414
+ Security
415
+ ~~~~~~~~
416
+
417
+ - Patched security bugs in internal HTTP endpoints which allowed to obtain
418
+ UUID of other organizations and other sensitive information
419
+
420
+ Version 0.8.3 [2020-12-18]
421
+ --------------------------
422
+
423
+ Bugfixes
424
+ ~~~~~~~~
425
+
426
+ - Increased minimum `openwisp-users version to ~=0.5.1
427
+ <https://github.com/openwisp/openwisp-users/blob/master/CHANGES.rst#version-051-2020-12-13>`_,
428
+ which fixes an `issue in the production setup
429
+ <https://github.com/openwisp/ansible-openwisp2/issues/233>`_
430
+
431
+ Version 0.8.2 [2020-12-11]
432
+ --------------------------
433
+
434
+ Bugfixes
435
+ ~~~~~~~~
436
+
437
+ - Fixed the `bug
438
+ <https://github.com/openwisp/openwisp-controller/issues/334>`_ that
439
+ prevented users from adding/editing access credentials.
440
+
441
+ Changes
442
+ ~~~~~~~
443
+
444
+ - Increased `django-x509
445
+ <https://github.com/openwisp/django-x509#django-x509>`_ version to 0.9.2
446
+ - Increased `django-flat-json-widget
447
+ <https://github.com/openwisp/django-flat-json-widget#django-flat-json-widget>`_
448
+ version to 0.1.2
449
+ - Changed the `preview` button colors for better readability
450
+ - Added *help text* for *device name* field
451
+
452
+ Version 0.8.1 [2020-12-02]
453
+ --------------------------
454
+
455
+ Bugfixes
456
+ ~~~~~~~~
457
+
458
+ - Fixed tests that were dependent on specific settings of the Django
459
+ project.
460
+
461
+ Version 0.8.0 [2020-11-23]
462
+ --------------------------
463
+
464
+ Features
465
+ ~~~~~~~~
466
+
467
+ - Added possibility to `extend openwisp-controller
468
+ <https://github.com/openwisp/openwisp-controller#extending-openwisp-controller>`_
469
+ - Added flat JSON widget for configuration variables
470
+ - Added JSON Schema widget to credentials admin
471
+ - Added ``device_registered`` signal
472
+ - Added `OpenWISP Notifications
473
+ <https://github.com/openwisp/openwisp-notifications#openwisp-notifications>`_
474
+ module as a dependency, which brings support for web and email
475
+ notifications for important events
476
+ - Allow using a different device model in update_config: his allows
477
+ `OpenWISP Monitoring
478
+ <https://github.com/openwisp/openwisp-monitoring#openwisp-monitoring>`_
479
+ to override the ``can_be_updated`` method to take into account the
480
+ monitoring status, so that push updates won't be attempted
481
+ - Added notifications for changes of ``is_working`` status of credentials
482
+ - UX, automatically add/remove default values to device context:
483
+ automatically add or remove default values of templates to the
484
+ configuration context (a.k.a. configuration variables) when templates
485
+ are added or removed from devices
486
+ - UX: added `system defined variables
487
+ <https://github.com/openwisp/openwisp-controller#system-defined-variables>`_
488
+ section
489
+
490
+ Changes
491
+ ~~~~~~~
492
+
493
+ - **Backward incompatible**: the code of `django-netjsonconfig
494
+ <https://github.com/openwisp/django-netjsonconfig>`_ was merged in
495
+ openwisp-controller to simplify maintenance
496
+ - Changed API of ``device_location`` view for consistency:
497
+ ``/api/device-location/{id}/`` becomes
498
+ ``/api/v1/device/{id}/location/``, the old URL is kept for backward
499
+ compatibility but will be removed in the future
500
+ - **Backward incompatible change**: schema url endpoint changed to
501
+ ``<controller-url>/config/schema.json`` and it's now in config namespace
502
+ instead of admin namespace
503
+ - Changed VPN DH length to 2048 and move its generation to the background
504
+ because it's a lot slower
505
+ - Admin: Order Device, Template and VPN alphabetically by default
506
+ - Admin: Added ``mac_address`` field to the device list page
507
+ (``DeviceAdmin.list_display``)
508
+ - Increased ``max_length`` of common name to ``64``
509
+ - Changed the config apply logic to avoid restarting the openwisp-config
510
+ deamon if the configuration apply procedure is already being run
511
+ - Made template ``config`` field required in most cases
512
+ - Changed ``DeviceConnection.failure_reason`` field to ``TextField``, this
513
+ avoids possible exception if ``failed_reason`` is very long, which may
514
+ happen in some corner cases
515
+ - Made Device ``verbose_name`` configurable, see
516
+ ``OPENWISP_CONTROLLER_DEVICE_VERBOSE_NAME``
517
+ - Increased `netjsonconfig
518
+ <https://github.com/openwisp/netjsonconfig#netjsonconfig>`__ version to
519
+ 0.9.x (which brings support for new interface types, `see the change log
520
+ of netjsonconfig
521
+ <http://netjsonconfig.openwisp.org/en/latest/general/changelog.html#version-0-9-0-2020-11-18>`_
522
+ for more information)
523
+ - Increased `django-x509
524
+ <https://github.com/openwisp/django-x509#django-x509>`_ version to 0.9.x
525
+ - Increased `django-loci
526
+ <https://github.com/openwisp/django-loci#django-loci>`_ version to 0.4.x
527
+ (which brings many bug fixes to the mapping feature, as long as support
528
+ for geo-coding and reverse geo-coding, `see the change log of
529
+ django-loci
530
+ <https://github.com/openwisp/django-loci/blob/master/CHANGES.rst#version-040-2020-11-19>`_
531
+ for more information)
532
+ - Increased `openwisp-users
533
+ <https://github.com/openwisp/openwisp-users#openwisp-users>`__ version
534
+ from 0.2.x to 0.5.x (which brings many interesting improvements to
535
+ multi-tenancy, `see the change log of openwisp-users
536
+ <https://github.com/openwisp/openwisp-users/blob/master/CHANGES.rst#version-050-2020-11-18>`_
537
+ for more information)
538
+ - Increased `django-taggit <https://github.com/jazzband/django-taggit>`_
539
+ version to 1.3.x
540
+ - Increased `openwisp-utils
541
+ <https://github.com/openwisp/openwisp-utils#openwisp-utils>`__ version
542
+ to 0.7.x
543
+ - Increased `django-rest-framework-gis
544
+ <https://github.com/openwisp/django-rest-framework-gis>`_ version to
545
+ 0.16.x
546
+ - Added support for django 3.1
547
+
548
+ Bugfixes
549
+ ~~~~~~~~
550
+
551
+ - Fixed JSON validation error when dealing with OpenVPN configuration
552
+ - Ensured ``unique`` in ``HARDWARE_ID_OPTIONS`` defaults to ``False``
553
+ - Avoid need of migration if ``HARDWARE_ID_OPTIONS`` is changed
554
+ - JS: prevent crash if backend value is empty
555
+ - Do not execute default template selection if device exists
556
+ - Close preview overlay on errors
557
+ - Avoid triggering ``config_modified`` signal during registration
558
+ - UI: Fixed whitespace after overview tab in in device page
559
+ - Validate ``Config.context`` and ``Template.default_values``:
560
+ ``Config.context`` and ``Template.default_values`` must always be a
561
+ dictionary, falsy values will be converted to empty dictionary
562
+ automatically
563
+ - Fixed failures in ``update_config`` operation: the ``update_config``
564
+ operation will be executed only when the transaction is committed to the
565
+ database; also handled rare but possible error conditions
566
+ - Handled device not existing case in ``update_config`` task
567
+ - Fixed auto cert feature failure when device name is too long
568
+ - UI: avoid showing main scrollbar in preview mode
569
+ - Fixed ``OPENWISP_CONTROLLER_BACKEND_DEVICE_LIST = False``
570
+ - UI fixed advanced mode bugs: positioning is done using css instead of
571
+ js. Removed body scrollbar when in advanced mode. Back to normal mode
572
+ with ESC key. Hidden netjsonconfig docs hint on narrow screens.
573
+ - Avoid simultaneous ``update_config`` tasks: since now the launch of the
574
+ task is executed when the transaction is committed to the database, also
575
+ the check for other updates in progress must be moved there
576
+ - Fixed ``OPENWISP_CONTROLLER_CONTEXT`` setting getting modified at run
577
+ time
578
+ - Fixed z-index of preview overlay: the z-index is increased so it's
579
+ higher than the main navigation menu to avoid the possibility of
580
+ triggering the main menu inadvertently
581
+ - Prevent sending ``config_modified`` signal multiple times
582
+ - Fix timeout when changing template: slow operations are moved to the
583
+ background
584
+ - Fixed variablle validation: now all the available context (device
585
+ variables, system variables) are taken into account when performing
586
+ validation
587
+ - Removed unnecessary ``static()`` call from media assets
588
+
589
+ Version 0.7.0.post1 [2020-07-01]
590
+ --------------------------------
591
+
592
+ - Increased minimum django-netjsonconfig version to 0.12
593
+
594
+ Version 0.7.0 [2020-07-01]
595
+ --------------------------
596
+
597
+ - [feature] Added signals: ``config_status_changed``,
598
+ ``checksum_requested``, ``config_download_requested``
599
+ - [feature] Added the possibility of specifying default values for
600
+ variables used in templates
601
+ - [feature] Added ``banner_timeout``
602
+ - [feature] Emit signal when ``DeviceConnection.is_working`` changes
603
+ - [change] **Backward incompatible change**: the ``config_modified``
604
+ signal is not emitted anymore when the device is created
605
+ - [change] VPN files now have 0600 permissions by default
606
+ - [change] Increased minimum `netjsonconfig
607
+ <https://github.com/openwisp/netjsonconfig>`_ version to 0.8.0
608
+ - [change] Increased minimum `paramiko
609
+ <https://github.com/paramiko/paramiko>`_ version to 2.7.1
610
+ - [change] Increased minimum `celery <https://github.com/celery/celery/>`_
611
+ version to 4.4.3
612
+ - [fix] Avoid errors being hidden by tabs
613
+ - [fix] Fixed clashes between javascript schema validation and variables
614
+ - [fix] Fixed exception when adding device credential without type
615
+ - [fix] Fixed exception when auto adding device credentials to devices
616
+ which don't have a configuration
617
+ - [fix] Avoid multiple devices having the same management IP address
618
+ (multiple devices having the same last IP is allowed because last IP is
619
+ almost always a public address)
620
+ - [docs] Documented SSH timeouts
621
+ - [docs] Update outdated steps in README instructions
622
+
623
+ Version 0.6.0 [2020-04-02]
624
+ --------------------------
625
+
626
+ - Added controller view that allows to update the device information
627
+ (firmware version used)
628
+ - Recover deleted object views in recoverable objects now show latest
629
+ objects first
630
+ - Added ``NETJSONCONFIG_HARDWARE_ID_AS_NAME`` setting
631
+
632
+ Version 0.5.2 [2020-03-18]
633
+ --------------------------
634
+
635
+ - [controller] Added ``NETJSONCONFIG_REGISTRATION_SELF_CREATION``
636
+ - [models] Handled accidental duplication of files across templates
637
+ - [controller] Update hardware device info during registration (if the
638
+ device already exists, the registration will update its info)
639
+ - [admin] Moved ``hardware_id`` field in device list admin
640
+ - [bugfix] Fixed broken preview when using ``hardware_id`` context var
641
+ - [models] Flagged ``hardware_id`` as not unique (it's ``unique_together``
642
+ with ``organization``)
643
+ - [admin] Hidden device configuration context field into advanced options
644
+ - [models] Removed LEDE from the OpenWRT backend label
645
+ - [docker] Added ``REDIS_URL`` to docker-compose.yml and settings.py (for
646
+ dev and test env)
647
+
648
+ Version 0.5.1 [2020-02-28]
649
+ --------------------------
650
+
651
+ - [models] Improved consistent key generation, now a consisten key is
652
+ generated also when creating devices from the admin interface (or via
653
+ model API), before it was only done during registration
654
+ - [admin] Fixed unsaved changes JS bug that was triggered in certain cases
655
+ - [deps] Switched back to jsonfield
656
+
657
+ Version 0.5.0 [2020-02-05]
658
+ --------------------------
659
+
660
+ - [deps] Upgraded to django 3, upgraded dependencies
661
+ - [deps] Dropped support for python 2
662
+ - [x509] Fixed serial number max length (imported from django-x509)
663
+ - [admin] Fixed bug that caused organization field to be missing when
664
+ importing a CA or certificate
665
+
666
+ Version 0.4.0 [2020-01-09]
667
+ --------------------------
668
+
669
+ - [feature] Added connection module (possibility to SSH into devices)
670
+ - [feature] Added default operator group
671
+ - [feature] Added management IP feature
672
+ - [change] Changed configuration status: ``running`` has been renamed to
673
+ ``applied``
674
+ - [admin] Added ``NETJSONCONFIG_MANAGEMENT_IP_DEVICE_LIST`` setting
675
+ - [admin] Added ``NETJSONCONFIG_BACKEND_DEVICE_LIST`` setting
676
+ - [x509] Fixed common_name redundancy
677
+ - [admin] Hidden "Download Configuration" button when no config is
678
+ available
679
+ - [controller] Register view now updates device details
680
+ - [deps] Added support for Django 2.1 and Django 2.2
681
+ - [models] Added support for hardware ID / serial number
682
+ - [device] Add context field to device
683
+ - [bugfix] Show error when the preview is experiencing issues
684
+ - [ux] Group device change form in tabs
685
+ - [ux] Show loading indicator while loading preview
686
+ - [vpn] Add controller views (download & checksum) for VPN config
687
+ - [vpn] Fixed DH params in preview #107
688
+ - [change] Moved urls to admin namespace
689
+ - [feature] Implement copy/clone templates
690
+ - [feature] Added API to get context of device
691
+ - [bugfix] Ensure atomicity of transactions with database during
692
+ auto-registration
693
+
694
+ Version 0.3.2 [2018-02-19]
695
+ --------------------------
696
+
697
+ - [requirements] Updated requirements and added support for django 2.0
698
+
699
+ Version 0.3.1 [2017-12-20]
700
+ --------------------------
701
+
702
+ - [pki] Reimplemented serial numbers as UUID integers
703
+ - [pki] Added switcher that facilitates importing certificates
704
+ - [pki] [admin] Removed ``serial_number`` from certificate list
705
+
706
+ Version 0.3.0 [2017-12-17]
707
+ --------------------------
708
+
709
+ - [feature] Added geographic and indoor mapping module
710
+ - [feature] Aded Dockerfile
711
+
712
+ Version 0.2.5 [2017-12-02]
713
+ --------------------------
714
+
715
+ - `#21 <https://github.com/openwisp/openwisp-controller/issues/21>`_:
716
+ [admin] Added a link to password reset in login form
717
+
718
+ Version 0.2.4 [2017-11-07]
719
+ --------------------------
720
+
721
+ - Added support for django-x509 0.3.0
722
+
723
+ Version 0.2.3 [2017-08-29]
724
+ --------------------------
725
+
726
+ - `934be13
727
+ <https://github.com/openwisp/openwisp-controller/commit/934be13>`_:
728
+ [models] Updated sortedm2m __str__ definition
729
+ - `b76e4e2
730
+ <https://github.com/openwisp/openwisp-controller/commit/b76e4e2>`_:
731
+ [requirements] django-netjsonconfig>=0.6.3,<0.7.0
732
+
733
+ Version 0.2.2 [2017-07-10]
734
+ --------------------------
735
+
736
+ - `f3dc784
737
+ <https://github.com/openwisp/openwisp-controller/commit/f3dc784>`_:
738
+ [admin] Moved ``submit_line.html`` to `openwisp-utils
739
+ <https://github.com/openwisp/openwisp-utils>`_
740
+
741
+ Version 0.2.1 [2017-07-05]
742
+ --------------------------
743
+
744
+ - `0064b98
745
+ <https://github.com/openwisp/openwisp-controller/commit/0064b98>`_:
746
+ [device] Added ``system`` field
747
+ - `c7fe513
748
+ <https://github.com/openwisp/openwisp-controller/commit/c7fe513>`_:
749
+ [docs] Added "Installing for development" section to README
750
+ - `c75fa68
751
+ <https://github.com/openwisp/openwisp-controller/commit/c75fa68>`_:
752
+ [openwisp-utils] Moved shared logic to `openwisp-utils
753
+ <https://github.com/openwisp/openwisp-utils>`_
754
+ - `819cb21
755
+ <https://github.com/openwisp/openwisp-controller/commit/819cb21>`_:
756
+ [requirements] django-netjsonconfig>=0.6.2,<0.7.0
757
+
758
+ Version 0.2.0 [2017-05-24]
759
+ --------------------------
760
+
761
+ - `#3 <https://github.com/openwisp/openwisp-controller/issues/3>`_:
762
+ [feature] Added support for template tags
763
+ - `#7 <https://github.com/openwisp/openwisp-controller/issues/7>`_:
764
+ [feature] Added ``Device`` model
765
+ - `#9 <https://github.com/openwisp/openwisp-controller/issues/9>`_:
766
+ [admin] Load default templates JS logic only when required
767
+ - `298b2a2
768
+ <https://github.com/openwisp/openwisp-controller/commit/298b2a2>`_:
769
+ [admin] Avoid setting ``extra_content`` to mutable object
770
+ - `d173c24
771
+ <https://github.com/openwisp/openwisp-controller/commit/d173c24>`_:
772
+ [migrations] Squashed ``0001`` and ``0002`` to avoid postgres error
773
+ - `f5fb628
774
+ <https://github.com/openwisp/openwisp-controller/commit/f5fb628>`_:
775
+ [migrations] Updated indexes
776
+ - `6200b7a
777
+ <https://github.com/openwisp/openwisp-controller/commit/6200b7a>`_:
778
+ [Template] Fixed ``auto_client`` bug
779
+
780
+ Version 0.1.4 [2017-04-21]
781
+ --------------------------
782
+
783
+ - `#2 <https://github.com/openwisp/openwisp-controller/issues/2>`_:
784
+ [admin] Added templates in config filter
785
+
786
+ Version 0.1.3 [2017-03-11]
787
+ --------------------------
788
+
789
+ - `db77ae7
790
+ <https://github.com/openwisp/openwisp-controller/commit/db77ae7>`_:
791
+ [controller] Added "error: " prefix in error responses
792
+
793
+ Version 0.1.2 [2017-03-15]
794
+ --------------------------
795
+
796
+ - `3c61053
797
+ <https://github.com/openwisp/openwisp-controller/commit/3c61053>`_:
798
+ [admin] Ensure preview button is present
799
+ - `0087483
800
+ <https://github.com/openwisp/openwisp-controller/commit/0087483>`_:
801
+ [models] Converted ``OrganizationConfigSettings`` to UUID primary key
802
+
803
+ Version 0.1.1 [2017-03-10]
804
+ --------------------------
805
+
806
+ - `cbca4e1
807
+ <https://github.com/openwisp/openwisp-controller/commit/cbca4e1>`_:
808
+ [users] Fixed integration with `openwisp-users
809
+ <https://github.com/openwisp/openwisp-users>`_
810
+
811
+ Version 0.1.0 [2017-03-08]
812
+ --------------------------
813
+
814
+ - added multi-tenancy (separation of organizations) to `openwisp2
815
+ <http://openwisp.org>`_
816
+ - added email confirmation of new users (via `django-allauth
817
+ <http://www.intenct.nl/projects/django-allauth/>`_)