Files
cloudron-box/src/views/network.js
2022-01-06 12:51:08 -08:00

190 lines
6.0 KiB
JavaScript

'use strict';
/* global angular */
/* global $ */
angular.module('Application').controller('NetworkController', ['$scope', '$location', 'Client', function ($scope, $location, Client) {
Client.onReady(function () { if (!Client.getUserInfo().isAtLeastAdmin) $location.path('/'); });
$scope.user = Client.getUserInfo();
$scope.config = Client.getConfig();
// keep in sync with sysinfo.js
$scope.sysinfoProvider = [
{ name: 'Public IP', value: 'generic' },
{ name: 'Static IP Address', value: 'fixed' },
{ name: 'Network Interface', value: 'network-interface' }
];
$scope.prettySysinfoProviderName = function (provider) {
switch (provider) {
case 'generic': return 'Public IP';
case 'fixed': return 'Static IP Address';
case 'network-interface': return 'Network Interface';
default: return 'Unknown';
}
};
$scope.dyndnsConfigure = {
busy: false,
success: false,
error: '',
currentState: false,
enabled: false,
refresh: function () {
Client.getDynamicDnsConfig(function (error, enabled) {
if (error) return console.error(error);
$scope.dyndnsConfigure.currentState = enabled;
$scope.dyndnsConfigure.enabled = enabled;
});
},
submit: function () {
$scope.dyndnsConfigure.busy = true;
$scope.dyndnsConfigure.success = false;
$scope.dyndnsConfigure.error = '';
Client.setDynamicDnsConfig($scope.dyndnsConfigure.enabled, function (error) {
if (error) $scope.dyndnsConfigure.error = error.message;
else $scope.dyndnsConfigure.currentState = $scope.dyndnsConfigure.enabled;
$scope.dyndnsConfigure.busy = false;
$scope.dyndnsConfigure.success = true;
});
}
};
$scope.blocklist = {
busy: false,
error: {},
blocklist: '',
currentBlocklist: '',
currentBlocklistLength: 0,
refresh: function () {
Client.getBlocklist(function (error, result) {
if (error) return console.error(error);
$scope.blocklist.currentBlocklist = result;
$scope.blocklist.currentBlocklistLength = result.split('\n').filter(function (l) { return l.length !== 0 && l[0] !== '#'; }).length;
});
},
show: function () {
$scope.blocklist.error = {};
$scope.blocklist.blocklist = $scope.blocklist.currentBlocklist;
$('#blocklistModal').modal('show');
},
submit: function () {
$scope.blocklist.error = {};
$scope.blocklist.busy = true;
Client.setBlocklist($scope.blocklist.blocklist, function (error) {
$scope.blocklist.busy = false;
if (error) {
$scope.blocklist.error.blocklist = error.message;
$scope.blocklist.error.ip = error.message;
$scope.blocklistChangeForm.$setPristine();
$scope.blocklistChangeForm.$setUntouched();
return;
}
$scope.blocklist.refresh();
$('#blocklistModal').modal('hide');
});
}
},
$scope.sysinfo = {
busy: false,
error: {},
serverIp: '',
provider: '',
ip: '',
ifname: '',
// configure dialog
newProvider: '',
newIp: '',
newIfname: '',
refresh: function () {
Client.getSysinfoConfig(function (error, result) {
if (error) return console.error(error);
$scope.sysinfo.provider = result.provider;
$scope.sysinfo.ip = result.ip || '';
$scope.sysinfo.ifname = result.ifname || '';
Client.getServerIp(function (error, result) {
if (error) return console.error(error);
$scope.sysinfo.serverIp = result.ipv4;
});
});
},
show: function () {
$scope.sysinfo.error = {};
$scope.sysinfo.newProvider = $scope.sysinfo.provider;
$scope.sysinfo.newIp = $scope.sysinfo.ip;
$scope.sysinfo.newIfname = $scope.sysinfo.ifname;
$('#sysinfoModal').modal('show');
},
submit: function () {
$scope.sysinfo.error = {};
$scope.sysinfo.busy = true;
var config = {
provider: $scope.sysinfo.newProvider
};
if (config.provider === 'fixed') {
config.ip = $scope.sysinfo.newIp;
} else if (config.provider === 'network-interface') {
config.ifname = $scope.sysinfo.newIfname;
}
Client.setSysinfoConfig(config, function (error) {
$scope.sysinfo.busy = false;
if (error && error.message.indexOf('ip') !== -1) {
$scope.sysinfo.error.ip = error.message;
$scope.sysinfoForm.$setPristine();
$scope.sysinfoForm.$setUntouched();
return;
} else if (error && (error.message.indexOf('interface') !== -1 || error.message.indexOf('IPv4') !== -1)) {
$scope.sysinfo.error.ifname = error.message;
$scope.sysinfoForm.$setPristine();
$scope.sysinfoForm.$setUntouched();
return;
} else if (error) {
console.error(error);
return;
}
$scope.sysinfo.refresh();
$('#sysinfoModal').modal('hide');
});
}
};
Client.onReady(function () {
$scope.sysinfo.refresh();
$scope.dyndnsConfigure.refresh();
if ($scope.user.isAtLeastOwner) $scope.blocklist.refresh();
});
$('.modal-backdrop').remove();
}]);