keycloak-aplcache

Details

diff --git a/integration/js/src/main/resources/keycloak.js b/integration/js/src/main/resources/keycloak.js
index aa4d297..1b0813b 100755
--- a/integration/js/src/main/resources/keycloak.js
+++ b/integration/js/src/main/resources/keycloak.js
@@ -50,50 +50,68 @@
 
             var configPromise = loadConfig(config);
 
+            function onLoad() {
+                var doLogin = function(prompt) {
+                    if (!prompt) {
+                        options.prompt = 'none';
+                    }
+                    kc.login(options).success(function () {
+                        initPromise.setSuccess();
+                    }).error(function () {
+                        initPromise.setError();
+                    });
+                }
+
+                var options = {};
+                switch (initOptions.onLoad) {
+                    case 'check-sso':
+                        if (loginIframe.enable) {
+                            setupCheckLoginIframe().success(function() {
+                                checkLoginIframe().success(function () {
+                                    doLogin(false);
+                                }).error(function () {
+                                    initPromise.setSuccess();
+                                });
+                            });
+                        } else {
+                            doLogin(false);
+                        }
+                        break;
+                    case 'login-required':
+                        doLogin(true);
+                        break;
+                    default:
+                        throw 'Invalid value for onLoad';
+                }
+            }
+
             function processInit() {
                 var callback = parseCallback(window.location.href);
 
                 if (callback) {
+                    setupCheckLoginIframe();
                     window.history.replaceState({}, null, callback.newUrl);
                     processCallback(callback, initPromise);
                     return;
                 } else if (initOptions) {
-                    var doLogin = function(prompt) {
-                        if (!prompt) {
-                            options.prompt = 'none';
-                        }
-                        kc.login(options).success(function () {
-                            initPromise.setSuccess();
-                        }).error(function () {
-                            initPromise.setError();
-                        });
-                    }
-
                     if (initOptions.token || initOptions.refreshToken) {
                         setToken(initOptions.token, initOptions.refreshToken, initOptions.idToken);
-                        initPromise.setSuccess();
-                    } else if (initOptions.onLoad) {
-                        var options = {};
-                        switch (initOptions.onLoad) {
-                            case 'check-sso':
-                                if (loginIframe.enable) {
-                                    setupCheckLoginIframe().success(function() {
-                                        checkLoginIframe().success(function () {
-                                            doLogin(false);
-                                        }).error(function () {
-                                            initPromise.setSuccess();
-                                        });
-                                    });
-                                } else {
-                                    doLogin(false);
-                                }
-                                break;
-                            case 'login-required':
-                                doLogin(true);
-                                break;
-                            default:
-                                throw 'Invalid value for onLoad';
+
+                        if (loginIframe.enable) {
+                            setupCheckLoginIframe().success(function() {
+                                checkLoginIframe().success(function () {
+                                    initPromise.setSuccess();
+                                }).error(function () {
+                                    if (initOptions.onLoad) {
+                                        onLoad();
+                                    }
+                                });
+                            });
+                        } else {
+                            initPromise.setSuccess();
                         }
+                    } else if (initOptions.onLoad) {
+                        onLoad();
                     }
                 } else {
                     initPromise.setSuccess();
@@ -122,8 +140,13 @@
 
             sessionStorage.oauthState = JSON.stringify({ state: state, redirectUri: encodeURIComponent(redirectUri) });
 
+            var action = 'login';
+            if (options && options.action == 'register') {
+                action = 'registrations';
+            }
+
             var url = getRealmUrl()
-                + '/protocol/openid-connect/login'
+                + '/protocol/openid-connect/' + action
                 + '?client_id=' + encodeURIComponent(kc.clientId)
                 + '&redirect_uri=' + encodeURIComponent(redirectUri)
                 + '&state=' + encodeURIComponent(state)
@@ -451,10 +474,6 @@
         }
 
         function setToken(token, refreshToken, idToken) {
-            if (token || refreshToken) {
-                setupCheckLoginIframe();
-            }
-
             if (token) {
                 kc.token = token;
                 kc.tokenParsed = decodeToken(token);
@@ -633,15 +652,17 @@
             var promise = createPromise();
 
             if (!loginIframe.enable) {
-                return;
+                promise.setSuccess();
+                return promise.promise;
             }
 
             if (loginIframe.iframe) {
                 promise.setSuccess();
-                return;
+                return promise.promise;
             }
 
             var iframe = document.createElement('iframe');
+            loginIframe.iframe = iframe;
 
             iframe.onload = function() {
                 var realmUrl = getRealmUrl();
@@ -650,8 +671,9 @@
                 } else {
                     loginIframe.iframeOrigin = realmUrl.substring(0, realmUrl.indexOf('/', 8));
                 }
-                loginIframe.iframe = iframe;
                 promise.setSuccess();
+
+                setTimeout(check, loginIframe.interval * 1000);
             }
 
             var src = getRealmUrl() + '/protocol/openid-connect/login-status-iframe.html?client_id=' + encodeURIComponent(kc.clientId) + '&origin=' + getOrigin();
@@ -683,8 +705,6 @@
                 }
             };
 
-            setTimeout(check, loginIframe.interval * 1000);
-
             return promise.promise;
         }