From 325bbf5bbf39da43e590b2dee2044683aaec3a66 Mon Sep 17 00:00:00 2001 From: Petr Vobornik Date: Mon, 28 Jul 2014 10:27:36 +0200 Subject: webui: add token from user page Add 'Add OTP Token' action to user action menu. This option is disabled in self-service when viewing other users. https://fedorahosted.org/freeipa/ticket/4402 Reviewed-By: Endi Sukma Dewata --- install/ui/src/freeipa/user.js | 61 ++++++++++++++++++++++++++++++++++++-- install/ui/test/data/ipa_init.json | 1 + ipalib/plugins/internal.py | 1 + 3 files changed, 60 insertions(+), 3 deletions(-) diff --git a/install/ui/src/freeipa/user.js b/install/ui/src/freeipa/user.js index b595d0667..9872df26b 100644 --- a/install/ui/src/freeipa/user.js +++ b/install/ui/src/freeipa/user.js @@ -269,7 +269,7 @@ return { } ], actions: [ - 'select', + 'add_otptoken', 'enable', 'disable', 'delete', @@ -288,7 +288,7 @@ return { label: '@i18n:actions.automember_rebuild' } ], - header_actions: ['reset_password', 'enable', 'disable', 'delete', 'unlock', 'automember_rebuild'], + header_actions: ['reset_password', 'enable', 'disable', 'delete', 'unlock', 'add_otptoken', 'automember_rebuild'], state: { evaluators: [ { @@ -302,7 +302,8 @@ return { name: 'reset_password_acl_evaluator', adapter: { $type: 'batch', result_index: 0 }, attribute: 'userpassword' - } + }, + IPA.user.self_service_other_user_evaluator ], summary_conditions: [ IPA.enabled_summary_cond, @@ -608,6 +609,59 @@ IPA.user.reset_password_action = function(spec) { return that; }; + +IPA.user.add_otptoken_action = function(spec) { + + spec = spec || {}; + spec.name = spec.name || 'add_otptoken'; + spec.label = spec.label || '@i18n:objects.otptoken.add_token'; + spec.disable_cond = spec.disable_cond || ['self-service-other']; + + var that = IPA.action(spec); + + that.execute_action = function(facet) { + + var otp_e = reg.entity.get('otptoken'); + var dialog = otp_e.get_dialog('add'); + dialog.open(); + if (!IPA.is_selfservice) { + var owner = facet.get_pkey(); + dialog.get_field('ipatokenowner').set_value([owner]); + } + }; + + return that; +}; + +IPA.user.self_service_other_user_evaluator = function(spec) { + + spec = spec || {}; + spec.event = spec.event || 'post_load'; + + var that = IPA.state_evaluator(spec); + that.name = spec.name || 'self_service_other_user_evaluator'; + that.param = spec.param || 'uid'; + that.adapter = builder.build('adapter', spec.adapter || 'adapter', { context: that }); + + /** + * Evaluates if user is in self-service and viewing himself + */ + that.on_event = function(data) { + + var old_state = that.state; + that.state = []; + + var value = that.adapter.load(data); + if (IPA.is_selfservice && IPA.whoami.uid[0] !== value[0]) { + that.state.push('self-service-other'); + } + + that.notify_on_change(old_state); + }; + + return that; +}; + exp.entity_spec = make_spec(); exp.register = function() { var e = reg.entity; @@ -615,6 +669,7 @@ exp.register = function() { var d = reg.dialog; e.register({type: 'user', spec: exp.entity_spec}); a.register('reset_password', IPA.user.reset_password_action); + a.register('add_otptoken', IPA.user.add_otptoken_action); d.copy('password', 'user_password', { factory: IPA.user.password_dialog, pre_ops: [IPA.user.password_dialog_pre_op] diff --git a/install/ui/test/data/ipa_init.json b/install/ui/test/data/ipa_init.json index 6d1cfc54c..857f8ee3f 100644 --- a/install/ui/test/data/ipa_init.json +++ b/install/ui/test/data/ipa_init.json @@ -376,6 +376,7 @@ "users": "Users" }, "otptoken": { + "add_token": "Add OTP Token", "details": "OTP Token Settings", "disable": "Disable token", "enable": "Enable token", diff --git a/ipalib/plugins/internal.py b/ipalib/plugins/internal.py index 6f110f10c..e4ebac066 100644 --- a/ipalib/plugins/internal.py +++ b/ipalib/plugins/internal.py @@ -520,6 +520,7 @@ class i18n_messages(Command): "users": _("Users"), }, "otptoken": { + "add_token": _("Add OTP Token"), "details": _("OTP Token Settings"), "disable": _("Disable token"), "enable": _("Enable token"), -- cgit