openwisp-controller 1.1.2__tar.gz → 1.2__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 (392) hide show
  1. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/CHANGES.rst +80 -1
  2. {openwisp_controller-1.1.2/openwisp_controller.egg-info → openwisp_controller-1.2}/PKG-INFO +17 -17
  3. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/README.rst +2 -2
  4. openwisp_controller-1.2/openwisp_controller/__init__.py +20 -0
  5. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/base.py +7 -7
  6. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/checks.py +10 -10
  7. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/admin.py +385 -369
  8. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/api/download_views.py +6 -6
  9. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/api/filters.py +41 -41
  10. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/api/serializers.py +155 -128
  11. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/api/urls.py +30 -30
  12. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/api/views.py +65 -53
  13. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/api/zerotier_service.py +35 -35
  14. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/apps.py +150 -198
  15. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/base/base.py +20 -20
  16. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/base/channels_consumer.py +13 -13
  17. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/base/config.py +293 -141
  18. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/base/device.py +51 -51
  19. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/base/device_group.py +27 -27
  20. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/base/multitenancy.py +20 -20
  21. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/base/tag.py +6 -6
  22. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/base/template.py +117 -57
  23. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/base/vpn.py +222 -223
  24. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/controller/urls.py +1 -1
  25. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/controller/views.py +80 -88
  26. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/crypto.py +2 -2
  27. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/exceptions.py +5 -5
  28. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/exportable.py +54 -54
  29. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/filters.py +14 -12
  30. openwisp_controller-1.2/openwisp_controller/config/fixtures/test_templates.json +50 -0
  31. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/handlers.py +26 -26
  32. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0001_squashed_0002_config_settings_uuid.py +159 -159
  33. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0003_template_tags.py +35 -35
  34. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0004_add_device_model.py +34 -34
  35. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0005_populate_device.py +4 -4
  36. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0006_config_device_not_null.py +4 -4
  37. openwisp_controller-1.2/openwisp_controller/config/migrations/0007_simplify_config.py +13 -0
  38. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0008_update_indexes.py +20 -20
  39. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0009_device_system.py +5 -5
  40. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0010_auto_20180106_1814.py +7 -7
  41. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0011_update_device_mac_address.py +7 -7
  42. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0012_auto_20180219_1501.py +7 -7
  43. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0013_last_ip_management_ip_and_status_applied.py +36 -36
  44. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0014_device_hardware_id.py +3 -3
  45. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0015_default_groups_permissions.py +1 -1
  46. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0016_default_organization_config_settings.py +3 -3
  47. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0017_template_name_organization_unique_together.py +2 -2
  48. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0018_config_context.py +6 -6
  49. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0019_organization_mac_add_hardware_id_name_unique_together.py +17 -17
  50. openwisp_controller-1.2/openwisp_controller/config/migrations/0020_remove_config_organization.py +11 -0
  51. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0021_vpn_key.py +6 -6
  52. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0022_vpn_format_dh.py +2 -2
  53. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0023_update_context.py +6 -6
  54. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0024_update_context_data.py +3 -3
  55. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0025_update_device_key.py +7 -7
  56. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0026_hardware_id_not_unique.py +3 -3
  57. openwisp_controller-1.2/openwisp_controller/config/migrations/0027_add_indexes_on_ip_fields.py +39 -0
  58. openwisp_controller-1.2/openwisp_controller/config/migrations/0028_template_default_values.py +29 -0
  59. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0029_merge_django_netjsonconfig.py +13 -13
  60. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0030_django_taggit_update.py +16 -16
  61. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0031_update_vpn_dh_param.py +1 -1
  62. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0032_update_legacy_vpn_backend.py +4 -4
  63. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0033_name_unique_per_organization.py +6 -6
  64. openwisp_controller-1.2/openwisp_controller/config/migrations/0034_template_required.py +24 -0
  65. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0035_device_name_unique_optional.py +4 -4
  66. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0036_device_group.py +30 -30
  67. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0037_alter_taggedtemplate.py +11 -11
  68. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0038_vpn_subnet.py +5 -5
  69. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0039_wireguard_vxlan_ipam.py +44 -44
  70. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0040_vpnclient_ip_setnull.py +7 -7
  71. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0041_default_groups_organizationconfigsettings_permission.py +1 -1
  72. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0042_multiple_wireguard_tunnels.py +18 -18
  73. openwisp_controller-1.2/openwisp_controller/config/migrations/0043_devicegroup_templates.py +32 -0
  74. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0044_config_error_reason.py +5 -5
  75. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0045_alter_vpn_webhook_endpoint.py +6 -6
  76. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0046_organizationlimits.py +13 -13
  77. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0047_add_organizationlimits.py +1 -1
  78. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0048_wifi_radio_band_migration.py +54 -54
  79. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0049_devicegroup_context.py +7 -7
  80. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0051_organizationconfigsettings_context.py +7 -7
  81. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0052_vpn_node_network_id.py +5 -5
  82. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0053_vpnclient_secret.py +3 -3
  83. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0054_device__is_deactivated.py +3 -3
  84. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0055_alter_config_status.py +2 -2
  85. openwisp_controller-1.2/openwisp_controller/config/migrations/0056_vpnclient_template.py +24 -0
  86. openwisp_controller-1.2/openwisp_controller/config/migrations/0057_populate_vpnclient_template.py +25 -0
  87. openwisp_controller-1.2/openwisp_controller/config/migrations/0058_alter_vpnclient_template.py +22 -0
  88. openwisp_controller-1.2/openwisp_controller/config/migrations/0059_zerotier_templates_ow_zt_to_global.py +25 -0
  89. openwisp_controller-1.2/openwisp_controller/config/migrations/0060_cleanup_api_task_notification_types.py +35 -0
  90. openwisp_controller-1.2/openwisp_controller/config/migrations/0061_config_checksum_db.py +57 -0
  91. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/__init__.py +30 -30
  92. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/models.py +10 -10
  93. openwisp_controller-1.2/openwisp_controller/config/settings.py +69 -0
  94. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/sortedm2m/fields.py +3 -3
  95. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/sortedm2m/forms.py +4 -4
  96. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/static/config/css/admin.css +24 -17
  97. openwisp_controller-1.2/openwisp_controller/config/static/config/css/device-delete-confirmation.css +20 -0
  98. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/static/config/css/lib/advanced-mode.css +74 -43
  99. openwisp_controller-1.2/openwisp_controller/config/static/config/css/lib/jsonschema-ui.css +558 -0
  100. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/static/config/js/device-delete-confirmation.js +0 -1
  101. openwisp_controller-1.2/openwisp_controller/config/static/config/js/preview.js +110 -0
  102. openwisp_controller-1.2/openwisp_controller/config/static/config/js/relevant_templates.js +226 -0
  103. openwisp_controller-1.2/openwisp_controller/config/static/config/js/switcher.js +43 -0
  104. openwisp_controller-1.2/openwisp_controller/config/static/config/js/tabs.js +87 -0
  105. openwisp_controller-1.2/openwisp_controller/config/static/config/js/unsaved_changes.js +125 -0
  106. openwisp_controller-1.2/openwisp_controller/config/static/config/js/utils.js +113 -0
  107. openwisp_controller-1.2/openwisp_controller/config/static/config/js/vpn.js +71 -0
  108. openwisp_controller-1.2/openwisp_controller/config/static/config/js/widget.js +1050 -0
  109. openwisp_controller-1.2/openwisp_controller/config/static/sortedm2m/patch_sortedm2m.js +15 -0
  110. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tasks.py +58 -36
  111. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tasks_zerotier.py +85 -59
  112. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/device/delete_confirmation.html +4 -5
  113. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/device/delete_selected_confirmation.html +4 -5
  114. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/device_group/change_form.html +1 -1
  115. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tests/pytest.py +15 -15
  116. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_admin.py +1143 -991
  117. openwisp_controller-1.2/openwisp_controller/config/tests/test_api.py +1771 -0
  118. openwisp_controller-1.2/openwisp_controller/config/tests/test_apps.py +85 -0
  119. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_config.py +292 -249
  120. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_controller.py +467 -467
  121. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_device.py +154 -154
  122. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_device_group.py +14 -14
  123. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_handlers.py +8 -8
  124. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_notifications.py +59 -50
  125. openwisp_controller-1.2/openwisp_controller/config/tests/test_selenium.py +620 -0
  126. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_tag.py +3 -3
  127. openwisp_controller-1.2/openwisp_controller/config/tests/test_template.py +969 -0
  128. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_views.py +92 -89
  129. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_vpn.py +511 -504
  130. openwisp_controller-1.2/openwisp_controller/config/tests/utils.py +417 -0
  131. openwisp_controller-1.2/openwisp_controller/config/urls.py +6 -0
  132. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/utils.py +39 -39
  133. openwisp_controller-1.2/openwisp_controller/config/validators.py +27 -0
  134. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/views.py +101 -35
  135. openwisp_controller-1.2/openwisp_controller/config/widgets.py +68 -0
  136. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/admin.py +44 -48
  137. openwisp_controller-1.2/openwisp_controller/connection/api/serializers.py +117 -0
  138. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/api/urls.py +13 -13
  139. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/api/views.py +54 -46
  140. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/apps.py +55 -55
  141. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/base/models.py +99 -86
  142. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/channels/consumers.py +2 -2
  143. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/channels/routing.py +1 -1
  144. openwisp_controller-1.2/openwisp_controller/connection/commands.py +164 -0
  145. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/connectors/exceptions.py +8 -0
  146. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/connectors/openwrt/ssh.py +12 -12
  147. openwisp_controller-1.2/openwisp_controller/connection/connectors/snmp.py +34 -0
  148. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/connectors/ssh.py +61 -49
  149. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/migrations/0001_initial.py +47 -47
  150. openwisp_controller-1.2/openwisp_controller/connection/migrations/0002_credentials_auto_add.py +23 -0
  151. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/migrations/0003_default_group_permissions.py +1 -1
  152. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/migrations/0004_django3_1_upgrade.py +3 -3
  153. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/migrations/0005_device_connection_failure_reason.py +5 -5
  154. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/migrations/0006_name_unique_per_organization.py +4 -4
  155. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/migrations/0007_command.py +34 -29
  156. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/migrations/0008_remove_conflicting_deviceconnections.py +6 -6
  157. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/migrations/0009_alter_deviceconnection_unique_together.py +3 -3
  158. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/migrations/__init__.py +15 -15
  159. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/models.py +3 -3
  160. openwisp_controller-1.2/openwisp_controller/connection/settings.py +49 -0
  161. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/static/connection/css/command-inline.css +5 -7
  162. openwisp_controller-1.2/openwisp_controller/connection/static/connection/js/commands.js +642 -0
  163. openwisp_controller-1.2/openwisp_controller/connection/static/connection/js/credentials.js +22 -0
  164. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tasks.py +19 -14
  165. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tests/pytest.py +26 -26
  166. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tests/test_admin.py +70 -70
  167. openwisp_controller-1.2/openwisp_controller/connection/tests/test_api.py +862 -0
  168. openwisp_controller-1.2/openwisp_controller/connection/tests/test_command_utilities.py +61 -0
  169. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tests/test_models.py +300 -300
  170. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tests/test_notifications.py +38 -38
  171. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tests/test_selenium.py +27 -27
  172. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tests/test_snmp.py +11 -11
  173. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tests/test_ssh.py +39 -28
  174. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tests/test_tasks.py +18 -18
  175. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tests/utils.py +41 -41
  176. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/utils.py +2 -2
  177. openwisp_controller-1.2/openwisp_controller/connection/widgets.py +48 -0
  178. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/context_processors.py +1 -1
  179. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/admin.py +18 -18
  180. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/api/filters.py +3 -3
  181. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/api/serializers.py +99 -102
  182. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/api/urls.py +1 -1
  183. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/api/views.py +27 -27
  184. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/apps.py +35 -35
  185. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/base/models.py +8 -8
  186. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/channels/consumers.py +1 -1
  187. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/channels/routing.py +2 -2
  188. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/exportable.py +22 -22
  189. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/migrations/0001_initial.py +67 -67
  190. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/migrations/0002_default_groups_permissions.py +1 -1
  191. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/migrations/0003_alter_devicelocation_floorplan_location.py +5 -5
  192. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/migrations/__init__.py +6 -6
  193. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/models.py +3 -3
  194. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/tests/pytest.py +14 -14
  195. openwisp_controller-1.2/openwisp_controller/geo/tests/test_admin.py +321 -0
  196. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/tests/test_admin_inline.py +21 -20
  197. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/tests/test_api.py +379 -379
  198. openwisp_controller-1.2/openwisp_controller/geo/tests/test_apps.py +19 -0
  199. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/tests/test_models.py +7 -7
  200. openwisp_controller-1.2/openwisp_controller/geo/tests/test_selenium.py +115 -0
  201. openwisp_controller-1.2/openwisp_controller/geo/tests/utils.py +68 -0
  202. openwisp_controller-1.2/openwisp_controller/geo/utils.py +44 -0
  203. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/mixins.py +3 -5
  204. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/admin.py +10 -10
  205. openwisp_controller-1.2/openwisp_controller/pki/api/serializers.py +193 -0
  206. openwisp_controller-1.2/openwisp_controller/pki/api/urls.py +42 -0
  207. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/api/views.py +9 -9
  208. openwisp_controller-1.2/openwisp_controller/pki/apps.py +46 -0
  209. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/base/models.py +7 -7
  210. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/0001_initial.py +118 -118
  211. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/0002_add_organization_name.py +7 -7
  212. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/0003_fill_organization_name.py +5 -5
  213. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/0004_auto_20180106_1814.py +9 -9
  214. openwisp_controller-1.2/openwisp_controller/pki/migrations/0005_organizational_unit_name.py +24 -0
  215. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/0006_add_x509_passphrase_field.py +7 -7
  216. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/0007_default_groups_permissions.py +1 -1
  217. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/0008_serial_number_length.py +9 -9
  218. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/0009_common_name_maxlength_64.py +7 -7
  219. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/0010_common_name_organization_unique.py +18 -18
  220. openwisp_controller-1.2/openwisp_controller/pki/migrations/0011_disallowed_blank_key_length_or_digest.py +79 -0
  221. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/__init__.py +7 -7
  222. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/models.py +2 -2
  223. openwisp_controller-1.2/openwisp_controller/pki/static/admin/pki/js/show-org-field.js +9 -0
  224. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/tests/test_admin.py +48 -48
  225. openwisp_controller-1.2/openwisp_controller/pki/tests/test_api.py +370 -0
  226. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/tests/test_models.py +14 -13
  227. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/tests/utils.py +6 -6
  228. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/urls.py +1 -1
  229. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/utils.py +3 -3
  230. openwisp_controller-1.2/openwisp_controller/serializers.py +12 -0
  231. openwisp_controller-1.2/openwisp_controller/settings.py +3 -0
  232. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/admin.py +21 -21
  233. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/apps.py +9 -9
  234. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/base/models.py +41 -41
  235. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/filters.py +19 -19
  236. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/migrations/0001_initial.py +46 -46
  237. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/migrations/0002_default_group_migration.py +1 -1
  238. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/migrations/0003_related_field_allow_blank.py +7 -7
  239. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/migrations/0004_index_rule_on_delete.py +3 -3
  240. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/migrations/0005_number_of_subnets_and_ips.py +13 -13
  241. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/migrations/__init__.py +8 -8
  242. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/models.py +2 -2
  243. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/rule_types/base.py +27 -27
  244. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/rule_types/device.py +13 -13
  245. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/rule_types/vpn.py +14 -14
  246. openwisp_controller-1.2/openwisp_controller/subnet_division/settings.py +28 -0
  247. openwisp_controller-1.2/openwisp_controller/subnet_division/static/subnet-division/js/subnet-division.js +56 -0
  248. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/tasks.py +21 -21
  249. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/tests/helpers.py +21 -21
  250. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/tests/test_admin.py +60 -60
  251. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/tests/test_models.py +177 -177
  252. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/tests/test_rule.py +13 -13
  253. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/utils.py +9 -9
  254. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/tests/__init__.py +3 -3
  255. openwisp_controller-1.2/openwisp_controller/tests/mixins.py +36 -0
  256. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/tests/test_selenium.py +22 -19
  257. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/tests/test_utilities.py +11 -11
  258. openwisp_controller-1.2/openwisp_controller/tests/utils.py +18 -0
  259. openwisp_controller-1.2/openwisp_controller/urls.py +84 -0
  260. openwisp_controller-1.2/openwisp_controller/vpn_backends.py +106 -0
  261. {openwisp_controller-1.1.2 → openwisp_controller-1.2/openwisp_controller.egg-info}/PKG-INFO +17 -17
  262. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller.egg-info/SOURCES.txt +9 -2
  263. openwisp_controller-1.2/openwisp_controller.egg-info/requires.txt +18 -0
  264. openwisp_controller-1.2/requirements.txt +18 -0
  265. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/setup.py +15 -15
  266. openwisp_controller-1.1.2/openwisp_controller/__init__.py +0 -20
  267. openwisp_controller-1.1.2/openwisp_controller/config/fixtures/test_templates.json +0 -50
  268. openwisp_controller-1.1.2/openwisp_controller/config/migrations/0007_simplify_config.py +0 -13
  269. openwisp_controller-1.1.2/openwisp_controller/config/migrations/0020_remove_config_organization.py +0 -11
  270. openwisp_controller-1.1.2/openwisp_controller/config/migrations/0027_add_indexes_on_ip_fields.py +0 -39
  271. openwisp_controller-1.1.2/openwisp_controller/config/migrations/0028_template_default_values.py +0 -29
  272. openwisp_controller-1.1.2/openwisp_controller/config/migrations/0034_template_required.py +0 -24
  273. openwisp_controller-1.1.2/openwisp_controller/config/migrations/0043_devicegroup_templates.py +0 -32
  274. openwisp_controller-1.1.2/openwisp_controller/config/settings.py +0 -69
  275. openwisp_controller-1.1.2/openwisp_controller/config/static/config/css/device-delete-confirmation.css +0 -11
  276. openwisp_controller-1.1.2/openwisp_controller/config/static/config/css/lib/jsonschema-ui.css +0 -321
  277. openwisp_controller-1.1.2/openwisp_controller/config/static/config/js/preview.js +0 -99
  278. openwisp_controller-1.1.2/openwisp_controller/config/static/config/js/relevant_templates.js +0 -181
  279. openwisp_controller-1.1.2/openwisp_controller/config/static/config/js/switcher.js +0 -33
  280. openwisp_controller-1.1.2/openwisp_controller/config/static/config/js/tabs.js +0 -80
  281. openwisp_controller-1.1.2/openwisp_controller/config/static/config/js/unsaved_changes.js +0 -106
  282. openwisp_controller-1.1.2/openwisp_controller/config/static/config/js/utils.js +0 -111
  283. openwisp_controller-1.1.2/openwisp_controller/config/static/config/js/vpn.js +0 -68
  284. openwisp_controller-1.1.2/openwisp_controller/config/static/config/js/widget.js +0 -989
  285. openwisp_controller-1.1.2/openwisp_controller/config/static/sortedm2m/patch_sortedm2m.js +0 -16
  286. openwisp_controller-1.1.2/openwisp_controller/config/tests/test_api.py +0 -1590
  287. openwisp_controller-1.1.2/openwisp_controller/config/tests/test_apps.py +0 -85
  288. openwisp_controller-1.1.2/openwisp_controller/config/tests/test_selenium.py +0 -405
  289. openwisp_controller-1.1.2/openwisp_controller/config/tests/test_template.py +0 -750
  290. openwisp_controller-1.1.2/openwisp_controller/config/tests/utils.py +0 -411
  291. openwisp_controller-1.1.2/openwisp_controller/config/urls.py +0 -6
  292. openwisp_controller-1.1.2/openwisp_controller/config/validators.py +0 -27
  293. openwisp_controller-1.1.2/openwisp_controller/config/widgets.py +0 -68
  294. openwisp_controller-1.1.2/openwisp_controller/connection/api/serializer.py +0 -110
  295. openwisp_controller-1.1.2/openwisp_controller/connection/commands.py +0 -157
  296. openwisp_controller-1.1.2/openwisp_controller/connection/connectors/snmp.py +0 -34
  297. openwisp_controller-1.1.2/openwisp_controller/connection/migrations/0002_credentials_auto_add.py +0 -23
  298. openwisp_controller-1.1.2/openwisp_controller/connection/settings.py +0 -49
  299. openwisp_controller-1.1.2/openwisp_controller/connection/static/connection/js/commands.js +0 -596
  300. openwisp_controller-1.1.2/openwisp_controller/connection/static/connection/js/credentials.js +0 -21
  301. openwisp_controller-1.1.2/openwisp_controller/connection/tests/test_api.py +0 -669
  302. openwisp_controller-1.1.2/openwisp_controller/connection/tests/test_command_utilities.py +0 -61
  303. openwisp_controller-1.1.2/openwisp_controller/connection/widgets.py +0 -48
  304. openwisp_controller-1.1.2/openwisp_controller/geo/static/leaflet/draw/leaflet.draw.i18n.js +0 -116
  305. openwisp_controller-1.1.2/openwisp_controller/geo/tests/test_admin.py +0 -284
  306. openwisp_controller-1.1.2/openwisp_controller/geo/tests/test_apps.py +0 -19
  307. openwisp_controller-1.1.2/openwisp_controller/geo/tests/utils.py +0 -65
  308. openwisp_controller-1.1.2/openwisp_controller/geo/utils.py +0 -44
  309. openwisp_controller-1.1.2/openwisp_controller/pki/api/serializers.py +0 -193
  310. openwisp_controller-1.1.2/openwisp_controller/pki/api/urls.py +0 -42
  311. openwisp_controller-1.1.2/openwisp_controller/pki/apps.py +0 -46
  312. openwisp_controller-1.1.2/openwisp_controller/pki/migrations/0005_organizational_unit_name.py +0 -24
  313. openwisp_controller-1.1.2/openwisp_controller/pki/migrations/0011_disallowed_blank_key_length_or_digest.py +0 -79
  314. openwisp_controller-1.1.2/openwisp_controller/pki/static/admin/pki/js/show-org-field.js +0 -9
  315. openwisp_controller-1.1.2/openwisp_controller/pki/tests/test_api.py +0 -366
  316. openwisp_controller-1.1.2/openwisp_controller/settings.py +0 -3
  317. openwisp_controller-1.1.2/openwisp_controller/subnet_division/settings.py +0 -28
  318. openwisp_controller-1.1.2/openwisp_controller/subnet_division/static/subnet-division/js/subnet-division.js +0 -51
  319. openwisp_controller-1.1.2/openwisp_controller/tests/mixins.py +0 -31
  320. openwisp_controller-1.1.2/openwisp_controller/tests/utils.py +0 -51
  321. openwisp_controller-1.1.2/openwisp_controller/urls.py +0 -84
  322. openwisp_controller-1.1.2/openwisp_controller/vpn_backends.py +0 -106
  323. openwisp_controller-1.1.2/openwisp_controller.egg-info/requires.txt +0 -18
  324. openwisp_controller-1.1.2/requirements.txt +0 -18
  325. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/LICENSE +0 -0
  326. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/MANIFEST.in +0 -0
  327. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/admin.py +0 -0
  328. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/__init__.py +0 -0
  329. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/api/__init__.py +0 -0
  330. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/base/__init__.py +0 -0
  331. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/controller/__init__.py +0 -0
  332. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0050_alter_vpnclient_unique_together.py +0 -0
  333. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/signals.py +0 -0
  334. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/sortedm2m/__init__.py +0 -0
  335. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/static/config/css/devicegroup.css +0 -0
  336. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/static/config/css/lib/img/jsoneditor-icons.svg +0 -0
  337. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/static/config/js/lib/advanced-mode.js +0 -0
  338. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/static/config/js/lib/jsonschema-ui.js +0 -0
  339. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/static/config/js/lib/tomorrow_night_bright.js +0 -0
  340. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/static/config/js/management_ip.js +0 -0
  341. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/static/import_export/import-openwisp.css +0 -0
  342. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/static/support.css +0 -0
  343. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/change_device_group.html +0 -0
  344. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/change_form.html +0 -0
  345. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/change_list_device.html +0 -0
  346. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/clone_template_form.html +0 -0
  347. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/device/change_form.html +0 -0
  348. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/device_recover_form.html +0 -0
  349. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/jsonschema-widget.html +0 -0
  350. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/preview.html +0 -0
  351. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/system_context.html +0 -0
  352. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/import_export/import.html +0 -0
  353. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/reversion/config/revision_form.html +0 -0
  354. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tests/__init__.py +0 -0
  355. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/__init__.py +0 -0
  356. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/base/__init__.py +0 -0
  357. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/connectors/__init__.py +0 -0
  358. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/connectors/airos/snmp.py +0 -0
  359. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/connectors/openwrt/__init__.py +0 -0
  360. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/connectors/openwrt/snmp.py +0 -0
  361. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/exceptions.py +0 -0
  362. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/schema.py +0 -0
  363. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/signals.py +0 -0
  364. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/static/connection/css/credentials.css +0 -0
  365. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/static/connection/js/lib/reconnecting-websocket.min.js +0 -0
  366. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tests/__init__.py +0 -0
  367. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tests/base.py +0 -0
  368. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tests/test-key.ed25519 +0 -0
  369. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tests/test-key.rsa +0 -0
  370. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/__init__.py +0 -0
  371. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/api/__init__.py +0 -0
  372. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/base/__init__.py +0 -0
  373. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/channels/__init__.py +0 -0
  374. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/templates/admin/widgets/foreign_key_raw_id.html +0 -0
  375. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/tests/__init__.py +0 -0
  376. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/migrations.py +0 -0
  377. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/__init__.py +0 -0
  378. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/base/__init__.py +0 -0
  379. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/templates/admin/pki/change_form.html +0 -0
  380. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/tests/__init__.py +0 -0
  381. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/routing.py +0 -0
  382. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/__init__.py +0 -0
  383. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/rule_types/__init__.py +0 -0
  384. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/signals.py +0 -0
  385. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/static/subnet-division/css/subnet-division.css +0 -0
  386. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/tests/__init__.py +0 -0
  387. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/tests/test_users_integration.py +0 -0
  388. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller.egg-info/dependency_links.txt +0 -0
  389. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller.egg-info/not-zip-safe +0 -0
  390. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller.egg-info/top_level.txt +0 -0
  391. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/pyproject.toml +0 -0
  392. {openwisp_controller-1.1.2 → openwisp_controller-1.2}/setup.cfg +0 -0
