diff options
author | Endi S. Dewata <edewata@redhat.com> | 2011-04-11 20:22:38 -0500 |
---|---|---|
committer | Adam Young <ayoung@redhat.com> | 2011-04-18 11:11:57 -0400 |
commit | 8f9ddb058f922fbd33c4d15986eeb1f5be521cc5 (patch) | |
tree | bcdf559fcc10caa18195142f70986bf47a317e65 | |
parent | 740416c8fbe436a584e93f4c6486feca2e077f24 (diff) | |
download | freeipa-8f9ddb058f922fbd33c4d15986eeb1f5be521cc5.tar.gz freeipa-8f9ddb058f922fbd33c4d15986eeb1f5be521cc5.tar.xz freeipa-8f9ddb058f922fbd33c4d15986eeb1f5be521cc5.zip |
Entitlement import.
The entitlement facet will invoke entitle_status to check the entitlement
status and show the appropriate buttons. If it's unregistered it will show
Register and Import button. If it's registered it will show the Consume
button only. If it's imported it will show the Import button only. The
Import button will open a dialog box for importing entitlement certificate.
Ticket #277
-rw-r--r-- | install/ui/entitle.js | 278 | ||||
-rw-r--r-- | install/ui/ipa.css | 4 | ||||
-rw-r--r-- | install/ui/test/data/entitle_import.json | 12 | ||||
-rw-r--r-- | install/ui/test/data/entitle_status_offline.json | 12 | ||||
-rw-r--r-- | install/ui/test/data/entitle_status_online.json | 12 | ||||
-rw-r--r-- | install/ui/test/data/entitle_status_unregistered.json (renamed from install/ui/test/data/entitle_get_unregistered.json) | 2 |
6 files changed, 292 insertions, 28 deletions
diff --git a/install/ui/entitle.js b/install/ui/entitle.js index 6c2c8727d..4c9cd13c6 100644 --- a/install/ui/entitle.js +++ b/install/ui/entitle.js @@ -26,7 +26,8 @@ IPA.entitle = {}; IPA.entitle.unregistered = 'unregistered'; -IPA.entitle.registered = 'registered'; +IPA.entitle.online = 'online'; +IPA.entitle.offline = 'offline'; IPA.entity_factories.entitle = function() { @@ -69,9 +70,9 @@ IPA.entity_factories.entitle = function() { }). standard_association_facets(). dialog({ - factory: IPA.entitle.register_dialog, - name: 'register', - title: 'Register Entitlements', + factory: IPA.entitle.register_online_dialog, + name: 'online_registration', + title: 'Registration', fields: [ { name: 'username', @@ -87,9 +88,23 @@ IPA.entity_factories.entitle = function() { ] }). dialog({ + factory: IPA.entitle.register_offline_dialog, + name: 'offline_registration', + title: 'Import Certificate', + message: 'Enter the Base64-encoded entitlement certificate below:', + label: 'Import', + fields: [ + { + name: 'certificate', + label: 'Certificate', + undo: false + } + ] + }). + dialog({ factory: IPA.entitle.consume_dialog, name: 'consume', - title: 'Consume Entitlements', + title: 'Consume Entitlement', fields: [ { name: 'quantity', @@ -97,6 +112,20 @@ IPA.entity_factories.entitle = function() { undo: false } ] + }). + dialog({ + factory: IPA.entitle.import_dialog, + name: 'import', + title: 'Import Certificate', + message: 'Enter the Base64-encoded entitlement certificate below:', + label: 'Import', + fields: [ + { + name: 'certificate', + label: 'Certificate', + undo: false + } + ] }); return builder.build(); @@ -108,18 +137,44 @@ IPA.entitle.entity = function(spec) { var that = IPA.entity(spec); - that.get_certificates = function(on_success, on_error) { + that.status = IPA.entitle.unregistered; + + that.get_status = function(on_success, on_error) { var command = IPA.command({ - name: 'entitle_get' + (that.status == IPA.entitle.registered ? '' : '_unregistered'), + name: 'entitle_status_'+that.status, entity: 'entitle', - method: 'get', + method: 'status', on_success: function(data, text_status, xhr) { - that.status = IPA.entitle.registered; + if (data.result.result.uuid == 'IMPORTED') { + that.status = IPA.entitle.offline; + } else { + that.status = IPA.entitle.online; + } + if (on_success) { on_success.call(this, data, text_status, xhr); } }, + on_error: function(xhr, text_status, error_thrown) { + that.status = IPA.entitle.unregistered; + + if (on_error) { + on_error.call(this, xhr, text_status, error_thrown); + } + }, + retry: false + }); + + command.execute(); + }; + + that.get_certificates = function(on_success, on_error) { + + var command = IPA.command({ + entity: 'entitle', + method: 'get', + on_success: on_success, on_error: on_error, retry: false }); @@ -127,7 +182,7 @@ IPA.entitle.entity = function(spec) { command.execute(); }; - that.register = function(username, password, on_success, on_error) { + that.register_online = function(username, password, on_success, on_error) { var command = IPA.command({ entity: 'entitle', @@ -135,7 +190,25 @@ IPA.entitle.entity = function(spec) { args: [ username ], options: { password: password }, on_success: function(data, text_status, xhr) { - that.status = IPA.entitle.registered; + that.status = IPA.entitle.online; + if (on_success) { + on_success.call(this, data, text_status, xhr); + } + }, + on_error: on_error + }); + + command.execute(); + }; + + that.register_offline = function(certificate, on_success, on_error) { + + var command = IPA.command({ + entity: 'entitle', + method: 'import', + args: [ certificate ], + on_success: function(data, text_status, xhr) { + that.status = IPA.entitle.offline; if (on_success) { on_success.call(this, data, text_status, xhr); } @@ -159,6 +232,19 @@ IPA.entitle.entity = function(spec) { command.execute(); }; + that.import_certificate = function(certificate, on_success, on_error) { + + var command = IPA.command({ + entity: 'entitle', + method: 'import', + args: [ certificate ], + on_success: on_success, + on_error: on_error + }); + + command.execute(); + }; + return that; }; @@ -178,17 +264,37 @@ IPA.entitle.search_facet = function(spec) { 'class': 'search-buttons' }).appendTo(li); + that.register_buttons = $('<span/>', { + style: 'display: none;' + }).appendTo(buttons); + $('<input/>', { type: 'button', - name: 'register', + name: 'register_online', value: 'Register' + }).appendTo(that.register_buttons); + + $('<input/>', { + type: 'button', + name: 'register_offline', + value: 'Import' + }).appendTo(that.register_buttons); + + that.consume_buttons = $('<span/>', { + style: 'display: none;' }).appendTo(buttons); $('<input/>', { type: 'button', name: 'consume', value: 'Consume' - }).appendTo(buttons); + }).appendTo(that.consume_buttons); + + $('<input/>', { + type: 'button', + name: 'import', + value: 'Import' + }).appendTo(that.consume_buttons); }; that.setup = function(container) { @@ -197,17 +303,27 @@ IPA.entitle.search_facet = function(spec) { var action_panel = that.get_action_panel(); - var button = $('input[name=register]', action_panel); - that.register_button = IPA.action_button({ + var button = $('input[name=register_online]', action_panel); + that.register_online_button = IPA.action_button({ label: 'Register', icon: 'ui-icon-plus', click: function() { - var dialog = that.entity.get_dialog('register'); + var dialog = that.entity.get_dialog('online_registration'); dialog.open(that.container); } }); - that.register_button.css('display', 'none'); - button.replaceWith(that.register_button); + button.replaceWith(that.register_online_button); + + button = $('input[name=register_offline]', action_panel); + that.register_offline_button = IPA.action_button({ + label: 'Import', + icon: 'ui-icon-plus', + click: function() { + var dialog = that.entity.get_dialog('offline_registration'); + dialog.open(that.container); + } + }); + button.replaceWith(that.register_offline_button); button = $('input[name=consume]', action_panel); that.consume_button = IPA.action_button({ @@ -219,16 +335,35 @@ IPA.entitle.search_facet = function(spec) { dialog.open(that.container); } }); - that.consume_button.css('display', 'none'); button.replaceWith(that.consume_button); + + button = $('input[name=import]', action_panel); + that.import_button = IPA.action_button({ + label: 'Import', + icon: 'ui-icon-plus', + style: 'display: none;', + click: function() { + var dialog = that.entity.get_dialog('import'); + dialog.open(that.container); + } + }); + button.replaceWith(that.import_button); }; that.refresh = function() { function on_success(data, text_status, xhr) { - that.register_button.css('display', 'none'); - that.consume_button.css('display', 'inline'); + that.register_buttons.css('display', 'none'); + that.consume_buttons.css('display', 'inline'); + + if (that.entity.status == IPA.entitle.online) { + that.consume_button.css('display', 'inline'); + that.import_button.css('display', 'none'); + } else { + that.consume_button.css('display', 'none'); + that.import_button.css('display', 'inlnie'); + } that.table.empty(); @@ -250,22 +385,63 @@ 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'); + that.register_buttons.css('display', 'inline'); + that.consume_buttons.css('display', 'none'); var summary = $('span[name=summary]', that.table.tfoot).empty(); summary.append(error_thrown.message); } - that.entity.get_certificates( - on_success, + that.entity.get_status( + function(data, text_status, xhr) { + that.entity.get_certificates( + on_success, + on_error); + }, on_error); }; return that; }; -IPA.entitle.register_dialog = function(spec) { +IPA.entitle.certificate_dialog = function(spec) { + + spec = spec || {}; + + var that = IPA.dialog(spec); + + that.width = spec.width || 500; + that.height = spec.height || 400; + that.message = spec.message; + that.label = spec.label; + + that.get_certificate = function() { + var certificate = that.textarea.val(); + return IPA.cert.BEGIN_CERTIFICATE+'\n'+ + $.trim(certificate)+'\n'+ + IPA.cert.END_CERTIFICATE+'\n'; + }; + + that.create = function() { + that.container.append(that.message); + that.container.append('<br/>'); + that.container.append('<br/>'); + + that.container.append(IPA.cert.BEGIN_CERTIFICATE); + that.container.append('<br/>'); + + that.textarea = $('<textarea/>', { + style: 'width: 100%; height: 225px;' + }).appendTo(that.container); + + that.container.append('<br/>'); + that.container.append(IPA.cert.END_CERTIFICATE); + }; + + return that; +}; + +IPA.entitle.register_online_dialog = function(spec) { spec = spec || {}; @@ -275,7 +451,7 @@ IPA.entitle.register_dialog = function(spec) { var record = {}; that.save(record); - that.entity.register( + that.entity.register_online( record.username, record.password, function() { @@ -293,6 +469,30 @@ IPA.entitle.register_dialog = function(spec) { return that; }; +IPA.entitle.register_offline_dialog = function(spec) { + + spec = spec || {}; + + var that = IPA.entitle.certificate_dialog(spec); + + that.add_button(that.label, function() { + that.entity.register_offline( + that.get_certificate(), + function() { + var facet = that.entity.get_facet('search'); + facet.refresh(); + that.close(); + } + ); + }); + + that.add_button(IPA.messages.buttons.cancel, function() { + that.close(); + }); + + return that; +}; + IPA.entitle.consume_dialog = function(spec) { spec = spec || {}; @@ -319,3 +519,27 @@ IPA.entitle.consume_dialog = function(spec) { return that; }; + +IPA.entitle.import_dialog = function(spec) { + + spec = spec || {}; + + var that = IPA.entitle.certificate_dialog(spec); + + that.add_button(that.label, function() { + that.entity.import_certificate( + that.get_certificate(), + function() { + var facet = that.entity.get_facet('search'); + facet.refresh(); + that.close(); + } + ); + }); + + that.add_button(IPA.messages.buttons.cancel, function() { + that.close(); + }); + + return that; +};
\ No newline at end of file diff --git a/install/ui/ipa.css b/install/ui/ipa.css index 4fe040135..2b205e927 100644 --- a/install/ui/ipa.css +++ b/install/ui/ipa.css @@ -479,6 +479,10 @@ span.ui-icon-search { margin-left: 1em !important; } +[title="Import"] { + margin-left: 1em !important; +} + [title="mail"] { margin-top: 0em !important; } diff --git a/install/ui/test/data/entitle_import.json b/install/ui/test/data/entitle_import.json new file mode 100644 index 000000000..f6dc905b3 --- /dev/null +++ b/install/ui/test/data/entitle_import.json @@ -0,0 +1,12 @@ +{ + "error": null, + "id": null, + "result": { + "result": { + "consumed": 1, + "product": "Multiplier Product Client Pack (50)", + "quantity": 1, + "uuid": "IMPORTED" + } + } +} diff --git a/install/ui/test/data/entitle_status_offline.json b/install/ui/test/data/entitle_status_offline.json new file mode 100644 index 000000000..44fe79e14 --- /dev/null +++ b/install/ui/test/data/entitle_status_offline.json @@ -0,0 +1,12 @@ +{ + "error": null, + "id": 0, + "result": { + "result": { + "consumed": 2, + "product": "MKT-multiplier-client-50", + "quantity": 250, + "uuid": "IMPORTED" + } + } +} diff --git a/install/ui/test/data/entitle_status_online.json b/install/ui/test/data/entitle_status_online.json new file mode 100644 index 000000000..1cfdfe647 --- /dev/null +++ b/install/ui/test/data/entitle_status_online.json @@ -0,0 +1,12 @@ +{ + "error": null, + "id": 0, + "result": { + "result": { + "consumed": 2, + "product": "MKT-multiplier-client-50", + "quantity": 250, + "uuid": "a3865364-33cc-4ce3-b000-0f08498cc085" + } + } +} diff --git a/install/ui/test/data/entitle_get_unregistered.json b/install/ui/test/data/entitle_status_unregistered.json index 47dce1f18..8a691ada2 100644 --- a/install/ui/test/data/entitle_get_unregistered.json +++ b/install/ui/test/data/entitle_status_unregistered.json @@ -8,4 +8,4 @@ }, "id": 0, "result": null -}
\ No newline at end of file +} |