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.
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/CHANGES.rst +80 -1
- {openwisp_controller-1.1.2/openwisp_controller.egg-info → openwisp_controller-1.2}/PKG-INFO +17 -17
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/README.rst +2 -2
- openwisp_controller-1.2/openwisp_controller/__init__.py +20 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/base.py +7 -7
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/checks.py +10 -10
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/admin.py +385 -369
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/api/download_views.py +6 -6
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/api/filters.py +41 -41
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/api/serializers.py +155 -128
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/api/urls.py +30 -30
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/api/views.py +65 -53
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/api/zerotier_service.py +35 -35
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/apps.py +150 -198
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/base/base.py +20 -20
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/base/channels_consumer.py +13 -13
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/base/config.py +293 -141
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/base/device.py +51 -51
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/base/device_group.py +27 -27
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/base/multitenancy.py +20 -20
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/base/tag.py +6 -6
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/base/template.py +117 -57
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/base/vpn.py +222 -223
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/controller/urls.py +1 -1
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/controller/views.py +80 -88
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/crypto.py +2 -2
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/exceptions.py +5 -5
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/exportable.py +54 -54
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/filters.py +14 -12
- openwisp_controller-1.2/openwisp_controller/config/fixtures/test_templates.json +50 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/handlers.py +26 -26
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0001_squashed_0002_config_settings_uuid.py +159 -159
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0003_template_tags.py +35 -35
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0004_add_device_model.py +34 -34
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0005_populate_device.py +4 -4
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0006_config_device_not_null.py +4 -4
- openwisp_controller-1.2/openwisp_controller/config/migrations/0007_simplify_config.py +13 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0008_update_indexes.py +20 -20
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0009_device_system.py +5 -5
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0010_auto_20180106_1814.py +7 -7
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0011_update_device_mac_address.py +7 -7
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0012_auto_20180219_1501.py +7 -7
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0013_last_ip_management_ip_and_status_applied.py +36 -36
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0014_device_hardware_id.py +3 -3
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0015_default_groups_permissions.py +1 -1
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0016_default_organization_config_settings.py +3 -3
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0017_template_name_organization_unique_together.py +2 -2
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0018_config_context.py +6 -6
- {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
- openwisp_controller-1.2/openwisp_controller/config/migrations/0020_remove_config_organization.py +11 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0021_vpn_key.py +6 -6
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0022_vpn_format_dh.py +2 -2
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0023_update_context.py +6 -6
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0024_update_context_data.py +3 -3
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0025_update_device_key.py +7 -7
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0026_hardware_id_not_unique.py +3 -3
- openwisp_controller-1.2/openwisp_controller/config/migrations/0027_add_indexes_on_ip_fields.py +39 -0
- openwisp_controller-1.2/openwisp_controller/config/migrations/0028_template_default_values.py +29 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0029_merge_django_netjsonconfig.py +13 -13
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0030_django_taggit_update.py +16 -16
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0031_update_vpn_dh_param.py +1 -1
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0032_update_legacy_vpn_backend.py +4 -4
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0033_name_unique_per_organization.py +6 -6
- openwisp_controller-1.2/openwisp_controller/config/migrations/0034_template_required.py +24 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0035_device_name_unique_optional.py +4 -4
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0036_device_group.py +30 -30
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0037_alter_taggedtemplate.py +11 -11
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0038_vpn_subnet.py +5 -5
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0039_wireguard_vxlan_ipam.py +44 -44
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0040_vpnclient_ip_setnull.py +7 -7
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0041_default_groups_organizationconfigsettings_permission.py +1 -1
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0042_multiple_wireguard_tunnels.py +18 -18
- openwisp_controller-1.2/openwisp_controller/config/migrations/0043_devicegroup_templates.py +32 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0044_config_error_reason.py +5 -5
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0045_alter_vpn_webhook_endpoint.py +6 -6
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0046_organizationlimits.py +13 -13
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0047_add_organizationlimits.py +1 -1
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0048_wifi_radio_band_migration.py +54 -54
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0049_devicegroup_context.py +7 -7
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0051_organizationconfigsettings_context.py +7 -7
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0052_vpn_node_network_id.py +5 -5
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0053_vpnclient_secret.py +3 -3
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0054_device__is_deactivated.py +3 -3
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0055_alter_config_status.py +2 -2
- openwisp_controller-1.2/openwisp_controller/config/migrations/0056_vpnclient_template.py +24 -0
- openwisp_controller-1.2/openwisp_controller/config/migrations/0057_populate_vpnclient_template.py +25 -0
- openwisp_controller-1.2/openwisp_controller/config/migrations/0058_alter_vpnclient_template.py +22 -0
- openwisp_controller-1.2/openwisp_controller/config/migrations/0059_zerotier_templates_ow_zt_to_global.py +25 -0
- openwisp_controller-1.2/openwisp_controller/config/migrations/0060_cleanup_api_task_notification_types.py +35 -0
- openwisp_controller-1.2/openwisp_controller/config/migrations/0061_config_checksum_db.py +57 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/__init__.py +30 -30
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/models.py +10 -10
- openwisp_controller-1.2/openwisp_controller/config/settings.py +69 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/sortedm2m/fields.py +3 -3
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/sortedm2m/forms.py +4 -4
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/static/config/css/admin.css +24 -17
- openwisp_controller-1.2/openwisp_controller/config/static/config/css/device-delete-confirmation.css +20 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/static/config/css/lib/advanced-mode.css +74 -43
- openwisp_controller-1.2/openwisp_controller/config/static/config/css/lib/jsonschema-ui.css +558 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/static/config/js/device-delete-confirmation.js +0 -1
- openwisp_controller-1.2/openwisp_controller/config/static/config/js/preview.js +110 -0
- openwisp_controller-1.2/openwisp_controller/config/static/config/js/relevant_templates.js +226 -0
- openwisp_controller-1.2/openwisp_controller/config/static/config/js/switcher.js +43 -0
- openwisp_controller-1.2/openwisp_controller/config/static/config/js/tabs.js +87 -0
- openwisp_controller-1.2/openwisp_controller/config/static/config/js/unsaved_changes.js +125 -0
- openwisp_controller-1.2/openwisp_controller/config/static/config/js/utils.js +113 -0
- openwisp_controller-1.2/openwisp_controller/config/static/config/js/vpn.js +71 -0
- openwisp_controller-1.2/openwisp_controller/config/static/config/js/widget.js +1050 -0
- openwisp_controller-1.2/openwisp_controller/config/static/sortedm2m/patch_sortedm2m.js +15 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tasks.py +58 -36
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tasks_zerotier.py +85 -59
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/device/delete_confirmation.html +4 -5
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/device/delete_selected_confirmation.html +4 -5
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/device_group/change_form.html +1 -1
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tests/pytest.py +15 -15
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_admin.py +1143 -991
- openwisp_controller-1.2/openwisp_controller/config/tests/test_api.py +1771 -0
- openwisp_controller-1.2/openwisp_controller/config/tests/test_apps.py +85 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_config.py +292 -249
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_controller.py +467 -467
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_device.py +154 -154
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_device_group.py +14 -14
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_handlers.py +8 -8
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_notifications.py +59 -50
- openwisp_controller-1.2/openwisp_controller/config/tests/test_selenium.py +620 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_tag.py +3 -3
- openwisp_controller-1.2/openwisp_controller/config/tests/test_template.py +969 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_views.py +92 -89
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tests/test_vpn.py +511 -504
- openwisp_controller-1.2/openwisp_controller/config/tests/utils.py +417 -0
- openwisp_controller-1.2/openwisp_controller/config/urls.py +6 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/utils.py +39 -39
- openwisp_controller-1.2/openwisp_controller/config/validators.py +27 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/views.py +101 -35
- openwisp_controller-1.2/openwisp_controller/config/widgets.py +68 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/admin.py +44 -48
- openwisp_controller-1.2/openwisp_controller/connection/api/serializers.py +117 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/api/urls.py +13 -13
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/api/views.py +54 -46
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/apps.py +55 -55
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/base/models.py +99 -86
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/channels/consumers.py +2 -2
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/channels/routing.py +1 -1
- openwisp_controller-1.2/openwisp_controller/connection/commands.py +164 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/connectors/exceptions.py +8 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/connectors/openwrt/ssh.py +12 -12
- openwisp_controller-1.2/openwisp_controller/connection/connectors/snmp.py +34 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/connectors/ssh.py +61 -49
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/migrations/0001_initial.py +47 -47
- openwisp_controller-1.2/openwisp_controller/connection/migrations/0002_credentials_auto_add.py +23 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/migrations/0003_default_group_permissions.py +1 -1
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/migrations/0004_django3_1_upgrade.py +3 -3
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/migrations/0005_device_connection_failure_reason.py +5 -5
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/migrations/0006_name_unique_per_organization.py +4 -4
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/migrations/0007_command.py +34 -29
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/migrations/0008_remove_conflicting_deviceconnections.py +6 -6
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/migrations/0009_alter_deviceconnection_unique_together.py +3 -3
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/migrations/__init__.py +15 -15
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/models.py +3 -3
- openwisp_controller-1.2/openwisp_controller/connection/settings.py +49 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/static/connection/css/command-inline.css +5 -7
- openwisp_controller-1.2/openwisp_controller/connection/static/connection/js/commands.js +642 -0
- openwisp_controller-1.2/openwisp_controller/connection/static/connection/js/credentials.js +22 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tasks.py +19 -14
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tests/pytest.py +26 -26
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tests/test_admin.py +70 -70
- openwisp_controller-1.2/openwisp_controller/connection/tests/test_api.py +862 -0
- openwisp_controller-1.2/openwisp_controller/connection/tests/test_command_utilities.py +61 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tests/test_models.py +300 -300
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tests/test_notifications.py +38 -38
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tests/test_selenium.py +27 -27
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tests/test_snmp.py +11 -11
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tests/test_ssh.py +39 -28
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tests/test_tasks.py +18 -18
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tests/utils.py +41 -41
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/utils.py +2 -2
- openwisp_controller-1.2/openwisp_controller/connection/widgets.py +48 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/context_processors.py +1 -1
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/admin.py +18 -18
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/api/filters.py +3 -3
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/api/serializers.py +99 -102
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/api/urls.py +1 -1
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/api/views.py +27 -27
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/apps.py +35 -35
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/base/models.py +8 -8
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/channels/consumers.py +1 -1
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/channels/routing.py +2 -2
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/exportable.py +22 -22
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/migrations/0001_initial.py +67 -67
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/migrations/0002_default_groups_permissions.py +1 -1
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/migrations/0003_alter_devicelocation_floorplan_location.py +5 -5
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/migrations/__init__.py +6 -6
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/models.py +3 -3
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/tests/pytest.py +14 -14
- openwisp_controller-1.2/openwisp_controller/geo/tests/test_admin.py +321 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/tests/test_admin_inline.py +21 -20
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/tests/test_api.py +379 -379
- openwisp_controller-1.2/openwisp_controller/geo/tests/test_apps.py +19 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/tests/test_models.py +7 -7
- openwisp_controller-1.2/openwisp_controller/geo/tests/test_selenium.py +115 -0
- openwisp_controller-1.2/openwisp_controller/geo/tests/utils.py +68 -0
- openwisp_controller-1.2/openwisp_controller/geo/utils.py +44 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/mixins.py +3 -5
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/admin.py +10 -10
- openwisp_controller-1.2/openwisp_controller/pki/api/serializers.py +193 -0
- openwisp_controller-1.2/openwisp_controller/pki/api/urls.py +42 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/api/views.py +9 -9
- openwisp_controller-1.2/openwisp_controller/pki/apps.py +46 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/base/models.py +7 -7
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/0001_initial.py +118 -118
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/0002_add_organization_name.py +7 -7
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/0003_fill_organization_name.py +5 -5
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/0004_auto_20180106_1814.py +9 -9
- openwisp_controller-1.2/openwisp_controller/pki/migrations/0005_organizational_unit_name.py +24 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/0006_add_x509_passphrase_field.py +7 -7
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/0007_default_groups_permissions.py +1 -1
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/0008_serial_number_length.py +9 -9
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/0009_common_name_maxlength_64.py +7 -7
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/0010_common_name_organization_unique.py +18 -18
- openwisp_controller-1.2/openwisp_controller/pki/migrations/0011_disallowed_blank_key_length_or_digest.py +79 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/migrations/__init__.py +7 -7
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/models.py +2 -2
- openwisp_controller-1.2/openwisp_controller/pki/static/admin/pki/js/show-org-field.js +9 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/tests/test_admin.py +48 -48
- openwisp_controller-1.2/openwisp_controller/pki/tests/test_api.py +370 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/tests/test_models.py +14 -13
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/tests/utils.py +6 -6
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/urls.py +1 -1
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/utils.py +3 -3
- openwisp_controller-1.2/openwisp_controller/serializers.py +12 -0
- openwisp_controller-1.2/openwisp_controller/settings.py +3 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/admin.py +21 -21
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/apps.py +9 -9
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/base/models.py +41 -41
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/filters.py +19 -19
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/migrations/0001_initial.py +46 -46
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/migrations/0002_default_group_migration.py +1 -1
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/migrations/0003_related_field_allow_blank.py +7 -7
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/migrations/0004_index_rule_on_delete.py +3 -3
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/migrations/0005_number_of_subnets_and_ips.py +13 -13
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/migrations/__init__.py +8 -8
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/models.py +2 -2
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/rule_types/base.py +27 -27
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/rule_types/device.py +13 -13
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/rule_types/vpn.py +14 -14
- openwisp_controller-1.2/openwisp_controller/subnet_division/settings.py +28 -0
- openwisp_controller-1.2/openwisp_controller/subnet_division/static/subnet-division/js/subnet-division.js +56 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/tasks.py +21 -21
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/tests/helpers.py +21 -21
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/tests/test_admin.py +60 -60
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/tests/test_models.py +177 -177
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/tests/test_rule.py +13 -13
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/utils.py +9 -9
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/tests/__init__.py +3 -3
- openwisp_controller-1.2/openwisp_controller/tests/mixins.py +36 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/tests/test_selenium.py +22 -19
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/tests/test_utilities.py +11 -11
- openwisp_controller-1.2/openwisp_controller/tests/utils.py +18 -0
- openwisp_controller-1.2/openwisp_controller/urls.py +84 -0
- openwisp_controller-1.2/openwisp_controller/vpn_backends.py +106 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2/openwisp_controller.egg-info}/PKG-INFO +17 -17
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller.egg-info/SOURCES.txt +9 -2
- openwisp_controller-1.2/openwisp_controller.egg-info/requires.txt +18 -0
- openwisp_controller-1.2/requirements.txt +18 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/setup.py +15 -15
- openwisp_controller-1.1.2/openwisp_controller/__init__.py +0 -20
- openwisp_controller-1.1.2/openwisp_controller/config/fixtures/test_templates.json +0 -50
- openwisp_controller-1.1.2/openwisp_controller/config/migrations/0007_simplify_config.py +0 -13
- openwisp_controller-1.1.2/openwisp_controller/config/migrations/0020_remove_config_organization.py +0 -11
- openwisp_controller-1.1.2/openwisp_controller/config/migrations/0027_add_indexes_on_ip_fields.py +0 -39
- openwisp_controller-1.1.2/openwisp_controller/config/migrations/0028_template_default_values.py +0 -29
- openwisp_controller-1.1.2/openwisp_controller/config/migrations/0034_template_required.py +0 -24
- openwisp_controller-1.1.2/openwisp_controller/config/migrations/0043_devicegroup_templates.py +0 -32
- openwisp_controller-1.1.2/openwisp_controller/config/settings.py +0 -69
- openwisp_controller-1.1.2/openwisp_controller/config/static/config/css/device-delete-confirmation.css +0 -11
- openwisp_controller-1.1.2/openwisp_controller/config/static/config/css/lib/jsonschema-ui.css +0 -321
- openwisp_controller-1.1.2/openwisp_controller/config/static/config/js/preview.js +0 -99
- openwisp_controller-1.1.2/openwisp_controller/config/static/config/js/relevant_templates.js +0 -181
- openwisp_controller-1.1.2/openwisp_controller/config/static/config/js/switcher.js +0 -33
- openwisp_controller-1.1.2/openwisp_controller/config/static/config/js/tabs.js +0 -80
- openwisp_controller-1.1.2/openwisp_controller/config/static/config/js/unsaved_changes.js +0 -106
- openwisp_controller-1.1.2/openwisp_controller/config/static/config/js/utils.js +0 -111
- openwisp_controller-1.1.2/openwisp_controller/config/static/config/js/vpn.js +0 -68
- openwisp_controller-1.1.2/openwisp_controller/config/static/config/js/widget.js +0 -989
- openwisp_controller-1.1.2/openwisp_controller/config/static/sortedm2m/patch_sortedm2m.js +0 -16
- openwisp_controller-1.1.2/openwisp_controller/config/tests/test_api.py +0 -1590
- openwisp_controller-1.1.2/openwisp_controller/config/tests/test_apps.py +0 -85
- openwisp_controller-1.1.2/openwisp_controller/config/tests/test_selenium.py +0 -405
- openwisp_controller-1.1.2/openwisp_controller/config/tests/test_template.py +0 -750
- openwisp_controller-1.1.2/openwisp_controller/config/tests/utils.py +0 -411
- openwisp_controller-1.1.2/openwisp_controller/config/urls.py +0 -6
- openwisp_controller-1.1.2/openwisp_controller/config/validators.py +0 -27
- openwisp_controller-1.1.2/openwisp_controller/config/widgets.py +0 -68
- openwisp_controller-1.1.2/openwisp_controller/connection/api/serializer.py +0 -110
- openwisp_controller-1.1.2/openwisp_controller/connection/commands.py +0 -157
- openwisp_controller-1.1.2/openwisp_controller/connection/connectors/snmp.py +0 -34
- openwisp_controller-1.1.2/openwisp_controller/connection/migrations/0002_credentials_auto_add.py +0 -23
- openwisp_controller-1.1.2/openwisp_controller/connection/settings.py +0 -49
- openwisp_controller-1.1.2/openwisp_controller/connection/static/connection/js/commands.js +0 -596
- openwisp_controller-1.1.2/openwisp_controller/connection/static/connection/js/credentials.js +0 -21
- openwisp_controller-1.1.2/openwisp_controller/connection/tests/test_api.py +0 -669
- openwisp_controller-1.1.2/openwisp_controller/connection/tests/test_command_utilities.py +0 -61
- openwisp_controller-1.1.2/openwisp_controller/connection/widgets.py +0 -48
- openwisp_controller-1.1.2/openwisp_controller/geo/static/leaflet/draw/leaflet.draw.i18n.js +0 -116
- openwisp_controller-1.1.2/openwisp_controller/geo/tests/test_admin.py +0 -284
- openwisp_controller-1.1.2/openwisp_controller/geo/tests/test_apps.py +0 -19
- openwisp_controller-1.1.2/openwisp_controller/geo/tests/utils.py +0 -65
- openwisp_controller-1.1.2/openwisp_controller/geo/utils.py +0 -44
- openwisp_controller-1.1.2/openwisp_controller/pki/api/serializers.py +0 -193
- openwisp_controller-1.1.2/openwisp_controller/pki/api/urls.py +0 -42
- openwisp_controller-1.1.2/openwisp_controller/pki/apps.py +0 -46
- openwisp_controller-1.1.2/openwisp_controller/pki/migrations/0005_organizational_unit_name.py +0 -24
- openwisp_controller-1.1.2/openwisp_controller/pki/migrations/0011_disallowed_blank_key_length_or_digest.py +0 -79
- openwisp_controller-1.1.2/openwisp_controller/pki/static/admin/pki/js/show-org-field.js +0 -9
- openwisp_controller-1.1.2/openwisp_controller/pki/tests/test_api.py +0 -366
- openwisp_controller-1.1.2/openwisp_controller/settings.py +0 -3
- openwisp_controller-1.1.2/openwisp_controller/subnet_division/settings.py +0 -28
- openwisp_controller-1.1.2/openwisp_controller/subnet_division/static/subnet-division/js/subnet-division.js +0 -51
- openwisp_controller-1.1.2/openwisp_controller/tests/mixins.py +0 -31
- openwisp_controller-1.1.2/openwisp_controller/tests/utils.py +0 -51
- openwisp_controller-1.1.2/openwisp_controller/urls.py +0 -84
- openwisp_controller-1.1.2/openwisp_controller/vpn_backends.py +0 -106
- openwisp_controller-1.1.2/openwisp_controller.egg-info/requires.txt +0 -18
- openwisp_controller-1.1.2/requirements.txt +0 -18
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/LICENSE +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/MANIFEST.in +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/admin.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/__init__.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/api/__init__.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/base/__init__.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/controller/__init__.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/migrations/0050_alter_vpnclient_unique_together.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/signals.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/sortedm2m/__init__.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/static/config/css/devicegroup.css +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/static/config/css/lib/img/jsoneditor-icons.svg +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/static/config/js/lib/advanced-mode.js +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/static/config/js/lib/jsonschema-ui.js +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/static/config/js/lib/tomorrow_night_bright.js +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/static/config/js/management_ip.js +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/static/import_export/import-openwisp.css +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/static/support.css +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/change_device_group.html +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/change_form.html +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/change_list_device.html +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/clone_template_form.html +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/device/change_form.html +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/device_recover_form.html +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/jsonschema-widget.html +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/preview.html +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/config/system_context.html +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/admin/import_export/import.html +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/templates/reversion/config/revision_form.html +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/config/tests/__init__.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/__init__.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/base/__init__.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/connectors/__init__.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/connectors/airos/snmp.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/connectors/openwrt/__init__.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/connectors/openwrt/snmp.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/exceptions.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/schema.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/signals.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/static/connection/css/credentials.css +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/static/connection/js/lib/reconnecting-websocket.min.js +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tests/__init__.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tests/base.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tests/test-key.ed25519 +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/connection/tests/test-key.rsa +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/__init__.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/api/__init__.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/base/__init__.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/channels/__init__.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/templates/admin/widgets/foreign_key_raw_id.html +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/geo/tests/__init__.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/migrations.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/__init__.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/base/__init__.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/templates/admin/pki/change_form.html +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/pki/tests/__init__.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/routing.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/__init__.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/rule_types/__init__.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/signals.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/static/subnet-division/css/subnet-division.css +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/subnet_division/tests/__init__.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller/tests/test_users_integration.py +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller.egg-info/dependency_links.txt +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller.egg-info/not-zip-safe +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/openwisp_controller.egg-info/top_level.txt +0 -0
- {openwisp_controller-1.1.2 → openwisp_controller-1.2}/pyproject.toml +0 -0
- {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
|
|
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.
|
|
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~=
|
|
24
|
-
Requires-Dist: django-taggit~=
|
|
25
|
-
Requires-Dist: netjsonconfig~=1.
|
|
26
|
-
Requires-Dist: django-x509~=1.
|
|
27
|
-
Requires-Dist: django-loci~=1.
|
|
28
|
-
Requires-Dist: django-flat-json-widget~=0.
|
|
29
|
-
Requires-Dist: openwisp-users~=1.
|
|
30
|
-
Requires-Dist: openwisp-utils[celery]~=1.
|
|
31
|
-
Requires-Dist: openwisp-notifications~=1.
|
|
32
|
-
Requires-Dist: openwisp-ipam~=1.
|
|
33
|
-
Requires-Dist: djangorestframework-gis~=1.
|
|
34
|
-
Requires-Dist: paramiko
|
|
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.
|
|
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~=
|
|
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/
|
|
57
|
-
:target: https://github.com/openwisp/openwisp-controller/actions
|
|
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/
|
|
5
|
-
:target: https://github.com/openwisp/openwisp-controller/actions
|
|
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
|
-
|
|
31
|
-
|
|
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
|
|
36
|
-
raise ValidationError({
|
|
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
|
|
41
|
-
|
|
40
|
+
f"There is already a {model_name} of "
|
|
41
|
+
"another organization with this name."
|
|
42
42
|
)
|
|
43
|
-
raise ValidationError({
|
|
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
|
-
|
|
14
|
-
and
|
|
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=
|
|
18
|
+
msg="Improperly Configured",
|
|
19
19
|
hint=(
|
|
20
20
|
'"django-cors-headers" is either not installed or improperly '
|
|
21
|
-
|
|
21
|
+
"configured. CORS configuration is required for using "
|
|
22
22
|
'"OPENWISP_CONTROLLER_API_HOST" settings. '
|
|
23
|
-
|
|
23
|
+
" Configure equivalent CORS rules on your server "
|
|
24
24
|
'if you are not using "django-cors-headers".'
|
|
25
25
|
),
|
|
26
|
-
obj=
|
|
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 =
|
|
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][
|
|
39
|
+
if not (ctx_processor in settings.TEMPLATES[0]["OPTIONS"]["context_processors"]):
|
|
40
40
|
errors.append(
|
|
41
41
|
checks.Warning(
|
|
42
|
-
msg=
|
|
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=
|
|
48
|
+
obj="Settings",
|
|
49
49
|
)
|
|
50
50
|
)
|
|
51
51
|
return errors
|