diff options
-rw-r--r-- | install/ui/dialog.js | 3 | ||||
-rw-r--r-- | install/ui/entitle.js | 211 | ||||
-rw-r--r-- | install/ui/entity.js | 16 | ||||
-rw-r--r-- | install/ui/ipa.css | 4 | ||||
-rw-r--r-- | install/ui/ipa.js | 15 | ||||
-rw-r--r-- | install/ui/test/data/entitle_get_unregistered.json | 11 | ||||
-rw-r--r-- | install/ui/test/data/entitle_register.json | 26 | ||||
-rw-r--r-- | install/ui/test/data/ipa_init.json | 401 | ||||
-rw-r--r-- | install/ui/widget.js | 3 | ||||
-rw-r--r-- | ipalib/plugins/baseldap.py | 22 |
10 files changed, 659 insertions, 53 deletions
diff --git a/install/ui/dialog.js b/install/ui/dialog.js index 964d5f5fc..08fba4580 100644 --- a/install/ui/dialog.js +++ b/install/ui/dialog.js @@ -105,6 +105,9 @@ IPA.dialog = function(spec) { }; that.init = function() { + + that.entity = IPA.get_entity(that.entity_name); + for (var i=0; i<that.fields.length; i++) { var field = that.fields[i]; field.entity_name = that.entity_name; diff --git a/install/ui/entitle.js b/install/ui/entitle.js index 47143347f..6c2c8727d 100644 --- a/install/ui/entitle.js +++ b/install/ui/entitle.js @@ -25,12 +25,18 @@ IPA.entitle = {}; +IPA.entitle.unregistered = 'unregistered'; +IPA.entitle.registered = 'registered'; + IPA.entity_factories.entitle = function() { var builder = IPA.entity_builder(); builder. - entity('entitle'). + entity({ + factory: IPA.entitle.entity, + name: 'entitle' + }). facet({ factory: IPA.entitle.search_facet, columns: [ @@ -50,21 +56,8 @@ IPA.entity_factories.entitle = function() { name: 'end', label: 'End' } - ], - search_all: true + ] }). - dialog({ - factory: IPA.entitle.consume_dialog, - name: 'consume', - title: 'Consume Entitlements', - fields: [ - { - name: 'quantity', - label: 'Quantity', - undo: false - } - ] - }). details_facet({ sections: [ { @@ -74,11 +67,101 @@ IPA.entity_factories.entitle = function() { } ] }). - standard_association_facets(); + standard_association_facets(). + dialog({ + factory: IPA.entitle.register_dialog, + name: 'register', + title: 'Register Entitlements', + fields: [ + { + name: 'username', + label: 'Username', + undo: false + }, + { + name: 'password', + label: IPA.get_method_param('entitle_register', 'password').label, + type: 'password', + undo: false + } + ] + }). + dialog({ + factory: IPA.entitle.consume_dialog, + name: 'consume', + title: 'Consume Entitlements', + fields: [ + { + name: 'quantity', + label: 'Quantity', + undo: false + } + ] + }); return builder.build(); }; +IPA.entitle.entity = function(spec) { + + spec = spec || {}; + + var that = IPA.entity(spec); + + that.get_certificates = function(on_success, on_error) { + + var command = IPA.command({ + name: 'entitle_get' + (that.status == IPA.entitle.registered ? '' : '_unregistered'), + entity: 'entitle', + method: 'get', + on_success: function(data, text_status, xhr) { + that.status = IPA.entitle.registered; + if (on_success) { + on_success.call(this, data, text_status, xhr); + } + }, + on_error: on_error, + retry: false + }); + + command.execute(); + }; + + that.register = function(username, password, on_success, on_error) { + + var command = IPA.command({ + entity: 'entitle', + method: 'register', + args: [ username ], + options: { password: password }, + on_success: function(data, text_status, xhr) { + that.status = IPA.entitle.registered; + if (on_success) { + on_success.call(this, data, text_status, xhr); + } + }, + on_error: on_error + }); + + command.execute(); + }; + + that.consume = function(quantity, on_success, on_error) { + + var command = IPA.command({ + entity: 'entitle', + method: 'consume', + args: [ quantity ], + on_success: on_success, + on_error: on_error + }); + + command.execute(); + }; + + return that; +}; + IPA.entitle.search_facet = function(spec) { spec = spec || {}; @@ -97,6 +180,12 @@ IPA.entitle.search_facet = function(spec) { $('<input/>', { type: 'button', + name: 'register', + value: 'Register' + }).appendTo(buttons); + + $('<input/>', { + type: 'button', name: 'consume', value: 'Consume' }).appendTo(buttons); @@ -108,15 +197,29 @@ IPA.entitle.search_facet = function(spec) { var action_panel = that.get_action_panel(); - var button = $('input[name=consume]', action_panel); + var button = $('input[name=register]', action_panel); + that.register_button = IPA.action_button({ + label: 'Register', + icon: 'ui-icon-plus', + click: function() { + var dialog = that.entity.get_dialog('register'); + dialog.open(that.container); + } + }); + that.register_button.css('display', 'none'); + button.replaceWith(that.register_button); + + button = $('input[name=consume]', action_panel); that.consume_button = IPA.action_button({ label: 'Consume', icon: 'ui-icon-plus', + style: 'display: none;', click: function() { - var dialog = that.get_dialog('consume'); + var dialog = that.entity.get_dialog('consume'); dialog.open(that.container); } }); + that.consume_button.css('display', 'none'); button.replaceWith(that.consume_button); }; @@ -124,6 +227,9 @@ IPA.entitle.search_facet = function(spec) { function on_success(data, text_status, xhr) { + that.register_button.css('display', 'none'); + that.consume_button.css('display', 'inline'); + that.table.empty(); var result = data.result.result; @@ -132,7 +238,7 @@ IPA.entitle.search_facet = function(spec) { that.table.add_record(record); } - var summary = $('span[name=summary]', that.table.tfoot); + var summary = $('span[name=summary]', that.table.tfoot).empty(); if (data.result.truncated) { var message = IPA.messages.search.truncated; message = message.replace('${counter}', data.result.count); @@ -143,28 +249,50 @@ IPA.entitle.search_facet = function(spec) { } function on_error(xhr, text_status, error_thrown) { + + that.register_button.css('display', 'inline'); + that.consume_button.css('display', 'none'); + var summary = $('span[name=summary]', that.table.tfoot).empty(); - summary.append('<p>Error: '+error_thrown.name+'</p>'); - summary.append('<p>'+error_thrown.title+'</p>'); - summary.append('<p>'+error_thrown.message+'</p>'); + summary.append(error_thrown.message); } - var command = IPA.command({ - entity: 'entitle', - method: 'get', - options: { - all: that.search_all - }, - on_success: on_success, - on_error: on_error - }); - - command.execute(); + that.entity.get_certificates( + on_success, + on_error); }; return that; }; +IPA.entitle.register_dialog = function(spec) { + + spec = spec || {}; + + var that = IPA.dialog(spec); + + that.add_button('Register', function() { + var record = {}; + that.save(record); + + that.entity.register( + record.username, + record.password, + function() { + var facet = that.entity.get_facet('search'); + facet.refresh(); + that.close(); + } + ); + }); + + that.add_button('Cancel', function() { + that.close(); + }); + + return that; +}; + IPA.entitle.consume_dialog = function(spec) { spec = spec || {}; @@ -175,19 +303,14 @@ IPA.entitle.consume_dialog = function(spec) { var record = {}; that.save(record); - var command = IPA.command({ - entity: 'entitle', - method: 'consume', - args: [ record.quantity ], - on_success: function() { - var entity = IPA.get_entity(that.entity_name); - var facet = entity.get_facet('search'); - facet.table.refresh(); + that.entity.consume( + record.quantity, + function() { + var facet = that.entity.get_facet('search'); + facet.refresh(); that.close(); } - }); - - command.execute(); + ); }); that.add_button('Cancel', function() { diff --git a/install/ui/entity.js b/install/ui/entity.js index 4db58465d..23f792d1e 100644 --- a/install/ui/entity.js +++ b/install/ui/entity.js @@ -64,6 +64,9 @@ IPA.facet = function (spec) { }; function init() { + + that.entity = IPA.get_entity(that.entity_name); + for (var i=0; i<that.dialogs.length; i++){ var dialog = that.dialogs[i]; dialog.entity_name = that._entity_name; @@ -220,7 +223,6 @@ IPA.entity = function (spec) { that.standard_associations = that.create_association_facets; - that.init = function() { if (!that.label) { @@ -576,8 +578,14 @@ IPA.entity_builder = function(){ } } - that.entity = function(name){ - entity = IPA.entity({name: name}); + that.entity = function(spec) { + if (spec instanceof Object){ + var factory = spec.factory || IPA.entity; + entity = factory(spec); + } else { + var name = spec; + entity = IPA.entity({name: name}); + } return that; }; @@ -588,7 +596,7 @@ IPA.entity_builder = function(){ } else { dialog = IPA.dialog(spec); } - facet.dialog(dialog); + entity.dialog(dialog); return that; }; diff --git a/install/ui/ipa.css b/install/ui/ipa.css index 20f5dd6c9..4fe040135 100644 --- a/install/ui/ipa.css +++ b/install/ui/ipa.css @@ -471,6 +471,10 @@ span.ui-icon-search { margin-left: 1em !important; } +[title="Register"] { + margin-left: 1em !important; +} + [title="Consume"] { margin-left: 1em !important; } diff --git a/install/ui/ipa.js b/install/ui/ipa.js index 7ffac51ad..a4fbec401 100644 --- a/install/ui/ipa.js +++ b/install/ui/ipa.js @@ -252,6 +252,8 @@ IPA.command = function(spec) { that.on_success = spec.on_success; that.on_error = spec.on_error; + that.retry = typeof spec.retry == 'undefined' ? true : spec.retry; + that.get_command = function() { return (that.entity ? that.entity+'_' : '') + that.method; }; @@ -352,14 +354,19 @@ IPA.command = function(spec) { if (!error_thrown.title) { error_thrown.title = 'AJAX Error: '+error_thrown.name; } - dialog_open.call(this, xhr, text_status, error_thrown); + + if (that.retry) { + dialog_open.call(this, xhr, text_status, error_thrown); + + } else if (that.on_error) { + that.on_error.call(this, xhr, text_status, error_thrown); + } } function success_handler(data, text_status, xhr) { - IPA.hide_activity_icon(); - if (!data) { + IPA.hide_activity_icon(); var error_thrown = { title: 'HTTP Error '+xhr.status, url: this.url, @@ -368,12 +375,14 @@ IPA.command = function(spec) { dialog_open.call(this, xhr, text_status, error_thrown); } else if (data.error) { + // error_handler() calls IPA.hide_activity_icon() error_handler.call(this, xhr, text_status, /* error_thrown */ { title: 'IPA Error '+data.error.code, message: data.error.message }); } else if (that.on_success) { + IPA.hide_activity_icon(); that.on_success.call(this, data, text_status, xhr); } } diff --git a/install/ui/test/data/entitle_get_unregistered.json b/install/ui/test/data/entitle_get_unregistered.json new file mode 100644 index 000000000..47dce1f18 --- /dev/null +++ b/install/ui/test/data/entitle_get_unregistered.json @@ -0,0 +1,11 @@ +{ + "error": { + "code": 4306, + "message": "Not registered yet", + "name": { + "__base64__": "Tm90UmVnaXN0ZXJlZEVycm9y" + } + }, + "id": 0, + "result": null +}
\ No newline at end of file diff --git a/install/ui/test/data/entitle_register.json b/install/ui/test/data/entitle_register.json new file mode 100644 index 000000000..8644801da --- /dev/null +++ b/install/ui/test/data/entitle_register.json @@ -0,0 +1,26 @@ +{ + "error": null, + "id": 0, + "result": { + "result": { + "dn": "ipaentitlementid=cf9d9755-7445-438c-a40c-23b1c60e1f9b,cn=entitlements,cn=etc,dc=idm,dc=lab,dc=bos,dc=redhat,dc=com", + "ipaentitlementid": [ + "cf9d9755-7445-438c-a40c-23b1c60e1f9b" + ], + "ipauniqueid": [ + "50afc3cc-649c-11e0-ab97-00163e2fe6de" + ], + "objectclass": [ + "ipaobject", + "ipaentitlement" + ], + "userpkcs12": [ + { + "__base64__": "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" + } + ] + }, + "summary": "Registered to entitlement server.", + "value": "" + } +}
\ No newline at end of file diff --git a/install/ui/test/data/ipa_init.json b/install/ui/test/data/ipa_init.json index 55e4c7094..48b80851a 100644 --- a/install/ui/test/data/ipa_init.json +++ b/install/ui/test/data/ipa_init.json @@ -693,6 +693,407 @@ "dnszone_show": { "__base64__": "" }, + "entitle_consume": { + "takes_args": [ + { + "alwaysask": false, + "attribute": false, + "autofill": false, + "class": "Int", + "cli_name": "quantity", + "cli_short_name": null, + "default": null, + "doc": "Quantity", + "exclude": null, + "flags": [], + "hint": null, + "include": null, + "label": "Quantity", + "maxvalue": 2147483647, + "minvalue": 1, + "multivalue": false, + "name": "quantity", + "primary_key": false, + "query": false, + "required": true, + "type": "int" + } + ], + "takes_options": [ + { + "alwaysask": false, + "attribute": false, + "autofill": true, + "class": "Int", + "cli_name": "hidden", + "cli_short_name": null, + "default": 1, + "doc": "Quantity", + "exclude": null, + "flags": [ + "no_option", + "no_output" + ], + "hint": null, + "include": null, + "label": "Quantity", + "maxvalue": 2147483647, + "minvalue": 1, + "multivalue": false, + "name": "hidden", + "primary_key": false, + "query": false, + "required": true, + "type": "int" + } + ] + }, + "entitle_find": { + "takes_options": [ + { + "alwaysask": false, + "attribute": false, + "autofill": false, + "class": "Int", + "cli_name": "timelimit", + "cli_short_name": null, + "default": null, + "doc": "Time limit of search in seconds", + "exclude": null, + "flags": [ + "no_display" + ], + "hint": null, + "include": null, + "label": "Time Limit", + "maxvalue": 2147483647, + "minvalue": 0, + "multivalue": false, + "name": "timelimit", + "primary_key": false, + "query": false, + "required": false, + "type": "int" + }, + { + "alwaysask": false, + "attribute": false, + "autofill": false, + "class": "Int", + "cli_name": "sizelimit", + "cli_short_name": null, + "default": null, + "doc": "Maximum number of entries returned", + "exclude": null, + "flags": [ + "no_display" + ], + "hint": null, + "include": null, + "label": "Size Limit", + "maxvalue": 2147483647, + "minvalue": 0, + "multivalue": false, + "name": "sizelimit", + "primary_key": false, + "query": false, + "required": false, + "type": "int" + } + ] + }, + "entitle_import": { + "takes_args": [ + { + "alwaysask": false, + "attribute": false, + "autofill": false, + "class": "File", + "cli_name": "certificate_file", + "cli_short_name": null, + "default": null, + "doc": "<usercertificate>", + "exclude": null, + "flags": [], + "hint": null, + "include": null, + "label": "<usercertificate>", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": true, + "name": "usercertificate", + "pattern": null, + "pattern_errmsg": null, + "primary_key": false, + "query": false, + "required": false, + "stdin_if_missing": false, + "type": "unicode" + } + ], + "takes_options": [ + { + "alwaysask": false, + "attribute": false, + "autofill": false, + "class": "Str", + "cli_name": "addattr", + "cli_short_name": null, + "default": null, + "doc": "Add an attribute/value pair. Format is attr=value. The attribute must be part of the schema.", + "exclude": [ + "webui" + ], + "flags": [], + "hint": null, + "include": null, + "label": "<addattr>", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": true, + "name": "addattr", + "pattern": null, + "pattern_errmsg": null, + "primary_key": false, + "query": false, + "required": false, + "type": "unicode" + }, + { + "alwaysask": false, + "attribute": false, + "autofill": false, + "class": "Str", + "cli_name": "setattr", + "cli_short_name": null, + "default": null, + "doc": "Set an attribute to a name/value pair. Format is attr=value.\nFor multi-valued attributes, the command replaces the values already present.", + "exclude": [ + "webui" + ], + "flags": [], + "hint": null, + "include": null, + "label": "<setattr>", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": true, + "name": "setattr", + "pattern": null, + "pattern_errmsg": null, + "primary_key": false, + "query": false, + "required": false, + "type": "unicode" + }, + { + "alwaysask": false, + "attribute": false, + "autofill": true, + "class": "Str", + "cli_name": "uuid", + "cli_short_name": null, + "default": "IMPORTED", + "doc": "Enrollment UUID", + "exclude": null, + "flags": [ + "no_update", + "no_create" + ], + "hint": null, + "include": null, + "label": "UUID", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": false, + "name": "uuid", + "pattern": null, + "pattern_errmsg": null, + "primary_key": false, + "query": false, + "required": false, + "type": "unicode" + } + ] + }, + "entitle_register": { + "takes_args": [ + { + "alwaysask": false, + "attribute": false, + "autofill": false, + "class": "Str", + "cli_name": "username", + "cli_short_name": null, + "default": null, + "doc": "Username", + "exclude": null, + "flags": [], + "hint": null, + "include": null, + "label": "Username", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": false, + "name": "username", + "pattern": null, + "pattern_errmsg": null, + "primary_key": false, + "query": false, + "required": true, + "type": "unicode" + } + ], + "takes_options": [ + { + "alwaysask": false, + "attribute": false, + "autofill": false, + "class": "Str", + "cli_name": "addattr", + "cli_short_name": null, + "default": null, + "doc": "Add an attribute/value pair. Format is attr=value. The attribute must be part of the schema.", + "exclude": [ + "webui" + ], + "flags": [], + "hint": null, + "include": null, + "label": "<addattr>", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": true, + "name": "addattr", + "pattern": null, + "pattern_errmsg": null, + "primary_key": false, + "query": false, + "required": false, + "type": "unicode" + }, + { + "alwaysask": false, + "attribute": false, + "autofill": false, + "class": "Str", + "cli_name": "setattr", + "cli_short_name": null, + "default": null, + "doc": "Set an attribute to a name/value pair. Format is attr=value.\nFor multi-valued attributes, the command replaces the values already present.", + "exclude": [ + "webui" + ], + "flags": [], + "hint": null, + "include": null, + "label": "<setattr>", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": true, + "name": "setattr", + "pattern": null, + "pattern_errmsg": null, + "primary_key": false, + "query": false, + "required": false, + "type": "unicode" + }, + { + "alwaysask": false, + "attribute": false, + "autofill": false, + "class": "Str", + "cli_name": "ipaentitlementid", + "cli_short_name": null, + "default": null, + "doc": "Enrollment UUID", + "exclude": null, + "flags": [ + "no_update", + "no_create" + ], + "hint": null, + "include": null, + "label": "UUID", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": false, + "name": "ipaentitlementid", + "pattern": null, + "pattern_errmsg": null, + "primary_key": false, + "query": false, + "required": false, + "type": "unicode" + }, + { + "alwaysask": false, + "attribute": false, + "autofill": false, + "class": "Password", + "cli_name": "password", + "cli_short_name": null, + "default": null, + "doc": "Registration password", + "exclude": null, + "flags": [], + "hint": null, + "include": null, + "label": "Password", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": false, + "name": "password", + "pattern": null, + "pattern_errmsg": null, + "primary_key": false, + "query": false, + "required": true, + "type": "unicode" + } + ] + }, + "entitle_sync": { + "takes_args": [], + "takes_options": [ + { + "alwaysask": false, + "attribute": false, + "autofill": true, + "class": "Int", + "cli_name": "hidden", + "cli_short_name": null, + "default": 1, + "doc": "Quantity", + "exclude": null, + "flags": [ + "no_option", + "no_output" + ], + "hint": null, + "include": null, + "label": "Quantity", + "maxvalue": 2147483647, + "minvalue": 1, + "multivalue": false, + "name": "hidden", + "primary_key": false, + "query": false, + "required": true, + "type": "int" + } + ] + }, "group_add": { "takes_options": [ { diff --git a/install/ui/widget.js b/install/ui/widget.js index fa102737c..744e6ed4a 100644 --- a/install/ui/widget.js +++ b/install/ui/widget.js @@ -282,6 +282,7 @@ IPA.text_widget = function(spec) { var that = IPA.widget(spec); that.size = spec.size || 30; + that.type = spec.type || 'text'; that.create = function(container) { @@ -291,7 +292,7 @@ IPA.text_widget = function(spec) { }).appendTo(container); $('<input/>', { - type: 'text', + type: that.type, name: that.name, disabled: that.disabled, size: that.size, diff --git a/ipalib/plugins/baseldap.py b/ipalib/plugins/baseldap.py index 0dcb89039..7090acc69 100644 --- a/ipalib/plugins/baseldap.py +++ b/ipalib/plugins/baseldap.py @@ -633,7 +633,7 @@ class LDAPCreate(CallbackInterface, crud.Create): # list of attributes we want exported to JSON json_friendly_attributes = ( - 'takes_options', + 'takes_args', 'takes_options', ) def __json__(self): @@ -655,6 +655,16 @@ class LDAPQuery(CallbackInterface, crud.PKQuery): for arg in super(crud.PKQuery, self).get_args(): yield arg + # list of attributes we want exported to JSON + json_friendly_attributes = ( + 'takes_args', 'takes_options', + ) + + def __json__(self): + json_dict = dict( + (a, getattr(self, a)) for a in self.json_friendly_attributes + ) + return json_dict class LDAPMultiQuery(LDAPQuery): """ @@ -1445,6 +1455,16 @@ class LDAPSearch(CallbackInterface, crud.Search): def exc_callback(self, args, options, exc, call_func, *call_args, **call_kwargs): raise exc + # list of attributes we want exported to JSON + json_friendly_attributes = ( + 'takes_options', + ) + + def __json__(self): + json_dict = dict( + (a, getattr(self, a)) for a in self.json_friendly_attributes + ) + return json_dict class LDAPModReverseMember(LDAPQuery): """ |