Passkey support: show the passkey in webui

Display the passkey value for user or stageuser
in the user details page
Allow addition/removal of a passkey

Related: https://pagure.io/freeipa/issue/9261
Signed-off-by: Florence Blanc-Renaud <flo@redhat.com>
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
This commit is contained in:
Florence Blanc-Renaud
2023-01-06 10:06:27 +01:00
parent 6f0da62f5a
commit c58e483095
5 changed files with 128 additions and 0 deletions

View File

@@ -1449,6 +1449,34 @@ field.certmap_command_multivalued_field = function(spec) {
};
/**
* Used along with custom_command_multivalued widget
*
* - by default has `w_if_no_aci` to workaround missing object class
* - by default has always_writable=true to workaround aci rights
*
* @class
* @alternateClassName IPA.custom_command_multivalued_field
* @extends IPA.field
*/
field.passkey_command_multivalued_field = function(spec) {
spec = spec || {};
spec.flags = spec.flags || ['w_if_no_aci'];
var that = IPA.field(spec);
/**
* Set field always writable in case that it is set to true
* @param Boolean always_writable
*/
that.always_writable = spec.always_writable === undefined ? true :
spec.always_writable;
return that;
};
IPA.custom_command_multivalued_field = field.custom_command_multivalued_field;
/**
@@ -1929,6 +1957,7 @@ field.register = function() {
f.register('field', field.field);
f.register('link', field.field);
f.register('multivalued', field.field);
f.register('passkey_multivalued', field.passkey_command_multivalued_field);
f.register('password', field.field);
f.register('radio', field.radio_field);
f.register('select', field.field);

View File

@@ -150,6 +150,18 @@ return {
name: 'ipasshpubkey',
label: '@i18n:objects.sshkeystore.keys'
},
{
$type: 'passkey_multivalued',
name: 'ipapasskey',
item_name: 'passkey',
child_spec: {
$type: 'non_editable_row',
data_name: 'passkey'
},
tooltip: {
title: '@mc:user_add_passkey.doc'
}
},
{
$type: 'certmap_multivalued',
name: 'ipacertmapdata',

View File

@@ -208,6 +208,18 @@ return {
name: 'ipasshpubkey',
label: '@i18n:objects.sshkeystore.keys'
},
{
$type: 'passkey_multivalued',
name: 'ipapasskey',
item_name: 'passkey',
child_spec: {
$type: 'non_editable_row',
data_name: 'passkey'
},
tooltip: {
title: '@mc:user_add_passkey.doc'
}
},
{
$type: 'certs',
name: 'usercertificate',

View File

@@ -6341,6 +6341,72 @@ exp.widget_builder = IPA.widget_builder = function(spec) {
return that;
};
/**
* Multivalued widget which is used for working with user's certmap.
*
* @class
* @extends IPA.custom_command_multivalued_widget
*/
IPA.passkey_multivalued_widget = function (spec) {
spec = spec || {};
spec.child_spec = spec.child_spec || {};
spec.child_spec.data_name = spec.child_spec.data_name || 'passkey';
spec.adder_dialog_spec = spec.adder_dialog_spec || {
title: '@i18n:objects.passkey.adder_title',
fields: [
{
$type: 'textarea',
name: 'passkey',
label: '@i18n:objects.passkey.data_label',
required: true,
rows: 10
}
]
};
var that = IPA.custom_command_multivalued_widget(spec);
that.create_remove_dialog_title = function(row) {
return text.get('@i18n:objects.passkey.deleter_title');
};
that.create_remove_dialog_message = function(row) {
var message = text.get('@i18n:objects.passkey.deleter_content');
message = message.replace('${passkey}', row.widget.new_value);
return message;
};
that.create_remove_args = function(row) {
var pkey = that.facet.get_pkey();
var passkey = row.widget.new_value;
passkey = [ passkey ];
var args = [
pkey,
passkey
];
return args;
};
that.create_add_args = function(row) {
var pkey = that.facet.get_pkey();
var passkey = that.adder_dialog.get_field('passkey').value;
var args = [
pkey,
passkey
];
return args;
};
return that;
};
/**
* SSH keys widget
*
@@ -7211,6 +7277,9 @@ exp.register = function() {
IPA.krb_principal_multivalued_widget);
w.register('krb_principal',
IPA.krb_principal_widget);
w.register('passkey_multivalued',
IPA.passkey_multivalued_widget);
w.register('passkey', IPA.passkey_widget);
w.register('password', IPA.password_widget);
w.register('radio', IPA.radio_widget);
w.register('select', IPA.select_widget);