@@ -1,6 +1,85 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ Version 1.2.0 [2025-10-24]
5
+ --------------------------
6
+
7
+ Changes
8
+ ~~~~~~~
9
+
10
+ Other changes
11
+ +++++++++++++
12
+
13
+ - Stored configuration checksum in the database to fix the perennial
14
+ *modified* status issue. The configuration status now changes to
15
+ *modified* only when the checksum actually changes `#1113
16
+ <https://github.com/openwisp/openwisp-controller/issues/1113>`_.
17
+ - Templates marked as default or required are now automatically assigned
18
+ to all eligible devices in a background task. `#480
19
+ <https://github.com/openwisp/openwisp-controller/issues/480>`_.
20
+ - Changed ZeroTier background notifications to use the *Generic Message*
21
+ notification type `#1048
22
+ <https://github.com/openwisp/openwisp-controller/issues/1048>`_.
23
+ - Improved management of relevant templates: facilitated changing
24
+ organizations and optimized performance `#204
25
+ <https://github.com/openwisp/openwisp-controller/issues/204>`_ `#1050
26
+ <https://github.com/openwisp/openwisp-controller/issues/1050>`_.
27
+ - Added relation from ``VpnClient`` objects to their associated
28
+ ``Template``. ``VpnClient`` objects are now automatically deleted when
29
+ their template is deleted `#831
30
+ <https://github.com/openwisp/openwisp-controller/issues/831>`_.
31
+ - Improved consistency across the REST API by renaming ``serializer``
32
+ modules to ``serializers``, centralizing base serializer logic, fixing
33
+ configuration creation when organization templates differ, and
34
+ standardizing primary key parameter types and URL converters.
35
+
36
+ Dependencies
37
+ ~~~~~~~~~~~~
38
+
39
+ - Bumped ``netjsonconfig~=1.2.0``.
40
+ - Bumped ``openwisp-notifications~=1.2.0``.
41
+ - Bumped ``openwisp-ipam~=1.2.0``.
42
+ - Bumped ``openwisp-users~=1.2.0``.
43
+ - Bumped ``openwisp-utils[celery,channels]~=1.2.0``.
44
+ - Bumped ``django-x509~=1.3.0``.
45
+ - Bumped ``django-loci~=1.2.0``.
46
+ - Bumped ``django-flat-json-widget~=0.4.0``.
47
+ - Bumped ``djangorestframework-gis~=1.2.0``.
48
+ - Bumped ``paramiko~=4.0.0``.
49
+ - Bumped ``django-cache-memoize~=0.2.1``.
50
+ - Bumped ``django-import-export~=4.3.10``.
51
+ - Bumped ``django-reversion~=6.0.0``.
52
+ - Bumped ``django-taggit~=6.1.0``.
53
+ - Added support for Django ``5.x``.
54
+ - Added support for Python ``3.11``, ``3.12``, and ``3.13``.
55
+ - Dropped support for Django ``3.2`` and ``4.1``.
56
+ - Dropped support for Python ``3.8``.
57
+
58
+ Bugfixes
59
+ ~~~~~~~~
60
+
61
+ - Fixed issue where the ``update_config`` background task could launch
62
+ multiple times concurrently `#1128
63
+ <https://github.com/openwisp/openwisp-controller/issues/1128>`_.
64
+ - Enforced SSH command timeout in Paramiko. Previously, Paramiko ignored
65
+ the configured command timeout.
66
+ - Fixed incorrect label for device group filter in the device list `#1071
67
+ <https://github.com/openwisp/openwisp-controller/issues/1071>`_.
68
+ - Added ``default`` kwarg support for unique nullable fields.
69
+ - Fixed REST API access for non-superusers in ``DeviceConnection`` and
70
+ ``Command`` endpoints. Previously, organization admins encountered a 500
71
+ server error when retrieving command details.
72
+ - Avoided re-populating the VPN peers cache in ``post_save``. Previously,
73
+ ``VpnClient.post_save`` repopulated the peer cache immediately, causing
74
+ slow or timed-out uWSGI requests for large peer sets. Now, it only
75
+ invalidates the cache, which is later repopulated by the background
76
+ task.
77
+ - Fixed ordering of credentials in the REST API list view `#1040
78
+ <https://github.com/openwisp/openwisp-controller/issues/1040>`_.
79
+ - Fixed handling of non-existent devices in ``DeviceLocationView`` API.
80
+ - Fixed unsaved changes alert showing for read-only maps `#560
81
+ <https://github.com/openwisp/openwisp-controller/issues/560>`_.
82
+
4
83
  Version 1.1.2 [2025-08-01]
