Large updates to webserver

Do not merge yet

Change-Id: I38c56844c1b0e3e8e5493c2705e62e6db7ee2102
diff --git a/static/js/bmcApp.js b/static/js/bmcApp.js
index fb641ab..f1e02c7 100644
--- a/static/js/bmcApp.js
+++ b/static/js/bmcApp.js
@@ -71,6 +71,19 @@
   }
 ]);
 
+app.directive('fileInput', ['$parse', function ($parse) {
+    return {
+        restrict: 'A',
+        link: function (scope, element, attributes) {
+            element.bind('change', function () {
+                $parse(attributes.fileInput)
+                .assign(scope,element[0].files)
+                scope.$apply()
+            });
+        }
+    };
+}]);
+
 app.run([
   '$rootScope', '$cookieStore', '$state', 'AuthenticationService', '$http',
   '$templateCache',
diff --git a/static/js/dbusWebsocketFactory.js b/static/js/dbusWebsocketFactory.js
new file mode 100644
index 0000000..716f2df
--- /dev/null
+++ b/static/js/dbusWebsocketFactory.js
@@ -0,0 +1,20 @@
+angular.module('bmcApp').factory('dbusWebsocketService', [
+  '$location',
+  function($location) {
+    return {
+      start: function(dbus_namespace, callback) {
+        var url = '/dbus_monitor?path_namespace=' + dbus_namespace;
+        var host = $location.host();
+        var port = 18080;
+        var protocol = 'wss://';
+        if ($location.protocol() === 'http') {
+          protocol = 'ws://';
+        }
+        var websocket = new WebSocket(protocol + host + ':' + port + url);
+        websocket.onopen = function() {};
+        websocket.onclose = function() {};
+        websocket.onmessage = function(evt) { callback(evt); };
+      }
+    }
+  }
+]);
\ No newline at end of file
diff --git a/static/js/fwupdateController.js b/static/js/fwupdateController.js
index d5eab07..e33a30f 100644
--- a/static/js/fwupdateController.js
+++ b/static/js/fwupdateController.js
@@ -1,86 +1,87 @@
 angular.module('bmcApp').controller('fwupdateController', [
   '$scope', '$http', '$uibModal', '$state',
   function($scope, $http, $uibModal, $state) {
-    $scope.upload = function(files) {
-      r = new FileReader();
-      r.onload = function(e) {
-        get_image_info = function(buffer) {
-          image_info = {'valid' : false}
-          var expected = '*SignedImage*\0\0\0'
+    $scope.files = [];
+    $scope.$watch('files', function(newValue, oldValue) {
+      if (newValue.length > 0) {
+        console.log('Loading firware file ' + $scope.files[0]);
+        r = new FileReader();
+        r.onload = function(e) {
+          get_image_info = function(buffer) {
+            image_info = {'valid' : false};
+            var expected = '*SignedImage*\0\0\0';
 
-          var dv1 = new Int8Array(e.target.result, 0, 16);
+            var dv1 = new Int8Array(e.target.result, 0, 16);
 
-          for (var i = 0; i != expected.length; i++) {
-            if (dv1[i] != expected.charCodeAt(i)) {
+            for (var i = 0; i != expected.length; i++) {
+              if (dv1[i] != expected.charCodeAt(i)) {
+                return image_info;
+              }
+            }
+            image_info['valid'] = true;
+            var generation = new Int8Array(e.target.result, 16, 17)[0];
+            image_info['generation'] = generation;
+            if ((generation < 4) ||
+                (generation > 5)) {  // not VLN generation header
+
               return image_info;
+            } else {
+              var version_minor = new Uint16Array(e.target.result, 20, 22)[0];
+              image_info['major_version'] =
+                  new Uint8Array(e.target.result, 28, 29)[0];
+              image_info['submajor_version'] =
+                  new Uint8Array(e.target.result, 29, 30)[0].toString(16);
+              var version_minor2 = new Uint16Array(e.target.result, 30, 32)[0];
+              image_info['sha1_version'] =
+                  ('0000' + version_minor2.toString(16)).substr(-4) +
+                  ('0000' + version_minor.toString(16)).substr(-4);
             }
-          }
-          image_info['valid'] = true;
-          var generation = new Int8Array(e.target.result, 16, 17)[0];
-          image_info['generation'] = generation;
-          if ((generation < 4) ||
-              (generation > 5)) {  // not VLN generation header
-
             return image_info;
-          } else {
-            var version_minor = new Uint16Array(e.target.result, 20, 22)[0];
-            image_info['major_version'] =
-                new Uint8Array(e.target.result, 28, 29)[0];
-            image_info['submajor_version'] =
-                new Uint8Array(e.target.result, 29, 30)[0].toString(16);
-            var version_minor2 = new Uint16Array(e.target.result, 30, 32)[0];
-            image_info['sha1_version'] =
-                ('0000' + version_minor2.toString(16)).substr(-4) +
-                ('0000' + version_minor.toString(16)).substr(-4);
+          };
+          var image_info = get_image_info(e.target.result);
+          $scope.image_info = image_info;
+
+          var objectSelectionModal = $uibModal.open({
+            templateUrl : 'static/partial-fwupdateconfirm.html',
+            controller : function($scope) {
+              $scope.image_info = image_info;
+              $scope.file_to_load = file_to_load;
+              // The function that is called for modal closing (positive button)
+
+              $scope.okModal = function() {
+                // Closing the model with result
+                objectSelectionModal.close($scope.selection);
+                $http({
+                  method : 'POST',
+                  url : '/intel/firmwareupload',
+                  data : e.target.result,
+                  transformRequest : [],
+                  headers : {'Content-Type' : 'application/octet-stream'}
+                })
+                    .then(
+                        function successCallback(response) {
+                          console.log('Success uploaded. Response: ' +
+                                      response.data)
+                        },
+                        function errorCallback(response) {
+                          console.log('Error status: ' + response.status)
+                        });
+              };
+
+              // The function that is called for modal dismissal(negative
+              // button)
+
+              $scope.dismissModal = function() {
+                objectSelectionModal.dismiss();
+              };
             }
-          return image_info;
+          });
         };
-        var image_info = get_image_info(e.target.result);
-        $scope.image_info = image_info;
+        var file_to_load = $scope.files[0];
+        $scope.file_to_load = $scope.files[0];
+        r.readAsArrayBuffer($scope.files[0]);
+      }
+    });
 
-        var objectSelectionModal = $uibModal.open({
-          templateUrl : 'static/partial-fwupdateconfirm.html',
-          controller : function($scope) {
-            $scope.image_info = image_info;
-            $scope.file_to_load = file_to_load;
-            // The function that is called for modal closing (positive button)
-
-            $scope.okModal = function() {
-              // Closing the model with result
-              objectSelectionModal.close($scope.selection);
-              $http({
-                method : 'POST',
-                url : '/intel/firmwareupload',
-                data : e.target.result,
-                transformRequest : [],
-                headers : {'Content-Type' : 'application/octet-stream'}
-              })
-                  .then(
-                      function successCallback(response) {
-                        console.log('Success uploaded. Response: ' +
-                                    response.data)
-                      },
-                      function errorCallback(response) {
-                        console.log('Error status: ' + response.status)
-                      });
-            };
-
-            // The function that is called for modal dismissal(negative button)
-
-            $scope.dismissModal = function() {
-              objectSelectionModal.dismiss();
-            };
-
-          }
-
-        });
-      };
-      var file_to_load = files[0];
-      $scope.file_to_load = file_to_load;
-      r.readAsArrayBuffer(files[0]);
-
-    };
-
-    $scope.filename = '';
   }
 ]);
\ No newline at end of file
diff --git a/static/js/fwupdateconfirmController.js b/static/js/fwupdateconfirmController.js
deleted file mode 100644
index 845e73d..0000000
--- a/static/js/fwupdateconfirmController.js
+++ /dev/null
@@ -1,5 +0,0 @@
-angular.module('bmcApp').controller('fwupdateconfirmController', [
-  '$scope', '$stateParams',function($scope, $stateParams) {
-    $scope.filename = $stateParams.filename;
-  }
-]);
\ No newline at end of file
diff --git a/static/js/sensorController.js b/static/js/sensorController.js
index 3943192..272dfee 100644
--- a/static/js/sensorController.js
+++ b/static/js/sensorController.js
@@ -1,59 +1,37 @@
-angular.module('bmcApp')
-    .controller(
-        'sensorController',
-        [
-          '$scope', '$http', '$location', 'websocketService',
-          function($scope, $http, $location, websocketService) {
-            $scope.smartTablePageSize = 10;
-            $scope.next_id = 0;
-            websocketService.start('/dbus_monitor', function(evt) {
-              var obj = JSON.parse(evt.data);
+angular.module('bmcApp').controller('sensorController', [
+  '$scope', '$http', '$location', 'dbusWebsocketService',
+  function($scope, $http, $location, dbusWebsocketService) {
+    $scope.smartTablePageSize = 10;
+    $scope.next_id = 0;
+    dbusWebsocketService.start('/xyz/openbmc_project/sensors', function(evt) {
+      var obj = JSON.parse(evt.data);
 
-              $scope.$apply(function() {
-                for (var sensor_name in obj) {
-                  var found = false;
-                  for (var sensor_index in $scope.rowCollection) {
-                    var sensor_object = $scope.rowCollection[sensor_index];
-                    if (sensor_object.name === sensor_name) {
-                      sensor_object.value = obj[sensor_name];
-                      found = true;
-                      break;
-                    }
-                    }
-                  if (!found) {
-                    console.log(sensor_name + ' -> ' + obj[sensor_name]);
-                    $scope.next_id = $scope.next_id + 1;
+      $scope.$apply(function() {
+        for (var sensor_name in obj) {
+          var found = false;
+          for (var sensor_index in $scope.rowCollection) {
+            var sensor_object = $scope.rowCollection[sensor_index];
+            if (sensor_object.name === sensor_name) {
+              sensor_object.value = obj[sensor_name];
+              found = true;
+              break;
+            }
+          }
+          if (!found) {
+            console.log(sensor_name + ' -> ' + obj[sensor_name]);
+            $scope.next_id = $scope.next_id + 1;
 
-                    $scope.rowCollection.push({
-                      id : $scope.next_id,
-                      name : sensor_name,
-                      value : obj[sensor_name],
-                    });
-                  }
-                };
-              });
+            $scope.rowCollection.push({
+              id : $scope.next_id,
+              name : sensor_name,
+              value : obj[sensor_name],
             });
-
-            $scope.rowCollection = [];
-
           }
-        ])
-    .factory('websocketService', [
-      '$location',
-      function($location) {
-        return {
-          start: function(url, callback) {
-            var host = $location.host();
-            var port = 18080;
-            var protocol = 'wss://';
-            if ($location.protocol() === 'http') {
-              protocol = 'ws://';
-              }
-            var websocket = new WebSocket(protocol + host + ':' + port + url);
-            websocket.onopen = function() {};
-            websocket.onclose = function() {};
-            websocket.onmessage = function(evt) { callback(evt); };
-          }
-        }
-      }
-    ]);
\ No newline at end of file
+        };
+      });
+    });
+
+    $scope.rowCollection = [];
+
+  }
+]);