openwisp-controller 1.1.1__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 (395) hide show
  1. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/CHANGES.rst +114 -0
  2. {openwisp_controller-1.1.1/openwisp_controller.egg-info → openwisp_controller-1.2}/PKG-INFO +23 -22
  3. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/README.rst +6 -6
  4. openwisp_controller-1.2/openwisp_controller/__init__.py +20 -0
  5. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/base.py +7 -7
  6. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/checks.py +10 -10
  7. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/admin.py +387 -370
  8. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/api/download_views.py +6 -6
  9. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/api/filters.py +41 -41
  10. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/api/serializers.py +155 -128
  11. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/api/urls.py +30 -30
  12. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/api/views.py +65 -53
  13. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/api/zerotier_service.py +35 -35
  14. openwisp_controller-1.2/openwisp_controller/config/apps.py +465 -0
  15. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/base/base.py +98 -20
  16. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/base/channels_consumer.py +13 -13
  17. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/base/config.py +369 -164
  18. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/base/device.py +51 -51
  19. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/base/device_group.py +27 -27
  20. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/base/multitenancy.py +20 -20
  21. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/base/tag.py +6 -6
  22. openwisp_controller-1.2/openwisp_controller/config/base/template.py +301 -0
  23. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/base/vpn.py +230 -229
  24. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/controller/urls.py +1 -1
  25. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/controller/views.py +115 -92
  26. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/crypto.py +2 -2
  27. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/exceptions.py +5 -5
  28. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/exportable.py +54 -54
  29. {openwisp_controller-1.1.1 → 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.1 → openwisp_controller-1.2}/openwisp_controller/config/handlers.py +28 -28
  32. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0001_squashed_0002_config_settings_uuid.py +159 -159
  33. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0003_template_tags.py +35 -35
  34. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0004_add_device_model.py +34 -34
  35. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0005_populate_device.py +4 -4
  36. {openwisp_controller-1.1.1 → 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.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0008_update_indexes.py +20 -20
  39. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0009_device_system.py +5 -5
  40. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0010_auto_20180106_1814.py +7 -7
  41. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0011_update_device_mac_address.py +7 -7
  42. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0012_auto_20180219_1501.py +7 -7
  43. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0013_last_ip_management_ip_and_status_applied.py +36 -36
  44. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0014_device_hardware_id.py +3 -3
  45. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0015_default_groups_permissions.py +1 -1
  46. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0016_default_organization_config_settings.py +3 -3
  47. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0017_template_name_organization_unique_together.py +2 -2
  48. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0018_config_context.py +6 -6
  49. {openwisp_controller-1.1.1 → 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.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0021_vpn_key.py +6 -6
  52. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0022_vpn_format_dh.py +2 -2
  53. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0023_update_context.py +6 -6
  54. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0024_update_context_data.py +3 -3
  55. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0025_update_device_key.py +7 -7
  56. {openwisp_controller-1.1.1 → 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.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0029_merge_django_netjsonconfig.py +13 -13
  60. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0030_django_taggit_update.py +16 -16
  61. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0031_update_vpn_dh_param.py +1 -1
  62. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0032_update_legacy_vpn_backend.py +4 -4
  63. {openwisp_controller-1.1.1 → 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.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0035_device_name_unique_optional.py +4 -4
  66. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0036_device_group.py +30 -30
  67. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0037_alter_taggedtemplate.py +11 -11
  68. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0038_vpn_subnet.py +5 -5
  69. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0039_wireguard_vxlan_ipam.py +44 -44
  70. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0040_vpnclient_ip_setnull.py +7 -7
  71. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0041_default_groups_organizationconfigsettings_permission.py +1 -1
  72. {openwisp_controller-1.1.1 → 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.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0044_config_error_reason.py +5 -5
  75. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0045_alter_vpn_webhook_endpoint.py +6 -6
  76. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0046_organizationlimits.py +13 -13
  77. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0047_add_organizationlimits.py +1 -1
  78. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0048_wifi_radio_band_migration.py +54 -54
  79. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0049_devicegroup_context.py +7 -7
  80. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0051_organizationconfigsettings_context.py +7 -7
  81. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0052_vpn_node_network_id.py +5 -5
  82. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0053_vpnclient_secret.py +3 -3
  83. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0054_device__is_deactivated.py +3 -3
  84. {openwisp_controller-1.1.1 → 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.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/__init__.py +30 -30
  92. {openwisp_controller-1.1.1 → 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.1 → openwisp_controller-1.2}/openwisp_controller/config/sortedm2m/fields.py +3 -3
  95. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/sortedm2m/forms.py +4 -4
  96. {openwisp_controller-1.1.1 → 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.1 → 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.1 → 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.1 → openwisp_controller-1.2}/openwisp_controller/config/tasks.py +88 -37
  111. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/tasks_zerotier.py +85 -59
  112. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/device/delete_confirmation.html +4 -5
  113. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/device/delete_selected_confirmation.html +4 -5
  114. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/device_group/change_form.html +1 -1
  115. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/tests/pytest.py +15 -15
  116. openwisp_controller-1.2/openwisp_controller/config/tests/test_admin.py +3040 -0
  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.1 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_config.py +351 -248
  120. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_controller.py +542 -462
  121. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_device.py +154 -154
  122. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_device_group.py +14 -14
  123. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_handlers.py +8 -8
  124. {openwisp_controller-1.1.1 → 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.1 → 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.1 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_views.py +92 -89
  129. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_vpn.py +551 -503
  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.1 → openwisp_controller-1.2}/openwisp_controller/config/utils.py +40 -39
  133. openwisp_controller-1.2/openwisp_controller/config/validators.py +27 -0
  134. {openwisp_controller-1.1.1 → 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.1 → openwisp_controller-1.2}/openwisp_controller/connection/admin.py +53 -49
  137. openwisp_controller-1.2/openwisp_controller/connection/api/serializers.py +117 -0
  138. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/api/urls.py +13 -13
  139. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/api/views.py +54 -46
  140. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/apps.py +55 -55
  141. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/base/models.py +126 -91
  142. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/channels/consumers.py +5 -3
  143. {openwisp_controller-1.1.1 → 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.1 → openwisp_controller-1.2}/openwisp_controller/connection/connectors/exceptions.py +8 -0
  146. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/connectors/openwrt/ssh.py +15 -12
  147. openwisp_controller-1.2/openwisp_controller/connection/connectors/snmp.py +34 -0
  148. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/connectors/ssh.py +61 -49
  149. {openwisp_controller-1.1.1 → 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.1 → openwisp_controller-1.2}/openwisp_controller/connection/migrations/0003_default_group_permissions.py +1 -1
  152. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/migrations/0004_django3_1_upgrade.py +3 -3
  153. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/migrations/0005_device_connection_failure_reason.py +5 -5
  154. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/migrations/0006_name_unique_per_organization.py +4 -4
  155. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/migrations/0007_command.py +34 -29
  156. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/migrations/0008_remove_conflicting_deviceconnections.py +6 -6
  157. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/migrations/0009_alter_deviceconnection_unique_together.py +3 -3
  158. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/migrations/__init__.py +15 -15
  159. {openwisp_controller-1.1.1 → 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.1 → 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.1 → openwisp_controller-1.2}/openwisp_controller/connection/tasks.py +19 -14
  165. openwisp_controller-1.2/openwisp_controller/connection/tests/pytest.py +107 -0
  166. {openwisp_controller-1.1.1 → 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.1 → openwisp_controller-1.2}/openwisp_controller/connection/tests/test_models.py +311 -296
  170. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/tests/test_notifications.py +38 -38
  171. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/tests/test_selenium.py +27 -27
  172. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/tests/test_snmp.py +11 -11
  173. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/tests/test_ssh.py +39 -28
  174. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/tests/test_tasks.py +18 -18
  175. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/tests/utils.py +41 -41
  176. {openwisp_controller-1.1.1 → 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.1 → openwisp_controller-1.2}/openwisp_controller/context_processors.py +1 -1
  179. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/geo/admin.py +18 -18
  180. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/geo/api/filters.py +3 -3
  181. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/geo/api/serializers.py +99 -102
  182. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/geo/api/urls.py +1 -1
  183. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/geo/api/views.py +28 -29
  184. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/geo/apps.py +35 -35
  185. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/geo/base/models.py +8 -8
  186. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/geo/channels/consumers.py +1 -1
  187. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/geo/channels/routing.py +2 -2
  188. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/geo/exportable.py +22 -22
  189. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/geo/migrations/0001_initial.py +67 -67
  190. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/geo/migrations/0002_default_groups_permissions.py +1 -1
  191. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/geo/migrations/0003_alter_devicelocation_floorplan_location.py +5 -5
  192. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/geo/migrations/__init__.py +6 -6
  193. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/geo/models.py +3 -3
  194. {openwisp_controller-1.1.1 → 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.1 → openwisp_controller-1.2}/openwisp_controller/geo/tests/test_admin_inline.py +21 -20
  197. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/geo/tests/test_api.py +403 -373
  198. openwisp_controller-1.2/openwisp_controller/geo/tests/test_apps.py +19 -0
  199. {openwisp_controller-1.1.1 → 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.1 → openwisp_controller-1.2}/openwisp_controller/mixins.py +5 -7
  204. {openwisp_controller-1.1.1 → 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.1 → 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.1 → openwisp_controller-1.2}/openwisp_controller/pki/base/models.py +7 -7
  210. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/0001_initial.py +118 -118
  211. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/0002_add_organization_name.py +7 -7
  212. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/0003_fill_organization_name.py +5 -5
  213. {openwisp_controller-1.1.1 → 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.1 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/0006_add_x509_passphrase_field.py +7 -7
  216. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/0007_default_groups_permissions.py +1 -1
  217. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/0008_serial_number_length.py +9 -9
  218. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/0009_common_name_maxlength_64.py +7 -7
  219. {openwisp_controller-1.1.1 → 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.1 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/__init__.py +7 -7
  222. {openwisp_controller-1.1.1 → 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.1 → 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.1 → openwisp_controller-1.2}/openwisp_controller/pki/tests/test_models.py +14 -13
  227. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/pki/tests/utils.py +6 -6
  228. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/pki/urls.py +1 -1
  229. {openwisp_controller-1.1.1 → 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.1 → openwisp_controller-1.2}/openwisp_controller/subnet_division/admin.py +21 -21
  233. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/subnet_division/apps.py +9 -9
  234. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/subnet_division/base/models.py +41 -41
  235. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/subnet_division/filters.py +19 -19
  236. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/subnet_division/migrations/0001_initial.py +46 -46
  237. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/subnet_division/migrations/0002_default_group_migration.py +1 -1
  238. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/subnet_division/migrations/0003_related_field_allow_blank.py +7 -7
  239. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/subnet_division/migrations/0004_index_rule_on_delete.py +3 -3
  240. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/subnet_division/migrations/0005_number_of_subnets_and_ips.py +13 -13
  241. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/subnet_division/migrations/__init__.py +8 -8
  242. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/subnet_division/models.py +2 -2
  243. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/subnet_division/rule_types/base.py +27 -27
  244. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/subnet_division/rule_types/device.py +13 -13
  245. {openwisp_controller-1.1.1 → 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.1 → openwisp_controller-1.2}/openwisp_controller/subnet_division/tasks.py +21 -21
  249. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/subnet_division/tests/helpers.py +21 -21
  250. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/subnet_division/tests/test_admin.py +60 -60
  251. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/subnet_division/tests/test_models.py +177 -177
  252. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/subnet_division/tests/test_rule.py +13 -13
  253. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/subnet_division/utils.py +9 -9
  254. {openwisp_controller-1.1.1 → 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.1 → openwisp_controller-1.2}/openwisp_controller/tests/test_selenium.py +22 -19
  257. {openwisp_controller-1.1.1 → 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.1 → openwisp_controller-1.2/openwisp_controller.egg-info}/PKG-INFO +23 -22
  262. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller.egg-info/SOURCES.txt +9 -1
  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.1 → openwisp_controller-1.2}/setup.py +15 -15
  266. openwisp_controller-1.1.1/openwisp_controller/__init__.py +0 -20
  267. openwisp_controller-1.1.1/openwisp_controller/config/apps.py +0 -487
  268. openwisp_controller-1.1.1/openwisp_controller/config/base/template.py +0 -240
  269. openwisp_controller-1.1.1/openwisp_controller/config/fixtures/test_templates.json +0 -50
  270. openwisp_controller-1.1.1/openwisp_controller/config/migrations/0007_simplify_config.py +0 -13
  271. openwisp_controller-1.1.1/openwisp_controller/config/migrations/0020_remove_config_organization.py +0 -11
  272. openwisp_controller-1.1.1/openwisp_controller/config/migrations/0027_add_indexes_on_ip_fields.py +0 -39
  273. openwisp_controller-1.1.1/openwisp_controller/config/migrations/0028_template_default_values.py +0 -29
  274. openwisp_controller-1.1.1/openwisp_controller/config/migrations/0034_template_required.py +0 -24
  275. openwisp_controller-1.1.1/openwisp_controller/config/migrations/0043_devicegroup_templates.py +0 -32
  276. openwisp_controller-1.1.1/openwisp_controller/config/settings.py +0 -69
  277. openwisp_controller-1.1.1/openwisp_controller/config/static/config/css/device-delete-confirmation.css +0 -11
  278. openwisp_controller-1.1.1/openwisp_controller/config/static/config/css/lib/jsonschema-ui.css +0 -321
  279. openwisp_controller-1.1.1/openwisp_controller/config/static/config/js/preview.js +0 -99
  280. openwisp_controller-1.1.1/openwisp_controller/config/static/config/js/relevant_templates.js +0 -181
  281. openwisp_controller-1.1.1/openwisp_controller/config/static/config/js/switcher.js +0 -33
  282. openwisp_controller-1.1.1/openwisp_controller/config/static/config/js/tabs.js +0 -80
  283. openwisp_controller-1.1.1/openwisp_controller/config/static/config/js/unsaved_changes.js +0 -106
  284. openwisp_controller-1.1.1/openwisp_controller/config/static/config/js/utils.js +0 -111
  285. openwisp_controller-1.1.1/openwisp_controller/config/static/config/js/vpn.js +0 -68
  286. openwisp_controller-1.1.1/openwisp_controller/config/static/config/js/widget.js +0 -989
  287. openwisp_controller-1.1.1/openwisp_controller/config/static/sortedm2m/patch_sortedm2m.js +0 -16
  288. openwisp_controller-1.1.1/openwisp_controller/config/tests/test_admin.py +0 -2631
  289. openwisp_controller-1.1.1/openwisp_controller/config/tests/test_api.py +0 -1520
  290. openwisp_controller-1.1.1/openwisp_controller/config/tests/test_apps.py +0 -85
  291. openwisp_controller-1.1.1/openwisp_controller/config/tests/test_selenium.py +0 -405
  292. openwisp_controller-1.1.1/openwisp_controller/config/tests/test_template.py +0 -750
  293. openwisp_controller-1.1.1/openwisp_controller/config/tests/utils.py +0 -411
  294. openwisp_controller-1.1.1/openwisp_controller/config/urls.py +0 -6
  295. openwisp_controller-1.1.1/openwisp_controller/config/validators.py +0 -27
  296. openwisp_controller-1.1.1/openwisp_controller/config/widgets.py +0 -68
  297. openwisp_controller-1.1.1/openwisp_controller/connection/api/serializer.py +0 -97
  298. openwisp_controller-1.1.1/openwisp_controller/connection/commands.py +0 -157
  299. openwisp_controller-1.1.1/openwisp_controller/connection/connectors/snmp.py +0 -34
  300. openwisp_controller-1.1.1/openwisp_controller/connection/migrations/0002_credentials_auto_add.py +0 -23
  301. openwisp_controller-1.1.1/openwisp_controller/connection/settings.py +0 -49
  302. openwisp_controller-1.1.1/openwisp_controller/connection/static/connection/js/commands.js +0 -596
  303. openwisp_controller-1.1.1/openwisp_controller/connection/static/connection/js/credentials.js +0 -21
  304. openwisp_controller-1.1.1/openwisp_controller/connection/tests/pytest.py +0 -74
  305. openwisp_controller-1.1.1/openwisp_controller/connection/tests/test_api.py +0 -633
  306. openwisp_controller-1.1.1/openwisp_controller/connection/tests/test_command_utilities.py +0 -61
  307. openwisp_controller-1.1.1/openwisp_controller/connection/widgets.py +0 -48
  308. openwisp_controller-1.1.1/openwisp_controller/geo/tests/test_admin.py +0 -284
  309. openwisp_controller-1.1.1/openwisp_controller/geo/tests/test_apps.py +0 -19
  310. openwisp_controller-1.1.1/openwisp_controller/geo/tests/utils.py +0 -58
  311. openwisp_controller-1.1.1/openwisp_controller/geo/utils.py +0 -44
  312. openwisp_controller-1.1.1/openwisp_controller/pki/api/serializers.py +0 -193
  313. openwisp_controller-1.1.1/openwisp_controller/pki/api/urls.py +0 -42
  314. openwisp_controller-1.1.1/openwisp_controller/pki/apps.py +0 -46
  315. openwisp_controller-1.1.1/openwisp_controller/pki/migrations/0005_organizational_unit_name.py +0 -24
  316. openwisp_controller-1.1.1/openwisp_controller/pki/migrations/0011_disallowed_blank_key_length_or_digest.py +0 -79
  317. openwisp_controller-1.1.1/openwisp_controller/pki/static/admin/pki/js/show-org-field.js +0 -9
  318. openwisp_controller-1.1.1/openwisp_controller/pki/tests/test_api.py +0 -366
  319. openwisp_controller-1.1.1/openwisp_controller/settings.py +0 -3
  320. openwisp_controller-1.1.1/openwisp_controller/subnet_division/settings.py +0 -28
  321. openwisp_controller-1.1.1/openwisp_controller/subnet_division/static/subnet-division/js/subnet-division.js +0 -51
  322. openwisp_controller-1.1.1/openwisp_controller/tests/mixins.py +0 -31
  323. openwisp_controller-1.1.1/openwisp_controller/tests/utils.py +0 -51
  324. openwisp_controller-1.1.1/openwisp_controller/urls.py +0 -84
  325. openwisp_controller-1.1.1/openwisp_controller/vpn_backends.py +0 -106
  326. openwisp_controller-1.1.1/openwisp_controller.egg-info/requires.txt +0 -18
  327. openwisp_controller-1.1.1/requirements.txt +0 -18
  328. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/LICENSE +0 -0
  329. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/MANIFEST.in +0 -0
  330. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/admin.py +0 -0
  331. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/__init__.py +0 -0
  332. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/api/__init__.py +0 -0
  333. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/base/__init__.py +0 -0
  334. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/controller/__init__.py +0 -0
  335. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0050_alter_vpnclient_unique_together.py +0 -0
  336. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/signals.py +0 -0
  337. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/sortedm2m/__init__.py +0 -0
  338. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/static/config/css/devicegroup.css +0 -0
  339. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/static/config/css/lib/img/jsoneditor-icons.svg +0 -0
  340. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/static/config/js/lib/advanced-mode.js +0 -0
  341. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/static/config/js/lib/jsonschema-ui.js +0 -0
  342. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/static/config/js/lib/tomorrow_night_bright.js +0 -0
  343. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/static/config/js/management_ip.js +0 -0
  344. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/static/import_export/import-openwisp.css +0 -0
  345. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/static/support.css +0 -0
  346. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/change_device_group.html +0 -0
  347. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/change_form.html +0 -0
  348. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/change_list_device.html +0 -0
  349. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/clone_template_form.html +0 -0
  350. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/device/change_form.html +0 -0
  351. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/device_recover_form.html +0 -0
  352. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/jsonschema-widget.html +0 -0
  353. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/preview.html +0 -0
  354. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/system_context.html +0 -0
  355. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/import_export/import.html +0 -0
  356. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/templates/reversion/config/revision_form.html +0 -0
  357. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/config/tests/__init__.py +0 -0
  358. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/__init__.py +0 -0
  359. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/base/__init__.py +0 -0
  360. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/connectors/__init__.py +0 -0
  361. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/connectors/airos/snmp.py +0 -0
  362. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/connectors/openwrt/__init__.py +0 -0
  363. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/connectors/openwrt/snmp.py +0 -0
  364. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/exceptions.py +0 -0
  365. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/schema.py +0 -0
  366. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/signals.py +0 -0
  367. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/static/connection/css/credentials.css +0 -0
  368. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/static/connection/js/lib/reconnecting-websocket.min.js +0 -0
  369. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/tests/__init__.py +0 -0
  370. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/tests/base.py +0 -0
  371. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/tests/test-key.ed25519 +0 -0
  372. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/connection/tests/test-key.rsa +0 -0
  373. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/geo/__init__.py +0 -0
  374. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/geo/api/__init__.py +0 -0
  375. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/geo/base/__init__.py +0 -0
  376. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/geo/channels/__init__.py +0 -0
  377. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/geo/templates/admin/widgets/foreign_key_raw_id.html +0 -0
  378. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/geo/tests/__init__.py +0 -0
  379. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/migrations.py +0 -0
  380. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/pki/__init__.py +0 -0
  381. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/pki/base/__init__.py +0 -0
  382. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/pki/templates/admin/pki/change_form.html +0 -0
  383. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/pki/tests/__init__.py +0 -0
  384. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/routing.py +0 -0
  385. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/subnet_division/__init__.py +0 -0
  386. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/subnet_division/rule_types/__init__.py +0 -0
  387. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/subnet_division/signals.py +0 -0
  388. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/subnet_division/static/subnet-division/css/subnet-division.css +0 -0
  389. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/subnet_division/tests/__init__.py +0 -0
  390. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller/tests/test_users_integration.py +0 -0
  391. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller.egg-info/dependency_links.txt +0 -0
  392. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller.egg-info/not-zip-safe +0 -0
  393. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/openwisp_controller.egg-info/top_level.txt +0 -0
  394. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/pyproject.toml +0 -0
  395. {openwisp_controller-1.1.1 → openwisp_controller-1.2}/setup.cfg +0 -0
@@ -1,6 +1,120 @@
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
+
83
+ Version 1.1.2 [2025-08-01]
84
+ --------------------------
85
+
86
+ Bugfixes
87
+ ~~~~~~~~
88
+
89
+ - Fixed `compatibility of OpenWrt.update_config with openwisp-config >=
90
+ 1.1.0 <https://github.com/openwisp/openwisp-controller/issues/964>`__.
91
+ - Fixed `VPN-client template switch issue when switching between VPN
92
+ servers with the same address
93
+ <https://github.com/openwisp/openwisp-controller/issues/973>`__.
94
+ - Fixed `missing config_changed signal when reverting a template
95
+ <https://github.com/openwisp/openwisp-controller/issues/836>`__.
96
+ - Fixed `Zerotier network name being set to "ow_zt" instead of "global"
97
+ <https://github.com/openwisp/openwisp-controller/issues/982>`__.
98
+ - Fixed error in preview when device has no name set.
99
+ - Fixed live updates for "Send commands" when multiple websocket
100
+ connections are open for the same device.
101
+ - Limited command results in the device admin to 30 entries to avoid
102
+ loading issues.
103
+ - Fixed uncaught exception in ``leaflet.draw.i18n.js``.
104
+ - Fixed `handling of devices without a DeviceConnection when creating
105
+ commands
106
+ <https://github.com/openwisp/openwisp-controller/issues/1016>`__.
107
+ - Prevented `adding multiple VPN client templates pointing to the same VPN
108
+ server <https://github.com/openwisp/openwisp-controller/issues/832>`__.
109
+ - Fixed timeout issues in VPN checksum and download configuration views
110
+ for large VPN setups (e.g., 2000+ WireGuard peers) by caching the
111
+ checksum and generated configuration.
112
+ - Fixed an issue where enforcing required templates was accidentally
113
+ deleting `VpnClient` objects, causing them to be recreated whenever
114
+ device templates were modified in the Django admin.
115
+ - Fixed ``HTTP 500 Server Error`` when geographic REST API endpoints
116
+ receive a malformed resource ID.
117
+
4
118
  Version 1.1.1 [2025-01-31]
5
119
  --------------------------
6
120
 
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: openwisp-controller
3
- Version: 1.1.1
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
@@ -45,6 +45,7 @@ Dynamic: download-url
45
45
  Dynamic: home-page
46
46
  Dynamic: keywords
47
47
  Dynamic: license
48
+ Dynamic: license-file
48
49
  Dynamic: platform
49
50
  Dynamic: requires-dist
50
51
  Dynamic: summary
@@ -52,8 +53,8 @@ Dynamic: summary
52
53
  openwisp-controller
53
54
  ===================
54
55
 
55
- .. image:: https://github.com/openwisp/openwisp-controller/workflows/OpenWISP%20Controller%20CI%20Build/badge.svg?branch=master
56
- :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
57
58
  :alt: CI build status
58
59
 
59
60
  .. image:: https://coveralls.io/repos/openwisp/openwisp-controller/badge.svg
@@ -106,10 +107,10 @@ Other popular building blocks that are part of the OpenWISP ecosystem are:
106
107
  - `openwisp-firmware-upgrader
107
108
  <https://openwisp.io/docs/stable/firmware-upgrader/>`_: automated
108
109
  firmware upgrades (single devices or mass network upgrades)
109
- - `openwisp-radius <https://openwisp.io/docs/stable/user/radius.html>`_:
110
- based on FreeRADIUS, allows to implement network access authentication
111
- systems like 802.1x WPA2 Enterprise, captive portal authentication,
112
- Hotspot 2.0 (802.11u)
110
+ - `openwisp-radius <https://openwisp.io/docs/stable/radius/>`_: based on
111
+ FreeRADIUS, allows to implement network access authentication systems
112
+ like 802.1x WPA2 Enterprise, captive portal authentication, Hotspot 2.0
113
+ (802.11u)
113
114
  - `openwisp-network-topology
114
115
  <https://openwisp.io/docs/stable/network-topology/>`_: provides way to
115
116
  collect and visualize network topology data from dynamic mesh routing
@@ -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
@@ -55,10 +55,10 @@ Other popular building blocks that are part of the OpenWISP ecosystem are:
55
55
  - `openwisp-firmware-upgrader
56
56
  <https://openwisp.io/docs/stable/firmware-upgrader/>`_: automated
57
57
  firmware upgrades (single devices or mass network upgrades)
58
- - `openwisp-radius <https://openwisp.io/docs/stable/user/radius.html>`_:
59
- based on FreeRADIUS, allows to implement network access authentication
60
- systems like 802.1x WPA2 Enterprise, captive portal authentication,
61
- Hotspot 2.0 (802.11u)
58
+ - `openwisp-radius <https://openwisp.io/docs/stable/radius/>`_: based on
59
+ FreeRADIUS, allows to implement network access authentication systems
60
+ like 802.1x WPA2 Enterprise, captive portal authentication, Hotspot 2.0
61
+ (802.11u)
62
62
  - `openwisp-network-topology
63
63
  <https://openwisp.io/docs/stable/network-topology/>`_: provides way to
64
64
  collect and visualize network topology data from dynamic mesh routing
@@ -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