diff options
author | Endi S. Dewata <edewata@redhat.com> | 2011-08-03 15:26:54 -0500 |
---|---|---|
committer | Endi S. Dewata <edewata@redhat.com> | 2011-08-09 14:04:06 +0000 |
commit | c5ce14c83ac6c00f2db9d1b43273c25b8282c873 (patch) | |
tree | 972e72890e3c503b1de719ff3e0f28d13a8d5a69 /install | |
parent | 8edd7ed99874f114ec6ca6abbbdd4b91025211df (diff) | |
download | freeipa-c5ce14c83ac6c00f2db9d1b43273c25b8282c873.tar.gz freeipa-c5ce14c83ac6c00f2db9d1b43273c25b8282c873.tar.xz freeipa-c5ce14c83ac6c00f2db9d1b43273c25b8282c873.zip |
Fixed error after login on IE
The IE does not resend the request body during negotiation, so after
after a successful authentication the server could not find the JSON
request to parse.
The Web UI has been modified to detect this error and resend the
initialization request.
Ticket #1540
Diffstat (limited to 'install')
-rw-r--r-- | install/ui/host.js | 3 | ||||
-rw-r--r-- | install/ui/ipa.js | 74 |
2 files changed, 63 insertions, 14 deletions
diff --git a/install/ui/host.js b/install/ui/host.js index 743196b08..3ffcba34b 100644 --- a/install/ui/host.js +++ b/install/ui/host.js @@ -138,6 +138,7 @@ IPA.host_adder_dialog = function(spec) that.on_error = function(xhr, text_status, error_thrown) { + var ajax = this; var command = that.command; var data = error_thrown.data; var dialog = null; @@ -152,7 +153,7 @@ IPA.host_adder_dialog = function(spec) fqdn: that.get_field('fqdn').save() } }; - command.on_success(data, text_status, xhr); + command.on_success.call(ajax, data, text_status, xhr); } }); } else { diff --git a/install/ui/ipa.js b/install/ui/ipa.js index d53ee7b12..8a3dd4e7d 100644 --- a/install/ui/ipa.js +++ b/install/ui/ipa.js @@ -70,8 +70,35 @@ var IPA = ( function () { var batch = IPA.batch_command({ name: 'ipa_init', + retry: false, on_success: on_success, - on_error: on_error + on_error: function(xhr, text_status, error_thrown) { + + // On IE the request is missing after authentication, + // so the request needs to be resent. + if (error_thrown.name == 'IPA Error 909') { + batch.execute(); + + } else { + var ajax = this; + + var dialog = IPA.error_dialog({ + xhr: xhr, + text_status: text_status, + error_thrown: error_thrown, + command: batch + }); + + dialog.on_cancel = function() { + dialog.close(); + if (on_error) { + on_error.call(ajax, xhr, text_status, error_thrown); + } + }; + + dialog.open(); + } + } }); batch.add_command(IPA.command({ @@ -243,12 +270,23 @@ IPA.command = function(spec) { that.execute = function() { function dialog_open(xhr, text_status, error_thrown) { + + var ajax = this; + var dialog = IPA.error_dialog({ xhr: xhr, text_status: text_status, error_thrown: error_thrown, command: that }); + + dialog.on_cancel = function() { + dialog.close(); + if (that.on_error) { + that.on_error.call(ajax, xhr, text_status, error_thrown); + } + }; + dialog.open(); } @@ -399,6 +437,7 @@ IPA.batch_command = function (spec) { method: that.method, args: that.args, options: that.options, + retry: that.retry, on_success: function(data, text_status, xhr) { for (var i=0; i<that.commands.length; i++) { @@ -406,8 +445,10 @@ IPA.batch_command = function (spec) { var result = data.result.results[i]; if (!result) { - if (command.on_error) command.on_error( - xhr, text_status, + if (command.on_error) command.on_error.call( + this, + xhr, + text_status, { name: 'Internal Error '+xhr.status, message: result ? xhr.statusText : "Internal error" @@ -415,7 +456,8 @@ IPA.batch_command = function (spec) { ); } else if (result.error) { - if (command.on_error) command.on_error( + if (command.on_error) command.on_error.call( + this, xhr, text_status, { @@ -425,15 +467,15 @@ IPA.batch_command = function (spec) { ); } else { - if (command.on_success) command.on_success(result, text_status, xhr); + if (command.on_success) command.on_success.call(this, result, text_status, xhr); } } - if (that.on_success) that.on_success(data, text_status, xhr); + if (that.on_success) that.on_success.call(this, data, text_status, xhr); }, on_error: function(xhr, text_status, error_thrown) { // TODO: undefined behavior if (that.on_error) { - that.on_error(xhr, text_status, error_thrown); + that.on_error.call(this, xhr, text_status, error_thrown); } } }).execute(); @@ -571,6 +613,7 @@ IPA.dirty_dialog = function(spec) { }; IPA.error_dialog = function(spec) { + var that = IPA.dialog(spec); var init = function() { @@ -605,19 +648,24 @@ IPA.error_dialog = function(spec) { var label = IPA.messages.buttons ? IPA.messages.buttons.retry : 'Retry'; that.add_button(label, function() { - that.close(); - that.command.execute(); + that.on_retry(); }); label = IPA.messages.buttons ? IPA.messages.buttons.cancel : 'Cancel'; that.add_button(label, function() { - that.close(); - if (that.command.retry && that.command.on_error) { - that.command.on_error(that.xhr, that.text_status, that.error_thrown); - } + that.on_cancel(); }); }; + that.on_retry = function() { + that.close(); + that.command.execute(); + }; + + that.on_cancel = function() { + that.close(); + }; + init(); that.create_buttons(); |