Index: remoting/webapp/crd/js/oauth2.js |
diff --git a/remoting/webapp/crd/js/oauth2.js b/remoting/webapp/crd/js/oauth2.js |
index b4fbaf1749f2158ff1710904f7b5dab4e153e68b..1074ed22e2ba47a6d3f34f41e8ee5f36209ce53d 100644 |
--- a/remoting/webapp/crd/js/oauth2.js |
+++ b/remoting/webapp/crd/js/oauth2.js |
@@ -84,17 +84,14 @@ remoting.OAuth2.prototype.isAuthenticated = function() { |
/** |
* Remove the cached auth token, if any. |
* |
- * @param {function():void=} opt_onDone Completion callback. |
- * @return {void} Nothing. |
+ * @return {!Promise<null>} A promise resolved with the operation completes. |
*/ |
-remoting.OAuth2.prototype.removeCachedAuthToken = function(opt_onDone) { |
+remoting.OAuth2.prototype.removeCachedAuthToken = function() { |
window.localStorage.removeItem(this.KEY_EMAIL_); |
window.localStorage.removeItem(this.KEY_FULLNAME_); |
this.clearAccessToken_(); |
this.clearRefreshToken_(); |
- if (opt_onDone) { |
- opt_onDone(); |
- } |
+ return Promise.resolve(null); |
}; |
/** |
@@ -353,92 +350,100 @@ remoting.OAuth2.prototype.printStartHostCommandLine = function() { |
}; |
/** |
- * Call a function with an access token, refreshing it first if necessary. |
- * The access token will remain valid for at least 2 minutes. |
+ * Get an access token, refreshing it first if necessary. The access |
+ * token will remain valid for at least 2 minutes. |
* |
- * @param {function(string):void} onOk Function to invoke with access token if |
- * an access token was successfully retrieved. |
- * @param {function(remoting.Error):void} onError Function to invoke with an |
- * error code on failure. |
- * @return {void} Nothing. |
+ * @return {!Promise<string>} A promise resolved the an access token or |
+ * rejected with a remoting.Error. |
*/ |
-remoting.OAuth2.prototype.callWithToken = function(onOk, onError) { |
- var refreshToken = this.getRefreshToken(); |
- if (refreshToken) { |
- if (this.needsNewAccessToken_()) { |
- remoting.oauth2Api.refreshAccessToken( |
- this.onAccessToken_.bind(this, onOk), onError, |
- this.getClientId_(), this.getClientSecret_(), |
- refreshToken); |
+remoting.OAuth2.prototype.getToken = function() { |
+ /** @const */ |
+ var that = this; |
+ |
+ return new Promise(function(resolve, reject) { |
+ var refreshToken = that.getRefreshToken(); |
+ if (refreshToken) { |
+ if (that.needsNewAccessToken_()) { |
+ remoting.oauth2Api.refreshAccessToken( |
+ that.onAccessToken_.bind(that, resolve), reject, |
+ that.getClientId_(), that.getClientSecret_(), |
+ refreshToken); |
+ } else { |
+ resolve(that.getAccessTokenInternal_()['token']); |
+ } |
} else { |
- onOk(this.getAccessTokenInternal_()['token']); |
+ reject(remoting.Error.NOT_AUTHENTICATED); |
} |
- } else { |
- onError(remoting.Error.NOT_AUTHENTICATED); |
- } |
+ }); |
}; |
/** |
* Get the user's email address. |
* |
- * @param {function(string):void} onOk Callback invoked when the email |
- * address is available. |
- * @param {function(remoting.Error):void} onError Callback invoked if an |
- * error occurs. |
- * @return {void} Nothing. |
+ * @return {!Promise<string>} Promise resolved with the user's email |
+ * address or rejected with a remoting.Error. |
*/ |
-remoting.OAuth2.prototype.getEmail = function(onOk, onError) { |
+remoting.OAuth2.prototype.getEmail = function() { |
var cached = window.localStorage.getItem(this.KEY_EMAIL_); |
if (typeof cached == 'string') { |
- onOk(cached); |
- return; |
+ return Promise.resolve(cached); |
} |
/** @type {remoting.OAuth2} */ |
var that = this; |
- /** @param {string} email */ |
- var onResponse = function(email) { |
- window.localStorage.setItem(that.KEY_EMAIL_, email); |
- window.localStorage.setItem(that.KEY_FULLNAME_, ''); |
- onOk(email); |
- }; |
- this.callWithToken( |
- remoting.oauth2Api.getEmail.bind(remoting.oauth2Api, onResponse, onError), |
- onError); |
+ return new Promise(function(resolve, reject) { |
+ /** @param {string} email */ |
+ var onResponse = function(email) { |
+ window.localStorage.setItem(that.KEY_EMAIL_, email); |
+ window.localStorage.setItem(that.KEY_FULLNAME_, ''); |
+ resolve(email); |
+ }; |
+ |
+ that.getToken().then( |
+ remoting.oauth2Api.getEmail.bind( |
+ remoting.oauth2Api, onResponse, reject), |
+ reject); |
+ }); |
}; |
/** |
* Get the user's email address and full name. |
* |
- * @param {function(string,string):void} onOk Callback invoked when the user's |
- * email address and full name are available. |
- * @param {function(remoting.Error):void} onError Callback invoked if an |
- * error occurs. |
- * @return {void} Nothing. |
+ * @return {!Promise<{email: string, name: string}>} Promise |
+ * resolved with the user's email address and full name, or rejected |
+ * with a remoting.Error. |
*/ |
-remoting.OAuth2.prototype.getUserInfo = function(onOk, onError) { |
+remoting.OAuth2.prototype.getUserInfo = function() { |
var cachedEmail = window.localStorage.getItem(this.KEY_EMAIL_); |
var cachedName = window.localStorage.getItem(this.KEY_FULLNAME_); |
if (typeof cachedEmail == 'string' && typeof cachedName == 'string') { |
- onOk(cachedEmail, cachedName); |
- return; |
+ /** |
+ * The temp variable is needed to work around a compiler bug. |
+ * @type {{email: string, name: string}} |
+ */ |
+ var result = {email: cachedEmail, name: cachedName}; |
+ return Promise.resolve(result); |
} |
+ |
/** @type {remoting.OAuth2} */ |
var that = this; |
- /** |
- * @param {string} email |
- * @param {string} name |
- */ |
- var onResponse = function(email, name) { |
- window.localStorage.setItem(that.KEY_EMAIL_, email); |
- window.localStorage.setItem(that.KEY_FULLNAME_, name); |
- onOk(email, name); |
- }; |
- this.callWithToken( |
- remoting.oauth2Api.getUserInfo.bind( |
- remoting.oauth2Api, onResponse, onError), |
- onError); |
+ return new Promise(function(resolve, reject) { |
+ /** |
+ * @param {string} email |
+ * @param {string} name |
+ */ |
+ var onResponse = function(email, name) { |
+ window.localStorage.setItem(that.KEY_EMAIL_, email); |
+ window.localStorage.setItem(that.KEY_FULLNAME_, name); |
+ resolve({email: email, name: name}); |
+ }; |
+ |
+ that.getToken().then( |
+ remoting.oauth2Api.getUserInfo.bind( |
+ remoting.oauth2Api, onResponse, reject), |
+ reject); |
+ }); |
}; |
/** |