blob: cc803d7b3a8a190bb41138ecd4fbef365fcd584b [file] [log] [blame]
Iftekharul Islamcd789502017-04-19 14:37:55 -05001/**
2 * Controller for network
3 *
4 * @module app/configuration
5 * @exports networkController
6 * @name networkController
Iftekharul Islamcd789502017-04-19 14:37:55 -05007 */
8
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07009window.angular && (function(angular) {
10 'use strict';
Iftekharul Islamcd789502017-04-19 14:37:55 -050011
Andrew Geisslerd27bb132018-05-24 11:07:27 -070012 angular.module('app.configuration').controller('networkController', [
Gunnar Millsdca79d72018-05-30 13:07:01 -050013 '$scope', '$window', 'APIUtils', 'dataService', '$route', '$q',
14 function($scope, $window, APIUtils, dataService, $route, $q) {
Andrew Geisslerd27bb132018-05-24 11:07:27 -070015 $scope.dataService = dataService;
16 $scope.network = {};
Gunnar Millsa45c3852018-05-30 16:18:45 -050017 $scope.old_interface = {};
Andrew Geisslerd27bb132018-05-24 11:07:27 -070018 $scope.interface = {};
19 $scope.networkDevice = false;
20 $scope.hostname = '';
Gunnar Millse9f5fe72018-05-04 13:43:10 -050021 $scope.defaultgateway = '';
Gunnar Mills7ddc7272018-04-12 16:12:03 -050022 $scope.set_network_error = '';
23 $scope.set_network_success = false;
24 $scope.selectedInterface = '';
Gunnar Millsd01504c2018-05-03 13:01:51 -050025 $scope.confirm_settings = false;
Gunnar Mills84981f02018-05-31 15:19:01 -050026 $scope.loading = false;
Iftekharul Islam2a489552017-11-02 13:23:08 -050027
Andrew Geisslerd27bb132018-05-24 11:07:27 -070028 $scope.selectInterface = function(interfaceId) {
29 $scope.interface = $scope.network.interfaces[interfaceId];
Gunnar Millsa45c3852018-05-30 16:18:45 -050030 // Copy the interface so we know later if changes were made to the page
31 $scope.old_interface = JSON.parse(JSON.stringify($scope.interface));
Andrew Geisslerd27bb132018-05-24 11:07:27 -070032 $scope.selectedInterface = interfaceId;
33 $scope.networkDevice = false;
34 };
Gunnar Mills7ddc7272018-04-12 16:12:03 -050035 $scope.setNetworkSettings = function() {
Gunnar Millsd01504c2018-05-03 13:01:51 -050036 // Hides the confirm network settings modal
37 $scope.confirm_settings = false;
Gunnar Mills7ddc7272018-04-12 16:12:03 -050038 $scope.set_network_error = '';
39 $scope.set_network_success = false;
Gunnar Mills84981f02018-05-31 15:19:01 -050040 $scope.loading = true;
Gunnar Millsdca79d72018-05-30 13:07:01 -050041 var promises = [];
42
Gunnar Mills659651e2018-05-30 15:21:07 -050043 // MAC Address are case-insensitive
44 if ($scope.interface.MACAddress.toLowerCase() !=
45 dataService.mac_address.toLowerCase()) {
46 promises.push(setMACAddress());
47 }
48 if ($scope.defaultgateway != dataService.defaultgateway) {
49 promises.push(setDefaultGateway());
50 }
51 if ($scope.hostname != dataService.hostname) {
52 promises.push(setHostname());
53 }
Gunnar Millscb2c3062018-05-31 13:13:30 -050054 if ($scope.interface.DHCPEnabled != $scope.old_interface.DHCPEnabled) {
55 promises.push(setDHCPEnabled());
56 }
Gunnar Mills309e06a2018-05-30 13:18:10 -050057
Gunnar Millsa45c3852018-05-30 16:18:45 -050058 // Set IPV4 IP Addresses, Netmask Prefix Lengths, and Gateways
59 if (!$scope.interface.DHCPEnabled) {
60 for (var i in $scope.interface.ipv4.values) {
61 if ($scope.interface.ipv4.values[i].Address !=
62 $scope.old_interface.ipv4.values[i].Address ||
63 $scope.interface.ipv4.values[i].PrefixLength !=
64 $scope.old_interface.ipv4.values[i].PrefixLength ||
65 $scope.interface.ipv4.values[i].Gateway !=
66 $scope.old_interface.ipv4.values[i].Gateway) {
67 promises.push(setIPV4(i));
68 }
69 }
70 }
71
Gunnar Mills84981f02018-05-31 15:19:01 -050072 $q.all(promises).finally(function() {
73 $scope.loading = false;
74 // $q.all with an empty array resolves immediately but don't show
75 // the success message
76 if (!$scope.set_network_error && promises.length) {
77 $scope.set_network_success = true;
78 }
79 });
Gunnar Millsdca79d72018-05-30 13:07:01 -050080
81 };
82
83 function setMACAddress() {
84 return APIUtils
Gunnar Mills7ddc7272018-04-12 16:12:03 -050085 .setMACAddress(
86 $scope.selectedInterface, $scope.interface.MACAddress)
87 .then(
Gunnar Millsdca79d72018-05-30 13:07:01 -050088 function(data) {},
Gunnar Mills7ddc7272018-04-12 16:12:03 -050089 function(error) {
Gunnar Millsdca79d72018-05-30 13:07:01 -050090 console.log(JSON.stringify(error));
Gunnar Mills7ddc7272018-04-12 16:12:03 -050091 $scope.set_network_error = 'MAC Address';
92 });
Gunnar Millsdca79d72018-05-30 13:07:01 -050093 }
94
95 function setDefaultGateway() {
96 return APIUtils.setDefaultGateway($scope.defaultgateway)
97 .then(
98 function(data) {},
99 function(error) {
100 console.log(JSON.stringify(error));
101 $scope.set_network_error = 'Default Gateway';
102 });
103 }
Gunnar Mills309e06a2018-05-30 13:18:10 -0500104
105 function setHostname() {
106 return APIUtils.setHostname($scope.hostname)
107 .then(
108 function(data) {},
109 function(error) {
110 console.log(JSON.stringify(error));
111 $scope.set_network_error = 'Hostname';
112 });
113 }
114
Gunnar Millscb2c3062018-05-31 13:13:30 -0500115 function setDHCPEnabled() {
116 return APIUtils
117 .setDHCPEnabled(
118 $scope.selectedInterface, $scope.interface.DHCPEnabled)
119 .then(
120 function(data) {},
121 function(error) {
122 console.log(JSON.stringify(error));
123 $scope.set_network_error = 'DHCP';
124 });
125 }
126
Gunnar Millsa45c3852018-05-30 16:18:45 -0500127 function setIPV4(index) {
128 // The correct way to edit an IPV4 interface is to remove it and then
129 // add a new one
130 return APIUtils
131 .deleteIPV4(
132 $scope.selectedInterface, $scope.interface.ipv4.ids[index])
133 .then(
134 function(data) {
135 return APIUtils
136 .addIPV4(
137 $scope.selectedInterface,
138 $scope.interface.ipv4.values[index].Address,
139 $scope.interface.ipv4.values[index].PrefixLength,
140 $scope.interface.ipv4.values[index].Gateway)
141 .then(
142 function(data) {},
143 function(error) {
144 console.log(JSON.stringify(error));
145 $scope.set_network_error =
146 $scope.interface.ipv4.values[index].Address;
147 });
148 },
149 function(error) {
150 console.log(JSON.stringify(error));
151 $scope.set_network_error =
152 $scope.interface.ipv4.values[index].Address;
153 });
154 }
155
Gunnar Mills9a0094d2018-05-02 21:50:56 -0500156 $scope.refresh = function() {
157 $route.reload();
158 };
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700159 APIUtils.getNetworkInfo().then(function(data) {
Gunnar Mills659651e2018-05-30 15:21:07 -0500160 dataService.setNetworkInfo(data);
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700161 $scope.network = data.formatted_data;
162 $scope.hostname = data.hostname;
Gunnar Millse9f5fe72018-05-04 13:43:10 -0500163 $scope.defaultgateway = data.defaultgateway;
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700164 if ($scope.network.interface_ids.length) {
165 $scope.selectedInterface = $scope.network.interface_ids[0];
166 $scope.interface =
167 $scope.network.interfaces[$scope.selectedInterface];
Gunnar Millsa45c3852018-05-30 16:18:45 -0500168 // Copy the interface so we know later if changes were made to the
169 // page
170 $scope.old_interface = JSON.parse(JSON.stringify($scope.interface));
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700171 }
172 });
173 }
174 ]);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500175
176})(angular);