blob: 3f7cebee6ec52f789d49efa44f9dc8b58452de97 [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;
Iftekharul Islam2a489552017-11-02 13:23:08 -050026
Andrew Geisslerd27bb132018-05-24 11:07:27 -070027 $scope.selectInterface = function(interfaceId) {
28 $scope.interface = $scope.network.interfaces[interfaceId];
Gunnar Millsa45c3852018-05-30 16:18:45 -050029 // Copy the interface so we know later if changes were made to the page
30 $scope.old_interface = JSON.parse(JSON.stringify($scope.interface));
Andrew Geisslerd27bb132018-05-24 11:07:27 -070031 $scope.selectedInterface = interfaceId;
32 $scope.networkDevice = false;
33 };
Gunnar Mills7ddc7272018-04-12 16:12:03 -050034 $scope.setNetworkSettings = function() {
Gunnar Millsd01504c2018-05-03 13:01:51 -050035 // Hides the confirm network settings modal
36 $scope.confirm_settings = false;
Gunnar Mills7ddc7272018-04-12 16:12:03 -050037 $scope.set_network_error = '';
38 $scope.set_network_success = false;
Gunnar Millsdca79d72018-05-30 13:07:01 -050039 var promises = [];
40
Gunnar Mills659651e2018-05-30 15:21:07 -050041 // MAC Address are case-insensitive
42 if ($scope.interface.MACAddress.toLowerCase() !=
43 dataService.mac_address.toLowerCase()) {
44 promises.push(setMACAddress());
45 }
46 if ($scope.defaultgateway != dataService.defaultgateway) {
47 promises.push(setDefaultGateway());
48 }
49 if ($scope.hostname != dataService.hostname) {
50 promises.push(setHostname());
51 }
Gunnar Millscb2c3062018-05-31 13:13:30 -050052 if ($scope.interface.DHCPEnabled != $scope.old_interface.DHCPEnabled) {
53 promises.push(setDHCPEnabled());
54 }
Gunnar Mills309e06a2018-05-30 13:18:10 -050055
Gunnar Millsa45c3852018-05-30 16:18:45 -050056 // Set IPV4 IP Addresses, Netmask Prefix Lengths, and Gateways
57 if (!$scope.interface.DHCPEnabled) {
58 for (var i in $scope.interface.ipv4.values) {
59 if ($scope.interface.ipv4.values[i].Address !=
60 $scope.old_interface.ipv4.values[i].Address ||
61 $scope.interface.ipv4.values[i].PrefixLength !=
62 $scope.old_interface.ipv4.values[i].PrefixLength ||
63 $scope.interface.ipv4.values[i].Gateway !=
64 $scope.old_interface.ipv4.values[i].Gateway) {
65 promises.push(setIPV4(i));
66 }
67 }
68 }
69
Gunnar Mills659651e2018-05-30 15:21:07 -050070 if (promises.length) {
71 $q.all(promises).finally(function() {
72 if (!$scope.set_network_error) {
73 $scope.set_network_success = true;
74 }
75 });
76 }
Gunnar Millsdca79d72018-05-30 13:07:01 -050077
78 };
79
80 function setMACAddress() {
81 return APIUtils
Gunnar Mills7ddc7272018-04-12 16:12:03 -050082 .setMACAddress(
83 $scope.selectedInterface, $scope.interface.MACAddress)
84 .then(
Gunnar Millsdca79d72018-05-30 13:07:01 -050085 function(data) {},
Gunnar Mills7ddc7272018-04-12 16:12:03 -050086 function(error) {
Gunnar Millsdca79d72018-05-30 13:07:01 -050087 console.log(JSON.stringify(error));
Gunnar Mills7ddc7272018-04-12 16:12:03 -050088 $scope.set_network_error = 'MAC Address';
89 });
Gunnar Millsdca79d72018-05-30 13:07:01 -050090 }
91
92 function setDefaultGateway() {
93 return APIUtils.setDefaultGateway($scope.defaultgateway)
94 .then(
95 function(data) {},
96 function(error) {
97 console.log(JSON.stringify(error));
98 $scope.set_network_error = 'Default Gateway';
99 });
100 }
Gunnar Mills309e06a2018-05-30 13:18:10 -0500101
102 function setHostname() {
103 return APIUtils.setHostname($scope.hostname)
104 .then(
105 function(data) {},
106 function(error) {
107 console.log(JSON.stringify(error));
108 $scope.set_network_error = 'Hostname';
109 });
110 }
111
Gunnar Millscb2c3062018-05-31 13:13:30 -0500112 function setDHCPEnabled() {
113 return APIUtils
114 .setDHCPEnabled(
115 $scope.selectedInterface, $scope.interface.DHCPEnabled)
116 .then(
117 function(data) {},
118 function(error) {
119 console.log(JSON.stringify(error));
120 $scope.set_network_error = 'DHCP';
121 });
122 }
123
Gunnar Millsa45c3852018-05-30 16:18:45 -0500124 function setIPV4(index) {
125 // The correct way to edit an IPV4 interface is to remove it and then
126 // add a new one
127 return APIUtils
128 .deleteIPV4(
129 $scope.selectedInterface, $scope.interface.ipv4.ids[index])
130 .then(
131 function(data) {
132 return APIUtils
133 .addIPV4(
134 $scope.selectedInterface,
135 $scope.interface.ipv4.values[index].Address,
136 $scope.interface.ipv4.values[index].PrefixLength,
137 $scope.interface.ipv4.values[index].Gateway)
138 .then(
139 function(data) {},
140 function(error) {
141 console.log(JSON.stringify(error));
142 $scope.set_network_error =
143 $scope.interface.ipv4.values[index].Address;
144 });
145 },
146 function(error) {
147 console.log(JSON.stringify(error));
148 $scope.set_network_error =
149 $scope.interface.ipv4.values[index].Address;
150 });
151 }
152
Gunnar Mills9a0094d2018-05-02 21:50:56 -0500153 $scope.refresh = function() {
154 $route.reload();
155 };
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700156 APIUtils.getNetworkInfo().then(function(data) {
Gunnar Mills659651e2018-05-30 15:21:07 -0500157 dataService.setNetworkInfo(data);
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700158 $scope.network = data.formatted_data;
159 $scope.hostname = data.hostname;
Gunnar Millse9f5fe72018-05-04 13:43:10 -0500160 $scope.defaultgateway = data.defaultgateway;
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700161 if ($scope.network.interface_ids.length) {
162 $scope.selectedInterface = $scope.network.interface_ids[0];
163 $scope.interface =
164 $scope.network.interfaces[$scope.selectedInterface];
Gunnar Millsa45c3852018-05-30 16:18:45 -0500165 // Copy the interface so we know later if changes were made to the
166 // page
167 $scope.old_interface = JSON.parse(JSON.stringify($scope.interface));
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700168 }
169 });
170 }
171 ]);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500172
173})(angular);