You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by mi...@apache.org on 2018/07/09 14:26:44 UTC

[trafficcontrol] 05/08: added functional iso streaming capability to TP and updated imported modules

This is an automated email from the ASF dual-hosted git repository.

mitchell852 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git

commit e14f1a68a4bcb463ee5ed3cb234647a51d0ef50e
Author: Jesse Rivas <je...@comcast.com>
AuthorDate: Tue Jul 3 10:40:43 2018 -0600

    added functional iso streaming capability to TP and updated imported modules
---
 traffic_ops/app/lib/API/Iso.pm                     | 20 ++++++++++--------
 traffic_ops/app/lib/UI/GenIso.pm                   |  7 +++++++
 traffic_ops/app/templates/gen_iso/geniso.html.ep   |  2 +-
 traffic_portal/app/src/app.js                      |  1 -
 traffic_portal/app/src/common/api/ToolsService.js  | 11 +++++++++-
 .../common/modules/form/iso/FormISOController.js   | 24 ++--------------------
 traffic_portal/app/src/index.html                  |  3 +--
 traffic_portal/app/src/scripts/shared-libs.js      |  2 --
 traffic_portal/bower.json                          |  3 +--
 traffic_portal/grunt/browserify2.js                |  4 +---
 10 files changed, 35 insertions(+), 42 deletions(-)

diff --git a/traffic_ops/app/lib/API/Iso.pm b/traffic_ops/app/lib/API/Iso.pm
index 6487043..d080f96 100644
--- a/traffic_ops/app/lib/API/Iso.pm
+++ b/traffic_ops/app/lib/API/Iso.pm
@@ -31,7 +31,6 @@ use Mojolicious::Plugin::Config;
 use Data::Validate::IP qw(is_ipv4 is_ipv6);
 use Validate::Tiny ':all';
 use Net::Domain qw(hostfqdn);
-use MIME::Base64;
 
 my $filebasedir             = "/var/www/files";
 my $ksfiles_parm_name       = "kickstart.files.location";
@@ -83,7 +82,16 @@ sub generate {
 	}
 
 	my $response = $self->generate_iso($params);