5
84
  --------------------------
6
85
 
@@ -44,7 +123,7 @@ Bugfixes
44
123
 
45
124
  - Fixed `recovering deleted device with related location
46
125
  <https://github.com/openwisp/openwisp-controller/issues/936>`__.
47
- - Fixed `deleting device with "deactivating" config status
126
+ - Fixed `deleting device with “deactivating” config status
48
127
  <https://github.com/openwisp/openwisp-controller/issues/949>`__.
49
128
  - Fixed `conversion of MAC address to uppercase format
50
129
  <https://github.com/openwisp/openwisp-controller/issues/922>`__ with the
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openwisp-controller
3
- Version: 1.1.2
3
+ Version: 1.2
4
4
  Summary: OpenWISP Controller
5
5
  Home-page: http://openwisp.org
6
6
  Download-URL: https://github.com/openwisp/openwisp-controller/releases
@@ -20,23 +20,23 @@ Classifier: Framework :: Django
20
20
  Classifier: Programming Language :: Python :: 3
21
21
  License-File: LICENSE
22
22
  Requires-Dist: django-sortedm2m~=4.0.0
23
- Requires-Dist: django-reversion~=5.1.0
24
- Requires-Dist: django-taggit~=4.0.0
25
- Requires-Dist: netjsonconfig~=1.1.0
26
- Requires-Dist: django-x509~=1.2.0
27
- Requires-Dist: django-loci~=1.1.0
28
- Requires-Dist: django-flat-json-widget~=0.3.0
29
- Requires-Dist: openwisp-users~=1.1.0
30
- Requires-Dist: openwisp-utils[celery]~=1.1.1
31
- Requires-Dist: openwisp-notifications~=1.1.0
32
- Requires-Dist: openwisp-ipam~=1.1.0
33
- Requires-Dist: djangorestframework-gis~=1.1
34
- Requires-Dist: paramiko[ed25519]~=3.5.0
23
+ Requires-Dist: django-reversion~=6.0.0
24
+ Requires-Dist: django-taggit~=6.1.0
25
+ Requires-Dist: netjsonconfig~=1.2.0
26
+ Requires-Dist: django-x509~=1.3.0
27
+ Requires-Dist: django-loci~=1.2.0
28
+ Requires-Dist: django-flat-json-widget~=0.4.0
29
+ Requires-Dist: openwisp-users~=1.2.0
30
+ Requires-Dist: openwisp-utils[celery,channels]~=1.2.0
31
+ Requires-Dist: openwisp-notifications~=1.2.0
32
+ Requires-Dist: openwisp-ipam~=1.2.0
33
+ Requires-Dist: djangorestframework-gis~=1.2.0
34
+ Requires-Dist: paramiko~=4.0.0
35
35
  Requires-Dist: scp~=0.15.0
