summaryrefslogtreecommitdiffstats
path: root/install
diff options
context:
space:
mode:
authorPetr Vobornik <pvoborni@redhat.com>2015-04-22 14:57:26 +0200
committerPetr Vobornik <pvoborni@redhat.com>2015-05-20 14:04:10 +0200
commit14525598f97f57d165682247ef7f5cf63f810be5 (patch)
tree1e94f0b7077ee5a0031a6e5bb5776fd45e3deb80 /install
parentbf7ee6eeecd71ffeb4740a440fd237a6fac4793f (diff)
downloadfreeipa-14525598f97f57d165682247ef7f5cf63f810be5.tar.gz
freeipa-14525598f97f57d165682247ef7f5cf63f810be5.tar.xz
freeipa-14525598f97f57d165682247ef7f5cf63f810be5.zip
webui: stageuser plugin
Reviewed-By: David Kupka <dkupka@redhat.com> Reviewed-By: Thierry Bordaz <tbordaz@redhat.com>
Diffstat (limited to 'install')
-rw-r--r--install/ui/doc/categories.json1
-rw-r--r--install/ui/src/freeipa/app.js1
-rw-r--r--install/ui/src/freeipa/navigation/menu_spec.js17
-rw-r--r--install/ui/src/freeipa/stageuser.js351
-rw-r--r--install/ui/src/freeipa/user.js17
-rw-r--r--install/ui/test/data/ipa_init.json10
6 files changed, 395 insertions, 2 deletions
diff --git a/install/ui/doc/categories.json b/install/ui/doc/categories.json
index c84077682..9de673593 100644
--- a/install/ui/doc/categories.json
+++ b/install/ui/doc/categories.json
@@ -250,6 +250,7 @@
"idviews",
"otptoken",
"radiusproxy",
+ "stageuser",
"user",
"plugins.load",
"plugins.login",
diff --git a/install/ui/src/freeipa/app.js b/install/ui/src/freeipa/app.js
index 46752fa09..140fe938f 100644
--- a/install/ui/src/freeipa/app.js
+++ b/install/ui/src/freeipa/app.js
@@ -48,6 +48,7 @@ define([
'./sudo',
'./trust',
'./user',
+ './stageuser',
'dojo/domReady!'
],function(app_container) {
return app_container;
diff --git a/install/ui/src/freeipa/navigation/menu_spec.js b/install/ui/src/freeipa/navigation/menu_spec.js
index ca1a290f4..13f533d1a 100644
--- a/install/ui/src/freeipa/navigation/menu_spec.js
+++ b/install/ui/src/freeipa/navigation/menu_spec.js
@@ -36,7 +36,22 @@ var nav = {};
name: 'identity',
label: '@i18n:tabs.identity',
children: [
- { entity: 'user' },
+ {
+ entity: 'user',
+ facet: 'search',
+ children: [
+ {
+ entity: 'stageuser',
+ facet: 'search',
+ hidden: true
+ },
+ {
+ entity: 'user',
+ facet: 'search_preserved',
+ hidden: true
+ }
+ ]
+ },
{ entity: 'group' },
{ entity: 'host' },
{ entity: 'hostgroup' },
diff --git a/install/ui/src/freeipa/stageuser.js b/install/ui/src/freeipa/stageuser.js
new file mode 100644
index 000000000..cfec12bcc
--- /dev/null
+++ b/install/ui/src/freeipa/stageuser.js
@@ -0,0 +1,351 @@
+//
+// Copyright (C) 2015 FreeIPA Contributors see COPYING for license
+//
+
+define([
+ 'dojo/on',
+ './ipa',
+ './jquery',
+ './menu',
+ './phases',
+ './reg',
+ './rpc',
+ './text',
+ './details',
+ './facet',
+ './user',
+ './search',
+ './entity'],
+ function(
+ on, IPA, $, menu, phases, reg, rpc, text, mod_details, mod_facet, mod_user) {
+/**
+ * Stage user module
+ * @class
+ * @singleton
+ */
+var stageuser = IPA.stageuser = {
+
+ search_facet_group: {
+ name: 'search',
+ label: '@i18n:objects.stageuser.user_categories',
+ facets: {
+ search_normal: 'user_search',
+ search: 'stageuser_search',
+ search_preserved: 'user_search_preserved'
+ }
+ }
+};
+
+var make_stageuser_spec = function() {
+return {
+ name: 'stageuser',
+ facet_groups: ['settings'],
+ facets: [
+ {
+ $type: 'search',
+ disable_facet_tabs: false,
+ tabs_in_sidebar: true,
+ tab_label: '@i18n:objects.stageuser.label',
+ facet_groups: [stageuser.search_facet_group],
+ facet_group: 'search',
+ columns: [
+ 'uid',
+ 'givenname',
+ 'sn',
+ 'uidnumber',
+ 'mail',
+ 'telephonenumber',
+ 'title'
+ ],
+ actions: [
+ {
+ $type: 'batch_activate'
+ }
+ ],
+ control_buttons: [
+ {
+ name: 'activate',
+ label: '@i18n:buttons.activate',
+ icon: 'fa-check'
+ }
+ ]
+ },
+ {
+ $type: 'details',
+ disable_facet_tabs: true,
+ sections: [
+ {
+ name: 'identity',
+ label: '@i18n:details.identity',
+ fields: [
+ 'title',
+ 'givenname',
+ 'sn',
+ 'cn',
+ 'displayname',
+ 'initials',
+ 'gecos',
+ {
+ name: 'userclass',
+ flags: ['w_if_no_aci']
+ }
+ ]
+ },
+ {
+ name: 'account',
+ label: '@i18n:objects.user.account',
+ fields: [
+ 'uid',
+ {
+ $factory: mod_user.password_widget,
+ name: 'has_password',
+ metadata: '@mo-param:user:userpassword'
+ },
+ {
+ $type: 'datetime',
+ name: 'krbpasswordexpiration',
+ label: '@i18n:objects.user.krbpasswordexpiration',
+ read_only: true
+ },
+ {
+ name: 'uidnumber',
+ minvalue: -1
+ },
+ {
+ name: 'gidnumber',
+ minvalue: -1
+ },
+ 'krbprincipalname',
+ {
+ $type: 'datetime',
+ name: 'krbprincipalexpiration'
+ },
+ 'loginshell',
+ 'homedirectory',
+ {
+ $type: 'sshkeys',
+ name: 'ipasshpubkey',
+ label: '@i18n:objects.sshkeystore.keys'
+ },
+ {
+ $type: 'checkboxes',
+ name: 'ipauserauthtype',
+ flags: ['w_if_no_aci'],
+ options: [
+ { label: '@i18n:authtype.type_password', value: 'password' },
+ { label: '@i18n:authtype.type_radius', value: 'radius' },
+ { label: '@i18n:authtype.type_otp', value: 'otp' }
+ ],
+ tooltip: '@i18n:authtype.user_tooltip'
+ },
+ {
+ $type: 'entity_select',
+ name: 'ipatokenradiusconfiglink',
+ flags: ['w_if_no_aci'],
+ other_entity: 'radiusproxy',
+ other_field: 'cn'
+ },
+ {
+ name: 'ipatokenradiususername',
+ flags: ['w_if_no_aci']
+ }
+ ]
+ },
+ {
+ name: 'contact',
+ label: '@i18n:objects.user.contact',
+ fields: [
+ { $type: 'multivalued', name: 'mail' },
+ { $type: 'multivalued', name: 'telephonenumber' },
+ { $type: 'multivalued', name: 'pager' },
+ { $type: 'multivalued', name: 'mobile' },
+ { $type: 'multivalued', name: 'facsimiletelephonenumber' }
+ ]
+ },
+ {
+ name: 'mailing',
+ label: '@i18n:objects.user.mailing',
+ fields: ['street', 'l', 'st', 'postalcode']
+ },
+ {
+ name: 'employee',
+ label: '@i18n:objects.user.employee',
+ fields: [
+ 'ou',
+ {
+ $type: 'entity_select',
+ name: 'manager',
+ other_entity: 'user',
+ other_field: 'uid'
+ },
+ { $type: 'multivalued', name: 'departmentnumber' },
+ 'employeenumber',
+ 'employeetype',
+ 'preferredlanguage'
+ ]
+ },
+ {
+ name: 'misc',
+ label: '@i18n:objects.user.misc',
+ fields: [
+ { $type: 'multivalued', name: 'carlicense' }
+ ]
+ }
+ ],
+ actions: [
+ 'delete'
+ ],
+ header_actions: ['delete'],
+ state: {
+ evaluators: [
+ {
+ $factory: IPA.enable_state_evaluator,
+ field: 'nsaccountlock',
+ adapter: { $type: 'batch', result_index: 0 },
+ invert_value: true
+ },
+ {
+ $factory: IPA.acl_state_evaluator,
+ 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,
+ IPA.disabled_summary_cond
+ ]
+ }
+ }
+ ],
+ adder_dialog: {
+ sections: [
+ {
+ fields: [
+ {
+ name: 'uid',
+ required: false
+ },
+ 'givenname',
+ 'sn',
+ 'userclass'
+ ]
+ },
+ {
+ fields: [
+ {
+ name: 'userpassword',
+ label: '@i18n:password.new_password',
+ $type: 'password'
+ },
+ {
+ name: 'userpassword2',
+ label: '@i18n:password.verify_password',
+ $type: 'password',
+ flags: ['no_command'],
+ validators: [{
+ $type: 'same_password',
+ other_field: 'userpassword'
+ }]
+ }
+ ]
+ }
+ ]
+ }
+};};
+
+stageuser.search_preserved_facet_spec = {
+ $type: 'search',
+ $pre_ops: [
+ { $del: [[ 'control_buttons', [{ name: 'add'}, { name: 'delete'}] ]] }
+ ],
+ disable_facet_tabs: false,
+ tabs_in_sidebar: true,
+ entity: 'user',
+ managed_entity: 'user',
+ name: 'search_preserved',
+ label: '@i18n:objects.stageuser.preserved_label',
+ tab_label: '@i18n:objects.stageuser.preserved_label',
+ facet_groups: [stageuser.search_facet_group],
+ facet_group: 'search',
+ command_options: {
+ 'preserved': true
+ },
+ columns: [
+ 'uid',
+ 'givenname',
+ 'sn',
+ 'uidnumber',
+ 'mail',
+ 'telephonenumber',
+ 'title'
+ ],
+ actions: [
+ {
+ $type: 'batch_undel'
+ }
+ ],
+ control_buttons: [
+ {
+ name: 'undel',
+ label: '@i18n:buttons.restore',
+ icon: 'fa-heart'
+ }
+ ]
+};
+
+stageuser.batch_activate_action = function(spec) {
+
+ spec = spec || {};
+
+ spec.name = spec.name || 'activate';
+ spec.method = spec.method || 'activate';
+ spec.needs_confirm = spec.needs_confirm === undefined ? true : spec.needs_confirm;
+ spec.enabled = spec.enabled === undefined ? false : spec.enabled;
+ spec.enable_cond = spec.enable_cond || ['item-selected'];
+ spec.success_msg = spec.success_msg || '@i18n:objects.stageuser.activate_success';
+ spec.confirm_msg = spec.confirm_msg || '@i18n:objects.stageuser.activate_confirm';
+
+ return IPA.batch_items_action(spec);
+};
+
+stageuser.batch_undel_action = function(spec) {
+
+ spec = spec || {};
+
+ spec.name = spec.name || 'undel';
+ spec.method = spec.method || 'undel';
+ spec.needs_confirm = spec.needs_confirm === undefined ? true : spec.needs_confirm;
+ spec.enabled = spec.enabled === undefined ? false : spec.enabled;
+ spec.enable_cond = spec.enable_cond || ['item-selected'];
+ spec.success_msg = spec.success_msg || '@i18n:objects.stageuser.undel_success';
+ spec.confirm_msg = spec.confirm_msg || '@i18n:objects.stageuser.undel_confirm';
+
+ return IPA.batch_items_action(spec);
+};
+
+/**
+ * Stage user entity specification object
+ * @member stageuser
+ */
+stageuser.stageuser_spec = make_stageuser_spec();
+
+/**
+ * Register entity
+ * @member stageuser
+ */
+stageuser.register = function() {
+ var a = reg.action;
+ var e = reg.entity;
+ var f = reg.facet;
+ a.register('batch_activate', stageuser.batch_activate_action);
+ a.register('batch_undel', stageuser.batch_undel_action);
+ e.register({type: 'stageuser', spec: stageuser.stageuser_spec});
+ f.register_from_spec('user_search_preserved', stageuser.search_preserved_facet_spec);
+};
+
+phases.on('registration', stageuser.register);
+
+return stageuser;
+});
diff --git a/install/ui/src/freeipa/user.js b/install/ui/src/freeipa/user.js
index 72d295020..787e95f8f 100644
--- a/install/ui/src/freeipa/user.js
+++ b/install/ui/src/freeipa/user.js
@@ -43,7 +43,17 @@ define([
* @alternateClassName IPA.user
* @singleton
*/
-var exp = IPA.user = {};
+var exp = IPA.user = {
+ search_facet_group: {
+ name: 'search',
+ label: '@i18n:objects.stageuser.user_categories',
+ facets: {
+ search_normal: 'user_search',
+ search: 'stageuser_search',
+ search_preserved: 'user_search_preserved'
+ }
+ }
+};
var make_spec = function() {
return {
@@ -51,6 +61,11 @@ return {
facets: [
{
$type: 'search',
+ label: '@i18n:objects.user.activeuser_label',
+ tab_label: '@i18n:objects.user.activeuser_label',
+ disable_facet_tabs: false,
+ tabs_in_sidebar: true,
+ facet_groups: [exp.search_facet_group],
row_disabled_attribute: 'nsaccountlock',
columns: [
'uid',
diff --git a/install/ui/test/data/ipa_init.json b/install/ui/test/data/ipa_init.json
index f969a874f..b17bf777f 100644
--- a/install/ui/test/data/ipa_init.json
+++ b/install/ui/test/data/ipa_init.json
@@ -508,6 +508,15 @@
"status_new_ns": "New: key not set",
"status_new_s": "New: key set"
},
+ "stageuser": {
+ "activate_confirm": "Are you sure you want to activate selected users?",
+ "activate_success": "${count} user(s) activated",
+ "label": "Stage users",
+ "preserved_label": "Preserved users",
+ "undel_confirm": "Are you sure you want to restore selected users?",
+ "undel_success": "${count} user(s) restored",
+ "user_categories": "User categories",
+ },
"sudocmd": {
"groups": "Groups"
},
@@ -556,6 +565,7 @@
"user": {
"account": "Account Settings",
"account_status": "Account Status",
+ "activeuser_label": "Active users",
"contact": "Contact Settings",
"employee": "Employee Information",
"error_changing_status": "Error changing account status",