diff --git a/openwisp_controller/config/api/zerotier_service.py b/openwisp_controller/config/api/zerotier_service.py index 16493a076..0acd2b52e 100644 --- a/openwisp_controller/config/api/zerotier_service.py +++ b/openwisp_controller/config/api/zerotier_service.py @@ -38,7 +38,6 @@ def _get_repsonse(self, repsonse): "rulesSource", "ssoEnabled", "creationTime", - "name", "nwid", "objtype", "revision", diff --git a/openwisp_controller/config/base/vpn.py b/openwisp_controller/config/base/vpn.py index f3270c852..3a538910e 100644 --- a/openwisp_controller/config/base/vpn.py +++ b/openwisp_controller/config/base/vpn.py @@ -261,8 +261,8 @@ def save(self, *args, **kwargs): self.ip = self._auto_create_ip() if self._is_backend_type("zerotier"): config = deepcopy(self.config["zerotier"][0]) - config["name"] = self.name if created: + config["name"] = self.name self._create_zt_server(config) try: super().save(*args, **kwargs) @@ -500,7 +500,9 @@ def get_vpn_server_context(self): ) context[context_keys["vpn_subnet"]] = str(self.subnet.subnet) if self._is_backend_type("zerotier") and self.network_id: - context[context_keys["network_name"]] = self.name + context[context_keys["network_name"]] = ( + self.config.get("zerotier", [{}])[0].get("name") or self.name + ) context[context_keys["node_id"]] = self.node_id context[context_keys["network_id"]] = self.network_id return context diff --git a/openwisp_controller/config/tests/test_vpn.py b/openwisp_controller/config/tests/test_vpn.py index 211ad4a06..d122ee312 100644 --- a/openwisp_controller/config/tests/test_vpn.py +++ b/openwisp_controller/config/tests/test_vpn.py @@ -1440,6 +1440,39 @@ def test_zerotier_vpn_host_validation(self, mock_requests): expected_error_dict, context_manager.exception.message_dict ) + @mock.patch(_ZT_SERVICE_REQUESTS) + def test_zerotier_network_name_independent_of_vpn_name(self, mock_requests): + mock_requests.get.side_effect = [ + self._get_mock_response(200, response=self._TEST_ZT_NODE_CONFIG) + ] + mock_requests.post.side_effect = [self._get_mock_response(200)] + template = self._create_template( + name="test-zerotier-template", + type="vpn", + vpn=self._create_zerotier_vpn(name="original-name"), + organization=self._get_org(), + ) + pk = template.vpn.pk.hex + network_name_key = f"network_name_{pk}" + original_context = template.get_context() + original_network_name = original_context[network_name_key] + self.assertEqual( + original_network_name, + template.vpn.config.get("zerotier", [{}])[0].get("name"), + ) + vpn = template.vpn + vpn.name = "renamed-vpn" + mock_requests.reset_mock() + mock_requests.get.side_effect = [ + self._get_mock_response(200, response=self._TEST_ZT_NODE_CONFIG) + ] + vpn.full_clean() + vpn.save() + template.vpn.refresh_from_db() + updated_context = template.get_context() + self.assertEqual(updated_context[network_name_key], original_network_name) + self.assertNotEqual(updated_context[network_name_key], template.vpn.name) + def test_zerotier_change_vpn_backend_with_vpnclient(self): vpn = self._create_vpn(name="new", backend=self._BACKENDS["openvpn"]) subnet = self._create_subnet(