36
- Requires-Dist: django-cache-memoize~=0.2.0
36
+ Requires-Dist: django-cache-memoize~=0.2.1
37
37
  Requires-Dist: shortuuid~=1.0.13
38
38
  Requires-Dist: netaddr~=1.3.0
39
- Requires-Dist: django-import-export~=3.3.0
39
+ Requires-Dist: django-import-export~=4.3.10
40
40
  Dynamic: author
41
41
  Dynamic: author-email
42
42
  Dynamic: classifier
@@ -53,8 +53,8 @@ Dynamic: summary
53
53
  openwisp-controller
54
54
  ===================
55
55
 
56
- .. image:: https://github.com/openwisp/openwisp-controller/workflows/OpenWISP%20Controller%20CI%20Build/badge.svg?branch=master
57
- :target: https://github.com/openwisp/openwisp-controller/actions?query=workflow%3A%22OpenWISP+Controller+CI+Build%22
56
+ .. image:: https://github.com/openwisp/openwisp-controller/actions/workflows/ci.yml/badge.svg
57
+ :target: https://github.com/openwisp/openwisp-controller/actions/workflows/ci.yml
58
58
  :alt: CI build status
59
59
 
60
60
  .. image:: https://coveralls.io/repos/openwisp/openwisp-controller/badge.svg
