keycloak-aplcache

Fixes to JS sdk

3/24/2014 11:09:27 AM

Details

diff --git a/integration/js/src/main/resources/META-INF/resources/js/keycloak.js b/integration/js/src/main/resources/META-INF/resources/js/keycloak.js
index 11da6c8..f233228 100755
--- a/integration/js/src/main/resources/META-INF/resources/js/keycloak.js
+++ b/integration/js/src/main/resources/META-INF/resources/js/keycloak.js
@@ -21,7 +21,9 @@ var Keycloak = function (config) {
         initPromise.promise.success(function() {
             kc.onReady && kc.onReady(kc.authenticated);
             promise.setSuccess(kc.authenticated);
-        }).error(promise.error);
+        }).error(function() {
+            promise.setError();
+        });
 
         var configPromise = loadConfig(config);
 
@@ -65,6 +67,9 @@ var Keycloak = function (config) {
         }
 
         configPromise.success(processInit);
+        configPromise.error(function() {
+            promise.setError();
+        });
 
         return promise.promise;
     }
@@ -76,11 +81,21 @@ var Keycloak = function (config) {
     kc.createLoginUrl = function(options) {
         var state = createUUID();
 
+        var redirectUri = adapter.redirectUri(options);
+        if (options && options.prompt) {
+            if (redirectUri.indexOf('?') == -1) {
+                redirectUri += '?prompt=' + options.prompt;
+            } else {
+                redirectUri += '&prompt=' + options.prompt;
+            }
+        }
+
         sessionStorage.oauthState = state;
+
         var url = getRealmUrl()
             + '/tokens/login'
             + '?client_id=' + encodeURIComponent(kc.clientId)
-            + '&redirect_uri=' + encodeURIComponent(adapter.redirectUri(options))
+            + '&redirect_uri=' + encodeURIComponent(redirectUri)
             + '&state=' + encodeURIComponent(state)
             + '&response_type=code';
 
@@ -258,6 +273,8 @@ var Keycloak = function (config) {
             if (prompt != 'none') {
                 kc.onAuthError && kc.onAuthError();
                 promise && promise.setError();
+            } else {
+                promise && promise.setSuccess();
             }
         }
     }
@@ -497,17 +514,29 @@ var Keycloak = function (config) {
 
                     var loginUrl = kc.createLoginUrl(options);
                     var ref = window.open(loginUrl, '_blank', o);
+
+                    var callback;
+                    var error;
+
                     ref.addEventListener('loadstart', function(event) {
                         if (event.url.indexOf('http://localhost') == 0) {
-                            var callback = parseCallback(event.url);
+                            callback = parseCallback(event.url);
+                            ref.close();
+                        }
+                    });
+
+                    ref.addEventListener('loaderror', function(event) {
+                        if (event.url.indexOf('http://localhost') != 0) {
+                            error = true;
                             ref.close();
-                            processCallback(callback);
+                        }
+                    });
 
-                            if (callback.code) {
-                                promise.setSuccess();
-                            } else {
-                                promise.setError();
-                            }
+                    ref.addEventListener('exit', function(event) {
+                        if (error || !callback) {
+                            promise.setError();
+                        } else {
+                            processCallback(callback, promise);
                         }
                     });
 
@@ -519,9 +548,26 @@ var Keycloak = function (config) {
 
                     var logoutUrl = kc.createLogoutUrl(options);
                     var ref = window.open(logoutUrl, '_blank', 'location=no,hidden=yes');
+
+                    var error;
+
                     ref.addEventListener('loadstart', function(event) {
                         if (event.url.indexOf('http://localhost') == 0) {
                             ref.close();
+                        }
+                    });
+
+                    ref.addEventListener('loaderror', function(event) {
+                        if (event.url.indexOf('http://localhost') != 0) {
+                            error = true;
+                            ref.close();
+                        }
+                    });
+
+                    ref.addEventListener('exit', function(event) {
+                        if (error) {
+                            promise.setError();
+                        } else {
                             clearToken();
                             promise.setSuccess();
                         }
@@ -577,4 +623,4 @@ var Keycloak = function (config) {
         "country", 
         "claims_locales"
     ]
-}
\ No newline at end of file
+}