-	return $self->success( $response, "Generate ISO was successful." );
+
+	if ( index( $params->{stream}, "yes" ) != -1 ) {
+		$self->res->headers->content_type("application/download");
+		$self->res->headers->content_disposition("attachment; filename=\"$response->{name}\"");
+
+		return $self->render( data => $response->{iso} );
+	} else {
+		return $self->success( $response, "Generate ISO was successful." );
+	}
+
 }
 
 sub generate_iso {
@@ -241,7 +249,7 @@ sub generate_iso {
 		&log($self, "ISO created [ " . $osversion_dir . " ] for " . $fqdn, "APICHANGE");
 
 		#my $iso_url = join("/", $config->{'to'}{'base_url'}, $iso_dir, $iso_file_name);
-		my $iso_url = join("/", "https://" + hostfqdn(), $iso_dir, $iso_file_name);
+		my $iso_url = join("/", "https://" . hostfqdn(), $iso_dir, $iso_file_name);
 
 		$response = {
 			isoName => $iso_file_name,
@@ -249,13 +257,9 @@ sub generate_iso {
 		};
 	}
 	else {
-		$self->res->headers->content_type("application/x-iso9660-image");
-		$self->res->headers->content_disposition("attachment; filename=\"$iso_file_name\"");
 		my $data = `$cmd`;
-		#$self->render( data => $data );
-		my $encodedIso = encode_base64($data);
 		$response = {
-			iso => $encodedIso,
+			iso => $data,
 			name => $iso_file_name,
 		};
 	}
diff --git a/traffic_ops/app/lib/UI/GenIso.pm b/traffic_ops/app/lib/UI/GenIso.pm
index ceccc08..0ed3d07 100644
--- a/traffic_ops/app/lib/UI/GenIso.pm
+++ b/traffic_ops/app/lib/UI/GenIso.pm
@@ -107,6 +107,13 @@ sub iso_download {
 	};
 	my $dl_res = &API::Iso::generate_iso($self, $params);
 
+	if ( $params->{stream} eq 'yes' ) {
+		$self->res->headers->content_type("application/download");
+		$self->res->headers->content_disposition("attachment; filename=\"$dl_res->{name}\"");
+
+		return $self->render( data => $dl_res->{iso} );
+	}
+
 	# serverselect
 	$self->flash( message => "Download ISO here" );
 	return $dl_res->{isoName};
diff --git a/traffic_ops/app/templates/gen_iso/geniso.html.ep b/traffic_ops/app/templates/gen_iso/geniso.html.ep
index 82c27f3..9bf64ff 100644
--- a/traffic_ops/app/templates/gen_iso/geniso.html.ep
+++ b/traffic_ops/app/templates/gen_iso/geniso.html.ep
@@ -190,8 +190,8 @@ $(function () {
 									<td>Stream ISO:</td>
 									<td>
 										<select id="stream" name=stream>
-											<option>yes</option>
 											<option>no</option>
+											<option>yes</option>
 										</select>
 									</td>
 									<td>If no, download link will be provided</td>
diff --git a/traffic_portal/app/src/app.js b/traffic_portal/app/src/app.js
index baf69b0..238b2fa 100644
--- a/traffic_portal/app/src/app.js
+++ b/traffic_portal/app/src/app.js
@@ -38,7 +38,6 @@ var trafficPortal = angular.module('trafficPortal', [
         'app.templates',
         'angular-jwt',
         'angular-loading-bar',
-        'ngFileSaver',
 
         // public modules
         require('./modules/public').name,
diff --git a/traffic_portal/app/src/common/api/ToolsService.js b/traffic_portal/app/src/common/api/ToolsService.js
index e0ef325..3195f3b 100644
--- a/traffic_portal/app/src/common/api/ToolsService.js
+++ b/traffic_portal/app/src/common/api/ToolsService.js
@@ -38,10 +38,19 @@ var ToolsService = function($http, $q, Restangular, locationUtils, messageModel,
 	this.generateISO = function(iso) {
 		var request = $q.defer();
 
-		$http.post(ENV.api['root'] + "isos", iso)
+
+		var respType = 'json';
+		if (iso.stream == 'yes') {
+			respType = 'arraybuffer';
+		}
+
+		$http.post(ENV.api['root'] + "isos", iso, { responseType:respType })
 			.then(
 				function(result) {
 					request.resolve(result.data.response);
+					if (iso.stream == 'yes') {
+						download(result.data, "myiso.iso");
+					}
 				},
 				function(fault) {
 					messageModel.setMessages(fault.data.alerts, false);
diff --git a/traffic_portal/app/src/common/modules/form/iso/FormISOController.js b/traffic_portal/app/src/common/modules/form/iso/FormISOController.js
index 9af70d6..7b878ed 100644
--- a/traffic_portal/app/src/common/modules/form/iso/FormISOController.js
+++ b/traffic_portal/app/src/common/modules/form/iso/FormISOController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var FormISOController = function(servers, osversions, $scope, $anchorScroll, formUtils, toolsService, messageModel, FileSaver, Blob) {
+var FormISOController = function(servers, osversions, $scope, $anchorScroll, formUtils, toolsService, messageModel) {
 
 	$scope.servers = servers;
 
@@ -54,20 +54,6 @@ var FormISOController = function(servers, osversions, $scope, $anchorScroll, for
 				if (iso.stream != 'yes') {
                     messageModel.setMessages([{level: 'success', text: 'ISO created at ' + result.isoURL}], false);
                 }
-                else {
-					//var isoStr = result.iso.replace(/\n/g, "");
-					//var decodedIso = Base64.atob(result.iso);
-					//isoStr += '=';
-					//alert(isoStr.length)
-                    //var decodedIso = $base64.atob(result.iso);
-					var decodedIso = atob(result.iso);
-					var newData = new Blob([decodedIso], { type: 'application/x-iso9660-image' } );
-					//var encodedIso = new Blob([result.iso], { type: 'application/x-iso9660-image' } );
-					//var file = new File([decodedIso], result.name, { type: 'application/x-iso9660-image' } );
-					//alert(newData.size + " : " + encodedIso.size);
-
-					FileSaver.saveAs(newData, result.name);
-				}
 			});
 	};
 
@@ -75,13 +61,7 @@ var FormISOController = function(servers, osversions, $scope, $anchorScroll, for
 
 	$scope.hasPropertyError = formUtils.hasPropertyError;
 
-    // function b64DecodeUnicode(str) {
-    //     return decodeURIComponent(Array.prototype.map.call(atob(str), function(c) {
-    //         return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)
-    //     }).join(''))
-    // }
-
 };
 
-FormISOController.$inject = ['servers', 'osversions', '$scope', '$anchorScroll', 'formUtils', 'toolsService', 'messageModel', 'FileSaver', 'Blob'];
+FormISOController.$inject = ['servers', 'osversions', '$scope', '$anchorScroll', 'formUtils', 'toolsService', 'messageModel'];
 module.exports = FormISOController;
diff --git a/traffic_portal/app/src/index.html b/traffic_portal/app/src/index.html
index ebc373d..7d768a6 100644
--- a/traffic_portal/app/src/index.html
+++ b/traffic_portal/app/src/index.html
@@ -54,8 +54,7 @@ under the License.
         <script src="resources/assets/js/underscore-min_1.8.3.js"></script>
         <script src="resources/assets/js/jquery.dataTables.min_1.10.16.js"></script>
 
-        <script src="resources/assets/js/base64.js"></script>
-        <script src="resources/assets/js/base64js.min.js"></script>
+        <script src="https://cdnjs.cloudflare.com/ajax/libs/downloadjs/1.4.8/download.js"></script>
 
     </body>
 
diff --git a/traffic_portal/app/src/scripts/shared-libs.js b/traffic_portal/app/src/scripts/shared-libs.js
index 932704c..06c68f2 100644
--- a/traffic_portal/app/src/scripts/shared-libs.js
+++ b/traffic_portal/app/src/scripts/shared-libs.js
@@ -28,7 +28,6 @@ require('angular-resource');
 require('angular-route');
 require('angular-sanitize');
 require('angular-ui-router');
-require('angular-file-saver');
 
 // angular jwt
 require('angular-jwt');
@@ -57,4 +56,3 @@ require('jquery-flot-axislabels');
 // misc
 require('es5-shim');
 require('json3');
-require('js-base64');
\ No newline at end of file
diff --git a/traffic_portal/bower.json b/traffic_portal/bower.json
index 929a219..ec23260 100755
--- a/traffic_portal/bower.json
+++ b/traffic_portal/bower.json
@@ -18,7 +18,6 @@
         "font-awesome": "4.5.0",
         "jquery": "2.0.0",
         "json3": "3.3.2",
-        "restangular": "1.5.2",
-        "file-saver": "1.3.8"
+        "restangular": "1.5.2"
     }
 }
diff --git a/traffic_portal/grunt/browserify2.js b/traffic_portal/grunt/browserify2.js
index 4b10d50..2528df4 100644
--- a/traffic_portal/grunt/browserify2.js
+++ b/traffic_portal/grunt/browserify2.js
@@ -103,9 +103,7 @@ module.exports = {
                                 'es5-shim/es5-shim.js',
                                 'jquery/jquery.js',
                                 'json3/lib/json3.js',
-                                'restangular/dist/restangular.js',
-                                'angular-file-saver/dist/angular-file-saver.bundle.js',
-                                'js-base64/base64.js'
+                                'restangular/dist/restangular.js'
                             ]
                     },
                     {