@@ -1,8 +1,8 @@
1
1
  openwisp-controller
2
2
  ===================
3
3
 
4
- .. image:: https://github.com/openwisp/openwisp-controller/workflows/OpenWISP%20Controller%20CI%20Build/badge.svg?branch=master
5
- :target: https://github.com/openwisp/openwisp-controller/actions?query=workflow%3A%22OpenWISP+Controller+CI+Build%22
4
+ .. image:: https://github.com/openwisp/openwisp-controller/actions/workflows/ci.yml/badge.svg
5
+ :target: https://github.com/openwisp/openwisp-controller/actions/workflows/ci.yml
6
6
  :alt: CI build status
7
7
 
8
8
  .. image:: https://coveralls.io/repos/openwisp/openwisp-controller/badge.svg
@@ -0,0 +1,20 @@
1
+ VERSION = (1, 2, 0, "final")
2
+ __version__ = VERSION # alias
3
+
4
+
5
+ def get_version():
6
+ version = f"{VERSION[0]}.{VERSION[1]}"
7
+ if VERSION[2]:
8
+ version = f"{version}.{VERSION[2]}"
9
+ if VERSION[3:] == ("alpha", 0):
10
+ version = f"{version} pre-alpha"
11
+ if "post" in VERSION[3]:
12
+ version = f"{version}.{VERSION[3]}"
13
+ else:
14
+ if VERSION[3] != "final":
15
+ try:
16
+ rev = VERSION[4]
17
+ except IndexError:
18
+ rev = 0
19
+ version = f"{version}{VERSION[3][0:1]}{rev}"
20
+ return version
@@ -27,17 +27,17 @@ class ShareableOrgMixinUniqueName(ShareableOrgMixin):
27
27
  if not self._state.adding:
