Add show certification action to cluster panel

This patch adds show certification action as item action
to cluster table view and details view.

Change-Id: Iafb316152a1a16e6a056ea490adfc682fa68f5c9
Partial-Implements: blueprint cluster-certificates
This commit is contained in:
Shu Muto 2016-09-02 17:52:29 +09:00
parent da0c4c8406
commit f07baab8e0
3 changed files with 91 additions and 1 deletions

View File

@ -30,6 +30,7 @@
'horizon.framework.util.i18n.gettext', 'horizon.framework.util.i18n.gettext',
'horizon.dashboard.container-infra.clusters.create.service', 'horizon.dashboard.container-infra.clusters.create.service',
'horizon.dashboard.container-infra.clusters.delete.service', 'horizon.dashboard.container-infra.clusters.delete.service',
'horizon.dashboard.container-infra.clusters.show-certificate.service',
'horizon.dashboard.container-infra.clusters.resourceType', 'horizon.dashboard.container-infra.clusters.resourceType',
]; ];
@ -38,6 +39,7 @@
gettext, gettext,
createClusterService, createClusterService,
deleteClusterService, deleteClusterService,
showCertificateService,
resourceType) resourceType)
{ {
var clusterResourceType = registry.getResourceType(resourceType); var clusterResourceType = registry.getResourceType(resourceType);
@ -49,6 +51,13 @@
type: 'delete', type: 'delete',
text: gettext('Delete Cluster') text: gettext('Delete Cluster')
} }
})
.append({
id: 'showCertificateAction',
service: showCertificateService,
template: {
text: gettext('Show Certificate')
}
}); });
clusterResourceType.batchActions clusterResourceType.batchActions

View File

@ -0,0 +1,60 @@
/**
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
(function() {
'use strict';
/**
* @ngdoc overview
* @name horizon.dashboard.container-infra.clusters.show-certificate.service
* @description Service for the container-infra cluster show certificate modal
*/
angular
.module('horizon.dashboard.container-infra.clusters')
.factory('horizon.dashboard.container-infra.clusters.show-certificate.service', showCertificateService);
showCertificateService.$inject = [
'horizon.framework.util.q.extensions',
'horizon.app.core.openstack-service-api.magnum'
];
function showCertificateService(
$qExtensions, magnum
) {
var service = {
initScope: initScope,
perform: perform,
allowed: allowed
};
return service;
//////////////
function initScope($scope) {
}
function perform(selected) {
// get certificate
return magnum.showCertificate(selected.id).success(function(response) {
magnum.downloadTextAsFile(response.pem, selected.name + "_ca.pem");
});
}
function allowed() {
return $qExtensions.booleanAsPromise(true);
}
}
})();

View File

@ -21,12 +21,13 @@
.factory('horizon.app.core.openstack-service-api.magnum', MagnumAPI); .factory('horizon.app.core.openstack-service-api.magnum', MagnumAPI);
MagnumAPI.$inject = [ MagnumAPI.$inject = [
'$timeout',
'horizon.framework.util.http.service', 'horizon.framework.util.http.service',
'horizon.framework.widgets.toast.service', 'horizon.framework.widgets.toast.service',
'horizon.framework.util.i18n.gettext' 'horizon.framework.util.i18n.gettext'
]; ];
function MagnumAPI(apiService, toastService, gettext) { function MagnumAPI($timeout, apiService, toastService, gettext) {
var service = { var service = {
createCluster: createCluster, createCluster: createCluster,
getCluster: getCluster, getCluster: getCluster,
@ -40,6 +41,7 @@
deleteClusterTemplates: deleteClusterTemplates, deleteClusterTemplates: deleteClusterTemplates,
showCertificate: showCertificate, showCertificate: showCertificate,
signCertificate: signCertificate, signCertificate: signCertificate,
downloadTextAsFile: downloadTextAsFile,
}; };
return service; return service;
@ -143,5 +145,24 @@
toastService.add('error', gettext('Unable to retrieve the certificate.')); toastService.add('error', gettext('Unable to retrieve the certificate.'));
}); });
} }
function downloadTextAsFile(text, filename){
// create text file as object url
var blob = new Blob([ text ], { "type" : "text/plain" });
window.URL = window.URL || window.webkitURL;
var fileurl = window.URL.createObjectURL(blob);
// provide text as downloaded file
$timeout(function() {
//Update view
var a = angular.element('<a></a>');
a.attr("href", fileurl);
a.attr("download", filename);
a.attr("target", "_blank");
angular.element(document.body).append(a);
a[0].click();
a.remove();
}, 0);
}
} }
}()); }());