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