28
28
  qs = qs.exclude(id=self.id)
29
29
  shared_message = _(
30
- 'Shared objects are visible to all organizations and '
31
- 'must have unique names to avoid confusion.'
30
+ "Shared objects are visible to all organizations and "
31
+ "must have unique names to avoid confusion."
32
32
  )
33
33
 
34
34
  if qs.filter(organization=None).exists():
35
- msg = _(f'There is already another shared {model_name} with this name.')
36
- raise ValidationError({'name': f'{msg} {shared_message}'})
35
+ msg = _(f"There is already another shared {model_name} with this name.")
36
+ raise ValidationError({"name": f"{msg} {shared_message}"})
37
37
 
38
38
  if not self.organization and qs.filter(organization__isnull=False).exists():
39
39
  msg = _(
40
- f'There is already a {model_name} of '
41
- 'another organization with this name.'
40
+ f"There is already a {model_name} of "
41
+ "another organization with this name."
42
42
  )
43
- raise ValidationError({'name': f'{msg} {shared_message}'})
43
+ raise ValidationError({"name": f"{msg} {shared_message}"})
@@ -10,20 +10,20 @@ def check_cors_configuration(app_configs, **kwargs):
10
10
  return errors
11
11
 
12
12
  if not (
13
- 'corsheaders' in settings.INSTALLED_APPS
14
- and 'corsheaders.middleware.CorsMiddleware' in settings.MIDDLEWARE
13
+ "corsheaders" in settings.INSTALLED_APPS
14
+ and "corsheaders.middleware.CorsMiddleware" in settings.MIDDLEWARE
15
15
  ):
