summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel Vomacka <pvomacka@redhat.com>2016-06-17 10:05:52 +0200
committerPetr Vobornik <pvoborni@redhat.com>2016-06-29 16:46:12 +0200
commitaaf65e9c56c75d78d1c1f7dcefdb52dd3ddc419a (patch)
treecd504a867571506139e7485cbad46bb7a78adb28
parentf37c3af0db225538157f899d04a041af5addfa01 (diff)
downloadfreeipa-aaf65e9c56c75d78d1c1f7dcefdb52dd3ddc419a.tar.gz
freeipa-aaf65e9c56c75d78d1c1f7dcefdb52dd3ddc419a.tar.xz
freeipa-aaf65e9c56c75d78d1c1f7dcefdb52dd3ddc419a.zip
Add certificate widget to ID override user details page.
Add possibility to add, remove, view, get and download custom certificates on ID override user page. https://fedorahosted.org/freeipa/ticket/5926 Reviewed-By: Petr Vobornik <pvoborni@redhat.com>
-rw-r--r--install/ui/src/freeipa/idviews.js168
1 files changed, 167 insertions, 1 deletions
diff --git a/install/ui/src/freeipa/idviews.js b/install/ui/src/freeipa/idviews.js
index 823936401..19018631d 100644
--- a/install/ui/src/freeipa/idviews.js
+++ b/install/ui/src/freeipa/idviews.js
@@ -22,6 +22,7 @@
define([
'dojo/on',
'./ipa',
+ './builder',
'./jquery',
'./menu',
'./phases',
@@ -32,7 +33,8 @@ define([
'./facet',
'./search',
'./entity'],
- function(on, IPA, $, menu, phases, reg, rpc, text, mod_details, mod_facet) {
+ function(on, IPA, builder, $, menu, phases, reg, rpc, text,
+ mod_details, mod_facet) {
/**
* ID Views module
* @class
@@ -223,11 +225,18 @@ return {
source_facet: 'details',
dest_entity: 'idview',
dest_facet: 'idoverrideuser'
+ },
+ {
+ $factory: IPA.cert.cert_update_policy,
+ source_facet: 'details',
+ dest_entity: 'cert',
+ dest_facet: 'search'
}
],
containing_entity: 'idview',
facets: [
{
+ $factory: idviews.id_override_user_details_facet,
$type: 'details',
disable_breadcrumb: false,
containing_facet: 'idoverrideuser',
@@ -261,6 +270,11 @@ return {
$type: 'sshkeys',
name: 'ipasshpubkey',
label: '@i18n:objects.sshkeystore.keys'
+ },
+ {
+ $type: 'idviews_certs',
+ name: 'usercertificate',
+ label: '@i18n:objects.cert.certificates'
}
]
}
@@ -294,6 +308,10 @@ return {
'gecos',
'uidnumber',
'gidnumber',
+ {
+ $type: 'cert_textarea',
+ name: 'usercertificate'
+ },
'loginshell',
'homedirectory',
{
@@ -386,6 +404,149 @@ return {
/**
+ * Facet for User ID override, uses batch command to fetch certificates.
+ *
+ * @class
+ * @extends IPA.details_facet
+ */
+idviews.id_override_user_details_facet = function(spec) {
+
+ spec = spec || {};
+
+ var that = IPA.details_facet(spec);
+
+ that.certificate_updated = IPA.observer();
+
+ that.create_refresh_command = function() {
+
+ var user_command = that.details_facet_create_refresh_command();
+
+ var batch = rpc.batch_command({
+ name: that.entity.name + "_details_refresh"
+ });
+
+ batch.add_command(user_command);
+
+ var pkey = that.get_pkey();
+
+ var certs = rpc.command({
+ entity: 'cert',
+ method: 'find',
+ retry: false,
+ options: {
+ idoverrideuser: [ pkey ],
+ all: true
+ }
+ });
+
+ batch.add_command(certs);
+
+ return batch;
+ };
+
+ return that;
+};
+
+/**
+ * @extends IPA.cert.certs_widget
+ */
+idviews.idviews_certs_widget = function(spec) {
+
+ spec = spec || {};
+ spec.child_spec = {
+ $factory: idviews.idviews_cert_widget,
+ css_class: 'certificate-widget',
+ facet: spec.facet
+ };
+
+ var that = IPA.cert.certs_widget(spec);
+
+ /* Adds two args to add command - special nested entities. */
+ that.create_add_args = function() {
+ return that.facet.get_pkeys();
+ };
+
+ /* Adds two args to remove command - special nested entities. */
+ that.create_remove_args = function() {
+ return that.facet.get_pkeys();
+ };
+
+ return that;
+};
+
+/**
+ * This widget uses cert_find instead of cert_show, because cert_show does not
+ * support nested entities.
+ *
+ * @extends IPA.cert.cert_widget
+ */
+idviews.idviews_cert_widget = function(spec) {
+
+ spec = spec || {};
+
+ var that = IPA.cert.cert_widget(spec);
+
+ that.adapter = builder.build('adapter', spec.adapter || 'object_adapter', {});
+
+ that.fetch_certificate_data = function(cert) {
+ var result = {};
+ var adapter = that.adapter;
+
+ if (!cert) return;
+
+ var command = rpc.command({
+ entity: 'cert',
+ method: 'find',
+ options: {
+ certificate: cert,
+ all: true
+ },
+ hide_activity_icon: true,
+ on_success: function(data) {
+ var normalized_data = adapter.load(data);
+ that.certificate = $.extend(normalized_data[0], {});
+ that.update_displayed_data();
+ that.spinner.emit('hide-spinner');
+ },
+ on_error: function() {
+ that.update_displayed_data();
+ that.spinner.emit('hide-spinner');
+ }
+ }).execute();
+ };
+
+ that.update = function(values) {
+ that.spinner.emit('display-spinner');
+
+ var certificate = values[0];
+
+ that.fetch_certificate_data(certificate);
+ };
+
+ that.save = function() {
+ if (!that.certificate) return '';
+ return that.certificate.certificate;
+ };
+
+ return that;
+};
+
+idviews.cert_textarea_widget = function(spec) {
+ spec = spec || {};
+
+ var that = IPA.textarea_widget(spec);
+
+ that.save = function() {
+ var value = that.input.val();
+ var blob = IPA.cert.get_base64(value);
+
+ return [blob];
+ };
+
+ return that;
+};
+
+/**
* Facet for hosts which have current id view applied on
*
* @class idviews.appliedtohosts_facet
@@ -779,6 +940,8 @@ idviews.register = function() {
var e = reg.entity;
var f = reg.facet;
var a = reg.action;
+ var w = reg.widget;
+
e.register({type: 'idview', spec: idviews.spec});
e.register({type: 'idoverrideuser', spec: idviews.idoverrideuser_spec});
e.register({type: 'idoverridegroup', spec: idviews.idoverridegroup_spec});
@@ -790,6 +953,9 @@ idviews.register = function() {
a.register('idview_unapply', idviews.unapply_action);
a.register('idview_unapply_host', idviews.unapply_host_action);
a.register('idview_unapply_hostgroups', idviews.unapply_hostgroups_action);
+
+ w.register('idviews_certs', idviews.idviews_certs_widget);
+ w.register('cert_textarea', idviews.cert_textarea_widget);
};
phases.on('registration', idviews.register);