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:43 UTC
[trafficcontrol] 04/08: WIP - TP stream ISO
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 1bba6972c9fa80ab92c704e0e382fbe5740e2d11
Author: Jesse Rivas <je...@comcast.com>
AuthorDate: Tue Jun 26 12:46:50 2018 -0600
WIP - TP stream ISO
---
traffic_ops/app/lib/API/Iso.pm | 12 ++++++---
.../common/modules/form/iso/FormISOController.js | 31 +++++++++++++++++++---
.../src/common/modules/form/iso/form.iso.tpl.html | 11 ++++++++
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 ++-
traffic_portal/package.json | 4 +++
8 files changed, 60 insertions(+), 10 deletions(-)
diff --git a/traffic_ops/app/lib/API/Iso.pm b/traffic_ops/app/lib/API/Iso.pm
index b16d966..6487043 100644
--- a/traffic_ops/app/lib/API/Iso.pm
+++ b/traffic_ops/app/lib/API/Iso.pm
@@ -30,6 +30,8 @@ use Common::ReturnCodes qw(SUCCESS ERROR);
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";
@@ -238,7 +240,8 @@ 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("/", $config->{'to'}{'base_url'}, $iso_dir, $iso_file_name);
+ my $iso_url = join("/", "https://" + hostfqdn(), $iso_dir, $iso_file_name);
$response = {
isoName => $iso_file_name,
@@ -246,12 +249,13 @@ sub generate_iso {
};
}
else {
- $self->res->headers->content_type("application/download");
+ $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 );
+ #$self->render( data => $data );
+ my $encodedIso = encode_base64($data);
$response = {
- iso => $data,
+ iso => $encodedIso,
name => $iso_file_name,
};
}
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 382ddf8..9af70d6 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) {
+var FormISOController = function(servers, osversions, $scope, $anchorScroll, formUtils, toolsService, messageModel, FileSaver, Blob) {
$scope.servers = servers;
@@ -31,7 +31,8 @@ var FormISOController = function(servers, osversions, $scope, $anchorScroll, for
];
$scope.iso = {
- dhcp: 'no'
+ dhcp: 'no',
+ stream: 'no'
};
$scope.isDHCP = function() {
@@ -50,7 +51,23 @@ var FormISOController = function(servers, osversions, $scope, $anchorScroll, for
toolsService.generateISO(iso)
.then(function(result) {
$anchorScroll(); // scrolls window to top
- messageModel.setMessages([ { level: 'success', text: 'ISO created at ' + result.isoURL } ], false);
+ 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);
+ }
});
};
@@ -58,7 +75,13 @@ 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'];
+FormISOController.$inject = ['servers', 'osversions', '$scope', '$anchorScroll', 'formUtils', 'toolsService', 'messageModel', 'FileSaver', 'Blob'];
module.exports = FormISOController;
diff --git a/traffic_portal/app/src/common/modules/form/iso/form.iso.tpl.html b/traffic_portal/app/src/common/modules/form/iso/form.iso.tpl.html
index 015325e..5b15ea6 100644
--- a/traffic_portal/app/src/common/modules/form/iso/form.iso.tpl.html
+++ b/traffic_portal/app/src/common/modules/form/iso/form.iso.tpl.html
@@ -189,6 +189,17 @@ under the License.
<span ng-show="hasError(isoForm.mgmtInterface)" class="form-control-feedback"><i class="fa fa-times"></i></span>
</div>
</div>
+
+ <div class="form-group" ng-class="{'has-error': hasError(isoForm.stream), 'has-feedback': hasError(isoForm.stream)}">
+ <label class="control-label col-md-2 col-sm-2 col-xs-12">Stream ISO *</label>
+ <div class="col-md-10 col-sm-10 col-xs-12">
+ <select name="stream" class="form-control" ng-model="iso.stream" ng-options="x.value as x.label for x in falseTrue" required>
+ <option value="">Select...</option>
+ </select>
+ <small class="input-error" ng-show="hasPropertyError(isoForm.stream, 'required')">Required</small>
+ </div>
+ </div>
+
<div class="modal-footer">
<button type="button" class="btn btn-success" ng-disabled="isoForm.$pristine || isoForm.$invalid" ng-click="generate(iso)">Generate ISO</button>
</div>
diff --git a/traffic_portal/app/src/index.html b/traffic_portal/app/src/index.html
index fc5363b..ebc373d 100644
--- a/traffic_portal/app/src/index.html
+++ b/traffic_portal/app/src/index.html
@@ -54,6 +54,9 @@ 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>
+
</body>
</html>
diff --git a/traffic_portal/app/src/scripts/shared-libs.js b/traffic_portal/app/src/scripts/shared-libs.js
index 06c68f2..932704c 100644
--- a/traffic_portal/app/src/scripts/shared-libs.js
+++ b/traffic_portal/app/src/scripts/shared-libs.js
@@ -28,6 +28,7 @@ require('angular-resource');
require('angular-route');
require('angular-sanitize');
require('angular-ui-router');
+require('angular-file-saver');
// angular jwt
require('angular-jwt');
@@ -56,3 +57,4 @@ 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 ec23260..929a219 100755
--- a/traffic_portal/bower.json
+++ b/traffic_portal/bower.json
@@ -18,6 +18,7 @@
"font-awesome": "4.5.0",
"jquery": "2.0.0",
"json3": "3.3.2",
- "restangular": "1.5.2"
+ "restangular": "1.5.2",
+ "file-saver": "1.3.8"
}
}
diff --git a/traffic_portal/grunt/browserify2.js b/traffic_portal/grunt/browserify2.js
index 2528df4..4b10d50 100644
--- a/traffic_portal/grunt/browserify2.js
+++ b/traffic_portal/grunt/browserify2.js
@@ -103,7 +103,9 @@ module.exports = {
'es5-shim/es5-shim.js',
'jquery/jquery.js',
'json3/lib/json3.js',
- 'restangular/dist/restangular.js'
+ 'restangular/dist/restangular.js',
+ 'angular-file-saver/dist/angular-file-saver.bundle.js',
+ 'js-base64/base64.js'
]
},
{
diff --git a/traffic_portal/package.json b/traffic_portal/package.json
index 6f51e0e..d2038de 100755
--- a/traffic_portal/package.json
+++ b/traffic_portal/package.json
@@ -33,5 +33,9 @@
},
"engines": {
"node": "0.11.14"
+ },
+ "dependencies": {
+ "base64-js": "^1.3.0",
+ "js-base64": "^2.4.5"
}
}