diff --git a/static/js/fwupdateController.js b/static/js/fwupdateController.js
new file mode 100644
index 0000000..ceacd8a
--- /dev/null
+++ b/static/js/fwupdateController.js
@@ -0,0 +1,83 @@
+angular.module('bmcApp').controller('fwupdateController', [
+  '$scope', '$http', '$uibModal',
+  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'
+
+          var dv1 = new Int8Array(e.target.result, 0, 16);
+
+          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);
+            }
+          return image_info;
+        };
+        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
+                  .post(
+                      '/intel/firmwareupload', data = e.target.result,
+                      {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
