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

--
Endi S. Dewata
From dbe61f4469252dc834696c3e56d9381353d40aac Mon Sep 17 00:00:00 2001
From: Endi S. Dewata <edew...@redhat.com>
Date: Wed, 3 Aug 2011 15:26:54 -0500
Subject: [PATCH] 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
---
 install/ui/host.js |    3 +-
 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 743196b08fdcfd9d7c91d92a5f9eba6048b498b2..3ffcba34be0ea571b4349e7deaa6a3cd0234f00a 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 d53ee7b126a7d5e103013675620dc973aa9f8a0a..8a3dd4e7d596914687e412aefdda27d7d699261d 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();
 
-- 
1.7.5.1

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to