1cd789508SIftekharul Islam/** 2cd789508SIftekharul Islam * Controller for network 3cd789508SIftekharul Islam * 4cd789508SIftekharul Islam * @module app/configuration 5cd789508SIftekharul Islam * @exports networkController 6cd789508SIftekharul Islam * @name networkController 7cd789508SIftekharul Islam */ 8cd789508SIftekharul Islam 9cd789508SIftekharul Islamwindow.angular && (function(angular) { 10cd789508SIftekharul Islam 'use strict'; 11cd789508SIftekharul Islam 12d27bb135SAndrew Geissler angular.module('app.configuration').controller('networkController', [ 13dca79d73SGunnar Mills '$scope', '$window', 'APIUtils', 'dataService', '$route', '$q', 14dca79d73SGunnar Mills function($scope, $window, APIUtils, dataService, $route, $q) { 15cd789508SIftekharul Islam $scope.dataService = dataService; 162a489554SIftekharul Islam $scope.network = {}; 17*a45c3852SGunnar Mills $scope.old_interface = {}; 182a489554SIftekharul Islam $scope.interface = {}; 192a489554SIftekharul Islam $scope.networkDevice = false; 20ba5e3f34SAndrew Geissler $scope.hostname = ''; 21e9f5fe77SGunnar Mills $scope.defaultgateway = ''; 227ddc7274SGunnar Mills $scope.set_network_error = ''; 237ddc7274SGunnar Mills $scope.set_network_success = false; 247ddc7274SGunnar Mills $scope.selectedInterface = ''; 25d01504cfSGunnar Mills $scope.confirm_settings = false; 262a489554SIftekharul Islam 272a489554SIftekharul Islam $scope.selectInterface = function(interfaceId) { 282a489554SIftekharul Islam $scope.interface = $scope.network.interfaces[interfaceId]; 29*a45c3852SGunnar Mills // Copy the interface so we know later if changes were made to the page 30*a45c3852SGunnar Mills $scope.old_interface = JSON.parse(JSON.stringify($scope.interface)); 312a489554SIftekharul Islam $scope.selectedInterface = interfaceId; 322a489554SIftekharul Islam $scope.networkDevice = false; 33ba5e3f34SAndrew Geissler }; 347ddc7274SGunnar Mills $scope.setNetworkSettings = function() { 35d01504cfSGunnar Mills // Hides the confirm network settings modal 36d01504cfSGunnar Mills $scope.confirm_settings = false; 377ddc7274SGunnar Mills $scope.set_network_error = ''; 387ddc7274SGunnar Mills $scope.set_network_success = false; 39dca79d73SGunnar Mills var promises = []; 40dca79d73SGunnar Mills 41659651e8SGunnar Mills // MAC Address are case-insensitive 42659651e8SGunnar Mills if ($scope.interface.MACAddress.toLowerCase() != 43659651e8SGunnar Mills dataService.mac_address.toLowerCase()) { 44dca79d73SGunnar Mills promises.push(setMACAddress()); 45659651e8SGunnar Mills } 46659651e8SGunnar Mills if ($scope.defaultgateway != dataService.defaultgateway) { 47dca79d73SGunnar Mills promises.push(setDefaultGateway()); 48659651e8SGunnar Mills } 49659651e8SGunnar Mills if ($scope.hostname != dataService.hostname) { 50309e06abSGunnar Mills promises.push(setHostname()); 51659651e8SGunnar Mills } 52309e06abSGunnar Mills 53*a45c3852SGunnar Mills // Set IPV4 IP Addresses, Netmask Prefix Lengths, and Gateways 54*a45c3852SGunnar Mills if (!$scope.interface.DHCPEnabled) { 55*a45c3852SGunnar Mills for (var i in $scope.interface.ipv4.values) { 56*a45c3852SGunnar Mills if ($scope.interface.ipv4.values[i].Address != 57*a45c3852SGunnar Mills $scope.old_interface.ipv4.values[i].Address || 58*a45c3852SGunnar Mills $scope.interface.ipv4.values[i].PrefixLength != 59*a45c3852SGunnar Mills $scope.old_interface.ipv4.values[i].PrefixLength || 60*a45c3852SGunnar Mills $scope.interface.ipv4.values[i].Gateway != 61*a45c3852SGunnar Mills $scope.old_interface.ipv4.values[i].Gateway) { 62*a45c3852SGunnar Mills promises.push(setIPV4(i)); 63*a45c3852SGunnar Mills } 64*a45c3852SGunnar Mills } 65*a45c3852SGunnar Mills } 66*a45c3852SGunnar Mills 67659651e8SGunnar Mills if (promises.length) { 68dca79d73SGunnar Mills $q.all(promises).finally(function() { 69dca79d73SGunnar Mills if (!$scope.set_network_error) { 70dca79d73SGunnar Mills $scope.set_network_success = true; 71dca79d73SGunnar Mills } 72dca79d73SGunnar Mills }); 73659651e8SGunnar Mills } 74dca79d73SGunnar Mills 75dca79d73SGunnar Mills }; 76dca79d73SGunnar Mills 77dca79d73SGunnar Mills function setMACAddress() { 78dca79d73SGunnar Mills return APIUtils 797ddc7274SGunnar Mills .setMACAddress( 807ddc7274SGunnar Mills $scope.selectedInterface, $scope.interface.MACAddress) 817ddc7274SGunnar Mills .then( 82dca79d73SGunnar Mills function(data) {}, 837ddc7274SGunnar Mills function(error) { 84dca79d73SGunnar Mills console.log(JSON.stringify(error)); 857ddc7274SGunnar Mills $scope.set_network_error = 'MAC Address'; 867ddc7274SGunnar Mills }); 87dca79d73SGunnar Mills } 88dca79d73SGunnar Mills 89dca79d73SGunnar Mills function setDefaultGateway() { 90dca79d73SGunnar Mills return APIUtils.setDefaultGateway($scope.defaultgateway) 91dca79d73SGunnar Mills .then( 92dca79d73SGunnar Mills function(data) {}, 93dca79d73SGunnar Mills function(error) { 94dca79d73SGunnar Mills console.log(JSON.stringify(error)); 95dca79d73SGunnar Mills $scope.set_network_error = 'Default Gateway'; 96dca79d73SGunnar Mills }); 97dca79d73SGunnar Mills } 98309e06abSGunnar Mills 99309e06abSGunnar Mills function setHostname() { 100309e06abSGunnar Mills return APIUtils.setHostname($scope.hostname) 101309e06abSGunnar Mills .then( 102309e06abSGunnar Mills function(data) {}, 103309e06abSGunnar Mills function(error) { 104309e06abSGunnar Mills console.log(JSON.stringify(error)); 105309e06abSGunnar Mills $scope.set_network_error = 'Hostname'; 106309e06abSGunnar Mills }); 107309e06abSGunnar Mills } 108309e06abSGunnar Mills 109*a45c3852SGunnar Mills function setIPV4(index) { 110*a45c3852SGunnar Mills // The correct way to edit an IPV4 interface is to remove it and then 111*a45c3852SGunnar Mills // add a new one 112*a45c3852SGunnar Mills return APIUtils 113*a45c3852SGunnar Mills .deleteIPV4( 114*a45c3852SGunnar Mills $scope.selectedInterface, $scope.interface.ipv4.ids[index]) 115*a45c3852SGunnar Mills .then( 116*a45c3852SGunnar Mills function(data) { 117*a45c3852SGunnar Mills return APIUtils 118*a45c3852SGunnar Mills .addIPV4( 119*a45c3852SGunnar Mills $scope.selectedInterface, 120*a45c3852SGunnar Mills $scope.interface.ipv4.values[index].Address, 121*a45c3852SGunnar Mills $scope.interface.ipv4.values[index].PrefixLength, 122*a45c3852SGunnar Mills $scope.interface.ipv4.values[index].Gateway) 123*a45c3852SGunnar Mills .then( 124*a45c3852SGunnar Mills function(data) {}, 125*a45c3852SGunnar Mills function(error) { 126*a45c3852SGunnar Mills console.log(JSON.stringify(error)); 127*a45c3852SGunnar Mills $scope.set_network_error = 128*a45c3852SGunnar Mills $scope.interface.ipv4.values[index].Address; 129*a45c3852SGunnar Mills }); 130*a45c3852SGunnar Mills }, 131*a45c3852SGunnar Mills function(error) { 132*a45c3852SGunnar Mills console.log(JSON.stringify(error)); 133*a45c3852SGunnar Mills $scope.set_network_error = 134*a45c3852SGunnar Mills $scope.interface.ipv4.values[index].Address; 135*a45c3852SGunnar Mills }); 136*a45c3852SGunnar Mills } 137*a45c3852SGunnar Mills 1389a0094dcSGunnar Mills $scope.refresh = function() { 1399a0094dcSGunnar Mills $route.reload(); 1409a0094dcSGunnar Mills }; 1412a489554SIftekharul Islam APIUtils.getNetworkInfo().then(function(data) { 142659651e8SGunnar Mills dataService.setNetworkInfo(data); 1432a489554SIftekharul Islam $scope.network = data.formatted_data; 1442a489554SIftekharul Islam $scope.hostname = data.hostname; 145e9f5fe77SGunnar Mills $scope.defaultgateway = data.defaultgateway; 1462a489554SIftekharul Islam if ($scope.network.interface_ids.length) { 1472a489554SIftekharul Islam $scope.selectedInterface = $scope.network.interface_ids[0]; 148d27bb135SAndrew Geissler $scope.interface = 149d27bb135SAndrew Geissler $scope.network.interfaces[$scope.selectedInterface]; 150*a45c3852SGunnar Mills // Copy the interface so we know later if changes were made to the 151*a45c3852SGunnar Mills // page 152*a45c3852SGunnar Mills $scope.old_interface = JSON.parse(JSON.stringify($scope.interface)); 1532a489554SIftekharul Islam } 1542a489554SIftekharul Islam }); 155cd789508SIftekharul Islam } 156ba5e3f34SAndrew Geissler ]); 157cd789508SIftekharul Islam 158cd789508SIftekharul Islam})(angular); 159