16
16
  errors.append(
17
17
  checks.Warning(
18
- msg='Improperly Configured',
18
+ msg="Improperly Configured",
19
19
  hint=(
20
20
  '"django-cors-headers" is either not installed or improperly '
21
- 'configured. CORS configuration is required for using '
21
+ "configured. CORS configuration is required for using "
22
22
  '"OPENWISP_CONTROLLER_API_HOST" settings. '
23
- ' Configure equivalent CORS rules on your server '
23
+ " Configure equivalent CORS rules on your server "
24
24
  'if you are not using "django-cors-headers".'
25
25
  ),
26
- obj='Settings',
26
+ obj="Settings",
27
27
  )
28
28
  )
29
29
  return errors
@@ -31,21 +31,21 @@ def check_cors_configuration(app_configs, **kwargs):
31
31
 
32
32
  def check_openwisp_controller_ctx_processor(app_config, **kwargs):
33
33
  errors = []
34
- ctx_processor = 'openwisp_controller.context_processors.controller_api_settings'
34
+ ctx_processor = "openwisp_controller.context_processors.controller_api_settings"
35
35
 
36
36
  if not app_settings.OPENWISP_CONTROLLER_API_HOST:
37
37
  return errors
38
38
 
39
- if not (ctx_processor in settings.TEMPLATES[0]['OPTIONS']['context_processors']):
39
+ if not (ctx_processor in settings.TEMPLATES[0]["OPTIONS"]["context_processors"]):
40
40
  errors.append(
41
41
  checks.Warning(
42
- msg='Improperly Configured',
42
+ msg="Improperly Configured",
43
43
  hint=(
44
44
  f'"{ctx_processor} is absent from context processors.'
45
45
  'It is required to be added in TEMPLATES["context_processor"] '
46
46
  'for "OPENWISP_CONTROLLER_API_HOST" to work properly.'
47
47
  ),
48
- obj='Settings',
48
+ obj="Settings",
49
49
  )
50
50
  )
51
51
  return errors