X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=0.6.x%2Fjs%2F06_net%2F10_XOAuth2.js;h=5f23c6ced529fad16f6574e1d0cef31203a1e2cb;hb=9e607206c5510435fc1daeac93a19427ce33cc6f;hp=3564a1389bb1cf1d0dee15b416703024e33950e5;hpb=2612dc17dae6ba790807049d2587e8a2910007cc;p=pettanr%2FclientJs.git
diff --git a/0.6.x/js/06_net/10_XOAuth2.js b/0.6.x/js/06_net/10_XOAuth2.js
index 3564a13..5f23c6c 100644
--- a/0.6.x/js/06_net/10_XOAuth2.js
+++ b/0.6.x/js/06_net/10_XOAuth2.js
@@ -1,13 +1,12 @@
-//{+oauth2"OAuth2 ãµã¼ãã¹ã®å®ç¾©"(OAuth2å¤é¨ãµã¼ãã¹ãå®ç¾©ããèªå¯ããã»ã¹ã»xhrã®ç½²åãèªååãã¾ã)[+xhr]
-var X_NET_OAUTH2_detection = new Function( 'w', 'try{return w.location.search}catch(e){}' ),
- X_NET_OAUTH2_authorizationWindow,
- X_NET_OAUTH2_authorizationTimerID;
+//{+oauth2"OAuth2 ãµã¼ãã¹ã®å®ç¾©"(OAuth2å¤é¨ãµã¼ãã¹ãå®ç¾©ããèªå¯ããã»ã¹ã»xhrã®ç½²åãèªååãã¾ã)[+xhr,+window]
+var X_OAUTH2_authWindow,
+ X_OAUTH2_authTimerID;
/**
* ã¤ãã³ã
*
- * - X.Event.NEED_AUTH
- window ããpopup ãã¦èªå¯ãè¡ãå¿
è¦ããããã¤ã³ã¿ã¼ã¤ãã³ãå
㧠oauth2.requestAuth() ãå¼ã¶ã
+ *
- X.Event.NEED_AUTH
- window ããpopup ãã¦èªå¯ãè¡ãå¿
è¦ããããã¤ã³ã¿ã¼ã¤ãã³ãå
㧠oauth2.requestAuth() ãå¼ã¶ããã®ã¤ãã³ãããã£ã³ã»ã«ããã¨
*
- X.Event.CANCELED
- èªå¯ window ãéããããã([x]çã§ã¦ã¤ã³ãã¦ãéãããããoauth2.cancelAuth() ãå¼ã°ãã)
*
- X.Event.SUCCESS
- èªå¯ window ã§ã¦ã¼ã¶ã¼ãèªå¯ããç¶ãã¦ã³ã¼ãã®èªå¯ãæ¸ãã ã
*
- X.Event.ERROR
- ã³ã¼ãã®èªå¯ã®ã¨ã©ã¼ããªãã¬ãã·ã¥ãã¼ã¯ã³ã®ï½´ï¾ï½°ããããã¯ã¼ã¯ã¨ã©ã¼
@@ -16,6 +15,7 @@ var X_NET_OAUTH2_detection = new Function( 'w', 'try{return w.location.sear
*
* original :
* oauth2.js ,
+ * https://github.com/ox-it/javascript-oauth2/blob/master/oauth2/oauth2.js
*
* @alias X.OAuth2
* @class OAuth2 ãµã¼ãã¹ãå®ç¾©ãæ¥ç¶ç¶æ³ãã¢ãã¿ãããé©å®ã«ãã¼ã¯ã³ã®ã¢ãããã¼ããªã©ãè¡ã
@@ -27,8 +27,10 @@ oauth2 = X.OAuth2({
'clientSecret' : 'xxxxxxxx',
'authorizeEndpoint' : 'https://accounts.google.com/o/oauth2/auth',
'tokenEndpoint' : 'https://accounts.google.com/o/oauth2/token',
- 'redirectURI' : X.URL.cleanup( document.location.href ), // å°ç¨ã®è»½éãã¼ã¸ãç¨æãã¦ãããããç¾å¨ã®ã¢ãã¬ã¹ã§ãå¯è½
+ 'redirectURI' : X.URL.cleanup( document.location.href ), // å°ç¨ã®è»½éãã¼ã¸ãç¨æãã¦ãããããç¾å¨ã®ã¢ãã¬ã¹ã§ãå¯è½, gif ã¯ï¼
'scopes' : [ 'https://www.googleapis.com/auth/blogger' ],
+ 'refreshMargin' : 300000,
+ // canuse
'authorizeWindowWidth' : 500,
'authorizeWindowHeight' : 500
}).listen( [ X.Event.NEED_AUTH, X.Event.CANCELED, X.Event.SUCCESS, X.Event.ERROR, X.Event.PROGRESS ], updateOAuth2State );
@@ -51,15 +53,16 @@ X[ 'OAuth2' ] = X_EventDispatcher[ 'inherits' ](
'Constructor' : function( obj ){
var expires_at;
- obj = X_Object_clone( obj );
+ obj = X_Object_copy( obj );
+ obj[ 'refreshMargin' ] = obj[ 'refreshMargin' ] || 300000;
X_Pair_create( this, obj );
obj.onAuthError = X_NET_OAUTH2_onXHR401Error;
obj.updateRequest = X_NET_OAUTH2_updateRequest;
- if( _getAccessToken( this ) && ( expires_at = _getAccessTokenExpiry( this ) ) ){
- if( expires_at < X_Timer_now() + ( obj[ 'refreshMargin' ] || 300000 ) ){ // 寿å½ã5åãåã£ã
+ if( X_OAuth2_getAccessToken( this ) && ( expires_at = X_OAuth2_getAccessTokenExpiry( this ) ) ){
+ if( expires_at < X_Timer_now() + obj[ 'refreshMargin' ] ){ // 寿å½ã5åãåã£ã
this[ 'refreshToken' ]();
} else {
obj.oauth2State = 4;
@@ -70,7 +73,7 @@ X[ 'OAuth2' ] = X_EventDispatcher[ 'inherits' ](
};
// TODO canUse gadgetProxy
- this[ 'listen' ]( [ X_EVENT_KILL_INSTANCE, X_EVENT_SUCCESS, X_EVENT_ERROR, X_EVENT_NEED_AUTH ], X_NET_OAUTH2_handleEvent );
+ this[ 'listen' ]( [ X_EVENT_KILL_INSTANCE, X_EVENT_SUCCESS, X_EVENT_ERROR, X_EVENT_NEED_AUTH ], X_OAUTH2_handleEvent );
},
/**
@@ -90,38 +93,53 @@ X[ 'OAuth2' ] = X_EventDispatcher[ 'inherits' ](
/**
* èªå¯ç¨ window ããããã¢ããããããããã¢ãããããã¯ãåããªãããã«å¿
ã pointer event å
ã§å¼ã¶ãã¨ã
+ *
+ * - 1 :
- èªå¯ç¨ window ããããã¢ããä¸(èªèº«)
+ *
- 2 :
- ã³ã¼ããèªå¯ä¸
+ *
- 3 :
- ãã¼ã¯ã³ã®ãªãã¬ãã·ã¥ä¸
+ *
- 4 :
- æ¥ç¶
+ *
- 5 :
- ä»ã®OAuth2ãµã¼ãã¹ã®èªå¯ç¨ window ããããã¢ããä¸
+ *
+ * @return {number}
*/
'requestAuth' : function(){
- var url, w, h;
+ var e = X_EventDispatcher_CURRENT_EVENTS[ X_EventDispatcher_CURRENT_EVENTS.length - 1 ],
+ w, h, pair;
+
// TODO pointer event å
ãï¼ãã§ãã¯
+ if( !e || !e[ 'pointerType' ] ){
+ alert( 'ã¿ããã¤ãã³ã以å¤ã§ã® popup! ' + ( e ? e.type : '' ) );
+ return;
+ };
+
// äºã¤ä»¥ä¸ã® popup ãä½ããªã
- if( X_NET_OAUTH2_authorizationWindow ) return;
+ if( X_OAUTH2_authWindow ) return;
pair = X_Pair_get( this );
if( pair.net || pair.oauth2State ) return;
-
- url = pair[ 'authorizeEndpoint' ];
+
w = pair[ 'authorizeWindowWidth' ] || 500;
h = pair[ 'authorizeWindowHeight' ] || 500;
+
+ X_OAUTH2_authWindow = X_Window( {
+ 'url' : X_URL_create( pair[ 'authorizeEndpoint' ],
+ {
+ 'response_type' : 'code',
+ 'client_id' : pair[ 'clientID' ],
+ 'redirect_uri' : pair[ 'redirectURI' ],
+ 'scope' : ( pair[ 'scopes' ] || [] ).join( ' ' )
+ }
+ ),
+ 'name' : 'oauthauthorize',
+ 'params' : 'width=' + w
+ + ',height=' + h
+ + ',left=' + ( screen.width - w ) / 2
+ + ',top=' + ( screen.height - h ) / 2
+ + ',menubar=no,toolbar=no'
+ } )[ 'listen' ]( X_EVENT_UNLOAD, this, X_OAuth2_detectAuthPopup );
- X_NET_OAUTH2_authorizationWindow = window.open(
- X_URL_create( url,
- {
- 'response_type' : 'code',
- 'client_id' : pair[ 'clientID' ],
- 'redirect_uri' : pair[ 'redirectURI' ],
- 'scope' : ( pair[ 'scopes' ] || []).join(' ')
- }
- ),
- 'oauthauthorize',
- 'width=' + w
- + ',height=' + h
- + ',left=' + ( screen.width - w ) / 2
- + ',top=' + ( screen.height - h ) / 2
- + ',menubar=no,toolbar=no');
-
- X_NET_OAUTH2_authorizationTimerID = X_Timer_add( 333, 0, this, X_Net_OAuth2_detectAuthPopup );
+ X_OAUTH2_authTimerID = X_Timer_add( 333, 0, this, X_OAuth2_detectAuthPopup );
pair.oauth2State = 1;
@@ -144,11 +162,13 @@ X[ 'OAuth2' ] = X_EventDispatcher[ 'inherits' ](
};
// http://kojikoji75.hatenablog.com/entry/2013/12/15/223839
- X_NET_OAUTH2_authorizationWindow && X_NET_OAUTH2_authorizationWindow.open( 'about:blank', '_self' ).close();
- X_NET_OAUTH2_authorizationWindow = null;
+ if( X_OAUTH2_authWindow ){
+ X_OAUTH2_authWindow[ 'kill' ]();
+ X_OAUTH2_authWindow = null;
+ };
- X_NET_OAUTH2_authorizationTimerID && X_Timer_remove( X_NET_OAUTH2_authorizationTimerID );
- X_NET_OAUTH2_authorizationTimerID = 0;
+ X_OAUTH2_authTimerID && X_Timer_remove( X_OAUTH2_authTimerID );
+ X_OAUTH2_authTimerID = 0;
this[ 'asyncDispatch' ]( X_EVENT_CANCELED );
},
@@ -157,7 +177,14 @@ X[ 'OAuth2' ] = X_EventDispatcher[ 'inherits' ](
* ã¢ã¯ã»ã¹ãã¼ã¯ã³ã®ãªãã¬ãã·ã¥ã
*/
'refreshToken' : function(){
- var pair = X_Pair_get( this );
+ var pair = X_Pair_get( this ),
+ refreshToken = X_OAuth2_getRefreshToken( this );
+
+ if( !refreshToken ){
+ pair.oauth2State = 0;
+ this[ 'asyncDispatch' ]( X_EVENT_NEED_AUTH );
+ return;
+ };
if( pair.net ) return;
@@ -174,22 +201,22 @@ X[ 'OAuth2' ] = X_EventDispatcher[ 'inherits' ](
'client_id' : pair[ 'clientID' ],
'client_secret' : pair[ 'clientSecret' ],
'grant_type' : 'refresh_token',
- 'refresh_token' : _getRefreshToken( this )
+ 'refresh_token' : refreshToken
}),
'dataType' : 'json',
'headers' : {
'Accept' : 'application/json',
'Content-Type' : 'application/x-www-form-urlencoded'
},
- 'test' : 'gadget'
- } ).listenOnce( [ X_EVENT_SUCCESS, X_EVENT_ERROR ], this, X_Net_OAuth2_responceHandler );
+ 'test' : 'gadget' // canuse
+ } ).listenOnce( [ X_EVENT_SUCCESS, X_EVENT_ERROR ], this, X_OAuth2_responceHandler );
this[ 'asyncDispatch' ]( { type : X_EVENT_PROGRESS, message : 'Start to refresh token.' } );
}
}
);
-function X_NET_OAUTH2_handleEvent( e ){
+function X_OAUTH2_handleEvent( e ){
var pair = X_Pair_get( this );
switch( e.type ){
@@ -203,44 +230,42 @@ function X_NET_OAUTH2_handleEvent( e ){
case X_EVENT_SUCCESS :
pair.refreshTimerID && X_Timer_remove( pair.refreshTimerID );
- if( _getRefreshToken( this ) ){
+ if( X_OAuth2_getRefreshToken( this ) ){
// èªåãªãã¬ãã·ã¥
- pair.refreshTimerID = X_Timer_once( _getAccessTokenExpiry( this ) - X_Timer_now() - pair[ 'refreshMargin' ], this, this[ 'refreshToken' ] );
+ pair.refreshTimerID = X_Timer_once( X_OAuth2_getAccessTokenExpiry( this ) - X_Timer_now() - pair[ 'refreshMargin' ], this, this[ 'refreshToken' ] );
};
};
};
-function X_Net_OAuth2_detectAuthPopup(){
- var closed, search, pair = X_Pair_get( this );
-
- if( X_NET_OAUTH2_authorizationWindow.closed ){
- pair.oauth2State = 0;
- closed = true;
+function X_OAuth2_detectAuthPopup( e ){
+ var pair = X_Pair_get( this ),
+ status, search;
+ if( X_OAUTH2_authWindow[ 'closed' ]() ){
+ status = 0;
this[ 'asyncDispatch' ]( X_EVENT_CANCELED );
} else
- if( search = X_NET_OAUTH2_detection( X_NET_OAUTH2_authorizationWindow ) ){
- pair = X_Pair_get( this );
- pair.code = X_URL_ParamToObj( search.slice( 1 ) )[ 'code' ];
-
- X_NET_OAUTH2_authorizationWindow.open( 'about:blank', '_self' ).close();
- closed = true;
-
- X_Net_OAuth2_authorizationCode( this, pair );
-
- pair.oauth2State = 2;
+ if( search = X_OAUTH2_authWindow[ 'find' ]( 'location>search' ) ){
+ pair = X_Pair_get( this );
+ pair.code = X_URL_paramToObj( search.slice( 1 ) )[ 'code' ];
+ status = 2;
+ X_OAuth2_authorizationCode( this, pair );
this[ 'asyncDispatch' ]( { type : X_EVENT_PROGRESS, message : 'Get code success, then authorization code.' } );
};
- if( closed ){
- X_NET_OAUTH2_authorizationWindow = null;
- X_NET_OAUTH2_authorizationTimerID = 0;
+ if( 0 <= status ){
+ pair = pair || X_Pair_get( this );
+ pair.oauth2State = status;
+
+ X_OAUTH2_authWindow[ 'kill' ]();
+ X_OAUTH2_authWindow = null;
+ X_OAUTH2_authTimerID = X_Timer_remove( X_OAUTH2_authTimerID );
- return X_Callback_UN_LISTEN;
+ return X_CALLBACK_UN_LISTEN;
};
};
-function X_Net_OAuth2_authorizationCode( oauth2, pair ){
+function X_OAuth2_authorizationCode( oauth2, pair ){
pair.net = X.Net( {
'xhr' : pair[ 'tokenEndpoint' ],
'postdata' : X_URL_objToParam({
@@ -256,10 +281,10 @@ function X_Net_OAuth2_authorizationCode( oauth2, pair ){
'Content-Type' : 'application/x-www-form-urlencoded'
},
'test' : 'gadget'
- } ).listenOnce( [ X_EVENT_SUCCESS, X_EVENT_ERROR ], oauth2, X_Net_OAuth2_responceHandler );
+ } ).listenOnce( [ X_EVENT_SUCCESS, X_EVENT_ERROR ], oauth2, X_OAuth2_responceHandler );
};
-function X_Net_OAuth2_responceHandler( e ){
+function X_OAuth2_responceHandler( e ){
var data = e.response,
pair = X_Pair_get( this ),
isRefresh = pair.oauth2State === 3;
@@ -269,7 +294,7 @@ function X_Net_OAuth2_responceHandler( e ){
switch( e.type ){
case X_EVENT_SUCCESS :
if( isRefresh && data.error ){
- _removeRefreshToken( this );
+ X_OAuth2_removeRefreshToken( this );
pair.oauth2State = 0;
this[ 'asyncDispatch' ]( { type : X_EVENT_ERROR, message : 'Refresh access token error.' } );
this[ 'asyncDispatch' ]( X_EVENT_NEED_AUTH );
@@ -282,17 +307,23 @@ function X_Net_OAuth2_responceHandler( e ){
return;
};
- _setAccessToken( this, data[ 'access_token' ] || '' );
- _setRefreshToken( this, data[ 'refresh_token' ] || '' );
+ X_OAuth2_setAccessToken( this, data[ 'access_token' ] || '' );
+ ( !isRefresh || data[ 'refresh_token' ] ) && X_OAuth2_setRefreshToken( this, data[ 'refresh_token' ] || '' );
if( data[ 'expires_in' ] ){
- _setAccessTokenExpiry( this, X_Timer_now() + data[ 'expires_in' ] * 1000 );
+ X_OAuth2_setAccessTokenExpiry( this, X_Timer_now() + data[ 'expires_in' ] * 1000 );
} else
- if( _getAccessTokenExpiry( this ) ){
- _removeAccessTokenExpiry( this );
+ if( X_OAuth2_getAccessTokenExpiry( this ) ){
+ X_OAuth2_removeAccessTokenExpiry( this );
};
pair.oauth2State = 4;
+
+ if( pair.lazyRequests && pair.lazyRequests.length ){
+ //X_NET_QUEUE_LIST.push.apply( X_NET_QUEUE_LIST, pair.lazyRequests );
+ //pair.lazyRequests.length = 0;
+ };
+
this[ 'asyncDispatch' ]( { type : X_EVENT_SUCCESS, message : isRefresh ? 'Refresh access token success.' : 'Get new access token success.' } );
break;
@@ -301,18 +332,18 @@ function X_Net_OAuth2_responceHandler( e ){
// other error, not auth
pair.oauth2State = 0;
this[ 'asyncDispatch' ]( { type : X_EVENT_ERROR, message : 'Refresh access token error.' } );
- _removeRefreshToken( this );
+ X_OAuth2_removeRefreshToken( this );
this[ 'asyncDispatch' ]( X_EVENT_NEED_AUTH );
} else
- if( _getAuthMechanism( this ) === 'param' ){
+ if( X_OAuth2_getAuthMechanism( this ) === 'param' ){
pair.oauth2State = 0;
this[ 'asyncDispatch' ]( { type : X_EVENT_ERROR, message : 'network-error' } );
} else {
pair.oauth2State = 0;
- _setAuthMechanism( this, 'param' );
+ X_OAuth2_setAuthMechanism( this, 'param' );
this[ 'asyncDispatch' ]( { type : X_EVENT_PROGRESS, message : 'Refresh access token failed. retry header -> param. ' } );
// retry
- X_Net_OAuth2_authorizationCode( this, pair );
+ X_OAuth2_authorizationCode( this, pair );
};
break;
};
@@ -321,35 +352,33 @@ function X_Net_OAuth2_responceHandler( e ){
function X_NET_OAUTH2_onXHR401Error( oauth2, e ){
var pair = this,
headers = e[ 'headers' ],
- xhr, bearerParams, headersExposed = false;
+ bearerParams, headersExposed = false;
- if( _getAuthMechanism( oauth2 ) !== 'param' ){
- xhr = X_NET_currentWrapper[ '_rawObject' ];
- headersExposed = !X_Net_XHR_createXDR || !!headers; // this is a hack for Firefox and IE
+ if( X_OAuth2_getAuthMechanism( oauth2 ) !== 'param' ){
+ headersExposed = !X_NET_currentWrapper.isXDR || !!headers; // this is a hack for Firefox and IE
bearerParams = headersExposed && ( headers[ 'WWW-Authenticate' ] || headers[ 'www-authenticate' ] );
X_Type_isArray( bearerParams ) && ( bearerParams = bearerParams.join( '\n' ) );
};
// http://d.hatena.ne.jp/ritou/20110402/1301679908
- if ( bearerParams && bearerParams.indexOf( ' error=' ) === -1 ) {
+ if( bearerParams && bearerParams.indexOf( ' error=' ) === -1 ){ // bearerParams.error == undefined
pair.oauth2State = 0;
oauth2[ 'asyncDispatch' ]( X_EVENT_NEED_AUTH );
} else
- if ((( bearerParams && bearerParams.indexOf( 'invalid_token' ) !== -1 ) || !headersExposed) && _getRefreshToken( oauth2 ) ) {
- _removeAccessToken( oauth2 ); // It doesn't work any more.
+ if( ( ( bearerParams && bearerParams.indexOf( 'invalid_token' ) !== -1 ) || !headersExposed ) && X_OAuth2_getRefreshToken( oauth2 ) ){
+ X_OAuth2_removeAccessToken( oauth2 ); // It doesn't work any more.
pair.oauth2State = 3;
oauth2[ 'refreshToken' ]();
} else {
- //if (!headersExposed && !_getRefreshToken( oauth2 )) {
- _removeAccessToken( oauth2 ); // It doesn't work any more.
+ X_OAuth2_removeAccessToken( oauth2 ); // It doesn't work any more.
pair.oauth2State = 0;
oauth2[ 'asyncDispatch' ]( X_EVENT_NEED_AUTH );
};
};
function X_NET_OAUTH2_updateRequest( oauth2, request ){
- var token = _getAccessToken( oauth2 ),
- mechanism = _getAuthMechanism( oauth2 ),
+ var token = X_OAuth2_getAccessToken( oauth2 ),
+ mechanism = X_OAuth2_getAuthMechanism( oauth2 ),
url = request[ 'url' ],
headers;
@@ -363,29 +392,29 @@ function X_NET_OAUTH2_updateRequest( oauth2, request ){
};
};
-function _getAccessToken( that ){ return updateLocalStorage( '', that, 'accessToken' ); }
-function _getRefreshToken( that){ return updateLocalStorage( '', that, 'refreshToken' ); }
-function _getAccessTokenExpiry( that ){ return parseInt( updateLocalStorage( '', that, 'tokenExpiry' ) ) || 0; }
-function _getAuthMechanism( that ){
+function X_OAuth2_getAccessToken( that ){ return X_OAuth2_updateLocalStorage( '', that, 'accessToken' ); }
+function X_OAuth2_getRefreshToken( that ){ return X_OAuth2_updateLocalStorage( '', that, 'refreshToken' ); }
+function X_OAuth2_getAccessTokenExpiry( that ){ return parseFloat( X_OAuth2_updateLocalStorage( '', that, 'tokenExpiry' ) ) || 0; }
+function X_OAuth2_getAuthMechanism( that ){
// TODO use gadget | flash ...
// IE's XDomainRequest doesn't support sending headers, so don't try.
- return X_Net_XHR_createXDR ? 'param' : updateLocalStorage( '', that, 'AuthMechanism' );
+ return ( X_NET_currentWrapper === X_XHR ) && X_XHR_createXDR ? 'param' : X_OAuth2_updateLocalStorage( '', that, 'AuthMechanism' );
}
-function _setAccessToken( that, value ){ updateLocalStorage( '+', that, 'accessToken' , value); }
-function _setRefreshToken( that, value ){ updateLocalStorage( '+', that, 'refreshToken', value); }
-function _setAccessTokenExpiry( that, value ){ updateLocalStorage( '+', that, 'tokenExpiry', value); }
-function _setAuthMechanism( that, value ){ updateLocalStorage( '+', that, 'AuthMechanism', value); }
+function X_OAuth2_setAccessToken( that, value ){ X_OAuth2_updateLocalStorage( '+', that, 'accessToken' , value); }
+function X_OAuth2_setRefreshToken( that, value ){ X_OAuth2_updateLocalStorage( '+', that, 'refreshToken', value); }
+function X_OAuth2_setAccessTokenExpiry( that, value ){ X_OAuth2_updateLocalStorage( '+', that, 'tokenExpiry', value); }
+function X_OAuth2_setAuthMechanism( that, value ){ X_OAuth2_updateLocalStorage( '+', that, 'AuthMechanism', value); }
-function _removeAccessToken( that ){ updateLocalStorage( '-', that, 'accessToken' ); }
-function _removeRefreshToken( that ){ updateLocalStorage( '-', that, 'refreshToken' ); }
-function _removeAccessTokenExpiry( that ){ updateLocalStorage( '-', that, 'tokenExpiry' ); }
-function _removeAuthMechanism( that ){ updateLocalStorage( '-', that, 'AuthMechanism' ); }
+function X_OAuth2_removeAccessToken( that ){ X_OAuth2_updateLocalStorage( '-', that, 'accessToken' ); }
+function X_OAuth2_removeRefreshToken( that ){ X_OAuth2_updateLocalStorage( '-', that, 'refreshToken' ); }
+function X_OAuth2_removeAccessTokenExpiry( that ){ X_OAuth2_updateLocalStorage( '-', that, 'tokenExpiry' ); }
+function X_OAuth2_removeAuthMechanism( that ){ X_OAuth2_updateLocalStorage( '-', that, 'AuthMechanism' ); }
-function updateLocalStorage( cmd, that, name, value ){
+function X_OAuth2_updateLocalStorage( cmd, that, name, value ){
var action = cmd === '+' ? 'setItem' : cmd === '-' ? 'removeItem' : 'getItem',
pair;
- if( window.localStorage ){
+ if( window.localStorage ){ // TODO http://qiita.com/narikei/items/f55fb9cb398beac52ea9
return window.localStorage[ action ]( X_Pair_get( that )[ 'clientID' ] + name, value );
};