diff --git a/src/js/client.js b/src/js/client.js index 3f6389349..1c46b50de 100644 --- a/src/js/client.js +++ b/src/js/client.js @@ -949,6 +949,23 @@ angular.module('Application').service('Client', ['$http', '$interval', '$timeout }); }; + Client.prototype.setIPv6Config = function (enabled, callback) { + post('/api/v1/settings/ipv6', { enabled: enabled }, null, function (error, data, status) { + if (error) return callback(error); + if (status !== 200) return callback(new ClientError(status, data)); + callback(null); + }); + }; + + Client.prototype.getIPv6Config = function (callback) { + get('/api/v1/settings/ipv6', null, function (error, data, status) { + if (error) return callback(error); + if (status !== 200) return callback(new ClientError(status, data)); + + callback(null, data.enabled); + }); + }; + // branding Client.prototype.setFooter = function (footer, callback) { post('/api/v1/branding/footer', { footer: footer }, null, function (error, data, status) { diff --git a/src/translation/en.json b/src/translation/en.json index 8a062dbcd..852d0f169 100644 --- a/src/translation/en.json +++ b/src/translation/en.json @@ -714,7 +714,11 @@ "address": "IPv4 Address" }, "ipv6": { - "address": "IPv6 Address (optional)" + "address": "IPv6 Address (optional)", + "title": "IPv6", + "description": "Enable this option to configure DNS AAAA records for the apps and the mail server.", + "enable": "Enable IPv6", + "saved": "Saved" } }, "services": { diff --git a/src/views/network.html b/src/views/network.html index d1ff36501..52dab6a02 100644 --- a/src/views/network.html +++ b/src/views/network.html @@ -144,6 +144,34 @@ +
+

{{ 'network.ipv6.title' | tr }}

+
+ +
+
+
+

{{ 'network.ipv6.description' | tr }}

+


{{ ipv6Configure.error }}

+
+ +
+
+
+ +
+
+ {{ 'network.ipv6.saved' | tr }} +
+ +
+ +
+
+
+

{{ 'network.dyndns.title' | tr }}

diff --git a/src/views/network.js b/src/views/network.js index f7972adf9..e93fd7575 100644 --- a/src/views/network.js +++ b/src/views/network.js @@ -56,6 +56,37 @@ angular.module('Application').controller('NetworkController', ['$scope', '$locat } }; + $scope.ipv6Configure = { + busy: false, + success: false, + error: '', + currentState: false, + enabled: false, + + refresh: function () { + Client.getIPv6Config(function (error, enabled) { + if (error) return console.error(error); + + $scope.ipv6Configure.currentState = enabled; + $scope.ipv6Configure.enabled = enabled; + }); + }, + + submit: function () { + $scope.ipv6Configure.busy = true; + $scope.ipv6Configure.success = false; + $scope.ipv6Configure.error = ''; + + Client.setIPv6Config($scope.ipv6Configure.enabled, function (error) { + if (error) $scope.ipv6Configure.error = error.message; + else $scope.ipv6Configure.currentState = $scope.ipv6Configure.enabled; + + $scope.ipv6Configure.busy = false; + $scope.ipv6Configure.success = true; + }); + } + }; + $scope.blocklist = { busy: false, error: {}, @@ -191,6 +222,7 @@ angular.module('Application').controller('NetworkController', ['$scope', '$locat $scope.sysinfo.refresh(); $scope.dyndnsConfigure.refresh(); + $scope.ipv6Configure.refresh(); if ($scope.user.isAtLeastOwner) $scope.blocklist.refresh(); });