xref: /openbmc/phosphor-webui/app/configuration/controllers/network-controller.js (revision a45c3852258dd1a468febdda0a5ff8f1c44de538)
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