Repository: ambari Updated Branches: refs/heads/trunk e4012e958 -> f09c55528
AMBARI-12153. Ambari Web should automatically log the user in if valid HTTP authorization header is present (Single Sign On). (yusaku) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/f09c5552 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/f09c5552 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/f09c5552 Branch: refs/heads/trunk Commit: f09c555282a91646468de37a7c30449ba7221340 Parents: e4012e9 Author: Yusaku Sako <[email protected]> Authored: Fri Jun 26 17:20:39 2015 -0700 Committer: Yusaku Sako <[email protected]> Committed: Fri Jun 26 17:20:39 2015 -0700 ---------------------------------------------------------------------- ambari-web/app/router.js | 53 ++++++++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/f09c5552/ambari-web/app/router.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/router.js b/ambari-web/app/router.js index 9ea8f54..38dae93 100644 --- a/ambari-web/app/router.js +++ b/ambari-web/app/router.js @@ -132,27 +132,48 @@ App.Router = Em.Router.extend({ var dfd = $.Deferred(); var self = this; var auth = App.db.getAuthenticated(); - var authResp = (auth && auth === true); - if (authResp) { - App.ajax.send({ - name: 'router.login.clusters', - sender: this, - success: 'onAuthenticationSuccess', - error: 'onAuthenticationError' - }).complete(function () { + App.ajax.send({ + name: 'router.login.clusters', + sender: this, + success: 'onAuthenticationSuccess', + error: 'onAuthenticationError' + }).complete(function (xhr) { + if (xhr.isResolved()) { + // if server knows the user and user authenticated by UI + if (auth && auth === true) { dfd.resolve(self.get('loggedIn')); - }); - } else { - this.set('loggedIn', false); - dfd.resolve(false); - } + // if server knows the user but UI don't, check the response header + // and try to authorize + } else if (xhr.getResponseHeader('User')) { + var user = xhr.getResponseHeader('User'); + App.ajax.send({ + name: 'router.login', + sender: self, + data: { + usr: user, + loginName: encodeURIComponent(user) + }, + success: 'loginSuccessCallback', + error: 'loginErrorCallback' + }); + } else { + self.setAuthenticated(false); + dfd.resolve(false); + } + } else { + self.setAuthenticated(false); + dfd.resolve(false); + } + }); return dfd.promise(); }, onAuthenticationSuccess: function (data) { - this.setAuthenticated(true); - if (data.items.length) { - this.setClusterInstalled(data); + if (App.db.getAuthenticated() === true) { + this.setAuthenticated(true); + if (data.items.length) { + this.setClusterInstalled(data); + } } },
