Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(516)

Unified Diff: remoting/webapp/me2mom/oauth2.js

Issue 8336004: Improve web-app type safety. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: remoting/webapp/me2mom/oauth2.js
diff --git a/remoting/webapp/me2mom/oauth2.js b/remoting/webapp/me2mom/oauth2.js
index 654221fb79b262df4b8570c38ef99e02f9f55ffb..ee7cc733c6d8c9500a3dfd30106c47f4ab81496b 100644
--- a/remoting/webapp/me2mom/oauth2.js
+++ b/remoting/webapp/me2mom/oauth2.js
@@ -16,27 +16,33 @@
/** @suppress {duplicate} */
var remoting = remoting || {};
-(function() {
+/** @type {remoting.OAuth2} */
+remoting.oauth2 = null;
+
+
/** @constructor */
remoting.OAuth2 = function() {
-}
+};
// Constants representing keys used for storing persistent state.
+/** @private */
remoting.OAuth2.prototype.KEY_REFRESH_TOKEN_ = 'oauth2-refresh-token';
+/** @private */
remoting.OAuth2.prototype.KEY_ACCESS_TOKEN_ = 'oauth2-access-token';
// Constants for parameters used in retrieving the OAuth2 credentials.
-remoting.OAuth2.prototype.CLIENT_ID_ =
+/** @private */ remoting.OAuth2.prototype.CLIENT_ID_ =
'440925447803-2pi3v45bff6tp1rde2f7q6lgbor3o5uj.' +
'apps.googleusercontent.com';
+/** @private */
remoting.OAuth2.prototype.CLIENT_SECRET_ = 'W2ieEsG-R1gIA4MMurGrgMc_';
-remoting.OAuth2.prototype.SCOPE_ =
+/** @private */ remoting.OAuth2.prototype.SCOPE_ =
'https://www.googleapis.com/auth/chromoting ' +
'https://www.googleapis.com/auth/googletalk ' +
'https://www.googleapis.com/auth/userinfo#email';
-remoting.OAuth2.prototype.REDIRECT_URI_ =
+/** @private */ remoting.OAuth2.prototype.REDIRECT_URI_ =
'https://talkgadget.google.com/talkgadget/blank';
-remoting.OAuth2.prototype.OAUTH2_TOKEN_ENDPOINT_ =
+/** @private */ remoting.OAuth2.prototype.OAUTH2_TOKEN_ENDPOINT_ =
'https://accounts.google.com/o/oauth2/token';
/** @return {boolean} True if the app is already authenticated. */
@@ -45,7 +51,7 @@ remoting.OAuth2.prototype.isAuthenticated = function() {
return true;
}
return false;
-}
+};
/**
* Removes all storage, and effectively unauthenticates the user.
@@ -55,7 +61,7 @@ remoting.OAuth2.prototype.isAuthenticated = function() {
remoting.OAuth2.prototype.clear = function() {
window.localStorage.removeItem(this.KEY_REFRESH_TOKEN_);
this.clearAccessToken();
-}
+};
/**
* @param {string} token The new refresh token.
@@ -64,7 +70,7 @@ remoting.OAuth2.prototype.clear = function() {
remoting.OAuth2.prototype.setRefreshToken = function(token) {
window.localStorage.setItem(this.KEY_REFRESH_TOKEN_, escape(token));
this.clearAccessToken();
-}
+};
/** @return {?string} The refresh token, if authenticated, or NULL. */
remoting.OAuth2.prototype.getRefreshToken = function() {
@@ -73,7 +79,7 @@ remoting.OAuth2.prototype.getRefreshToken = function() {
return unescape(value);
}
return null;
-}
+};
/**
* @param {string} token The new access token.
@@ -84,12 +90,13 @@ remoting.OAuth2.prototype.setAccessToken = function(token, expiration) {
var access_token = {'token': token, 'expiration': expiration};
window.localStorage.setItem(this.KEY_ACCESS_TOKEN_,
JSON.stringify(access_token));
-}
+};
/**
* Returns the current access token, setting it to a invalid value if none
* existed before.
*
+ * @private
* @return {{token: string, expiration: number}} The current access token, or
* an invalid token if not authenticated.
*/
@@ -107,7 +114,7 @@ remoting.OAuth2.prototype.getAccessTokenInternal_ = function() {
}
console.log('Invalid access token stored.');
return {'token': '', 'expiration': 0};
-}
+};
/**
* Returns true if the access token is expired, or otherwise invalid.
@@ -128,30 +135,31 @@ remoting.OAuth2.prototype.needsNewAccessToken = function() {
return true;
}
return false;
-}
+};
/**
* Returns the current access token.
*
* Will throw if !isAuthenticated() or needsNewAccessToken().
*
- * @return {{token: string, expiration: number}}
+ * @return {string} The access token.
*/
remoting.OAuth2.prototype.getAccessToken = function() {
if (this.needsNewAccessToken()) {
throw 'Access Token expired.';
}
return this.getAccessTokenInternal_()['token'];
-}
+};
/** @return {void} Nothing. */
remoting.OAuth2.prototype.clearAccessToken = function() {
window.localStorage.removeItem(this.KEY_ACCESS_TOKEN_);
-}
+};
/**
* Update state based on token response from the OAuth2 /token endpoint.
*
+ * @private
* @param {XMLHttpRequest} xhr The XHR object for this request.
* @return {void} Nothing.
*/
@@ -175,7 +183,7 @@ remoting.OAuth2.prototype.processTokenResponse_ = function(xhr) {
console.log('Failed to get tokens. Status: ' + xhr.status +
' response: ' + xhr.responseText);
}
-}
+};
/**
* Asynchronously retrieves a new access token from the server.
@@ -198,14 +206,17 @@ remoting.OAuth2.prototype.refreshAccessToken = function(onDone) {
'grant_type': 'refresh_token'
};
+ /** @type {remoting.OAuth2} */
var that = this;
+ /** @param {XMLHttpRequest} xhr The XHR reply. */
+ var processTokenResponse = function(xhr) {
+ that.processTokenResponse_(xhr);
+ onDone(xhr);
+ };
remoting.xhr.post(this.OAUTH2_TOKEN_ENDPOINT_,
- function(xhr) {
- that.processTokenResponse_(xhr);
- onDone(xhr);
- },
+ processTokenResponse,
parameters);
-}
+};
/**
* Redirect page to get a new OAuth2 Refresh Token.
@@ -221,7 +232,7 @@ remoting.OAuth2.prototype.doAuthRedirect = function() {
'response_type': 'code'
});
window.location.replace(GET_CODE_URL);
-}
+};
/**
* Asynchronously exchanges an authorization code for a refresh token.
@@ -240,14 +251,17 @@ remoting.OAuth2.prototype.exchangeCodeForToken = function(code, onDone) {
'grant_type': 'authorization_code'
};
+ /** @type {remoting.OAuth2} */
var that = this;
+ /** @param {XMLHttpRequest} xhr The XHR reply. */
+ var processTokenResponse = function(xhr) {
+ that.processTokenResponse_(xhr);
+ onDone(xhr);
+ };
remoting.xhr.post(this.OAUTH2_TOKEN_ENDPOINT_,
- function(xhr) {
- that.processTokenResponse_(xhr);
- onDone(xhr);
- },
+ processTokenResponse,
parameters);
-}
+};
/**
* Call myfunc with an access token as the only parameter.
@@ -257,11 +271,12 @@ remoting.OAuth2.prototype.exchangeCodeForToken = function(code, onDone) {
*
* The access token will remain valid for at least 2 minutes.
*
- * @param {function({token: string, expiration: number}):void} myfunc
+ * @param {function(string):void} myfunc
* Function to invoke with access token.
* @return {void} Nothing.
*/
remoting.OAuth2.prototype.callWithToken = function(myfunc) {
+ /** @type {remoting.OAuth2} */
var that = this;
if (remoting.oauth2.needsNewAccessToken()) {
remoting.oauth2.refreshAccessToken(function() {
@@ -275,5 +290,4 @@ remoting.OAuth2.prototype.callWithToken = function(myfunc) {
}
myfunc(this.getAccessToken());
-}
-}());
+};

Powered by Google App Engine
This is Rietveld 408576698