OSDN Git Service

Version 0.6.157, add X.Net.Form & fix X.EventDispatcher.
[pettanr/clientJs.git] / 0.6.x / js / 06_net / 10_XOAuth2.js
index 2d5150f..ab34837 100644 (file)
@@ -58,7 +58,7 @@ X[ 'OAuth2' ] = X_EventDispatcher[ 'inherits' ](
                                obj.updateRequest = X_NET_OAUTH2_updateRequest;                         
                                
                                if( _getAccessToken( this ) && ( expires_at = _getAccessTokenExpiry( this ) ) ){
-                                       if( expires_at < X_Timer_now() + 300000 ){ // 寿命が5分を切った
+                                       if( expires_at < X_Timer_now() + ( obj[ 'refreshMargin' ] || 300000 ) ){ // 寿命が5分を切った
                                                this[ 'refreshToken' ]();
                                        } else {
                                                obj.oauth2State = 4;
@@ -68,8 +68,8 @@ X[ 'OAuth2' ] = X_EventDispatcher[ 'inherits' ](
                                        this[ 'asyncDispatch' ]( X_EVENT_NEED_AUTH );
                                };
                                
-                               // TODO canUse
-                               // TODO kill の cancel
+                               // TODO canUse gadgetProxy
+                               this[ 'listen' ]( [ X_EVENT_KILL_INSTANCE, X_EVENT_SUCCESS, X_EVENT_ERROR, X_EVENT_NEED_AUTH ], X_NET_OAUTH2_handleEvent );
                        },
 
                        /**
@@ -137,6 +137,10 @@ X[ 'OAuth2' ] = X_EventDispatcher[ 'inherits' ](
                                        delete pair.net;
                                };
                                
+                               if( pair.oauth2State !== 1 ){
+                                       return;
+                               };
+                               
                                // 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;
@@ -151,12 +155,15 @@ X[ 'OAuth2' ] = X_EventDispatcher[ 'inherits' ](
                         * アクセストークンのリフレッシュ。
                         */
                        'refreshToken' : function(){
-                               // TODO 自動リフレッシュ
-
                                var pair = X_Pair_get( this );
                                
                                if( pair.net ) return;
                                
+                               if( pair.refreshTimerID ){
+                                       X_Timer_remove( pair.refreshTimerID );
+                                       delete pair.refreshTimerID;
+                               };
+                               
                                pair.oauth2State = 3;
                                
                                pair.net = X.Net( {
@@ -180,6 +187,27 @@ X[ 'OAuth2' ] = X_EventDispatcher[ 'inherits' ](
                }
        );
 
+function X_NET_OAUTH2_handleEvent( e ){
+       var pair = X_Pair_get( this );
+       
+       switch( e.type ){
+               case X_EVENT_KILL_INSTANCE :
+                       this[ 'cancelAuth' ]();
+               
+               case X_EVENT_ERROR :
+               case X_EVENT_NEED_AUTH :
+                       pair.refreshTimerID && X_Timer_remove( pair.refreshTimerID );
+                       break;
+                       
+               case X_EVENT_SUCCESS :
+                       pair.refreshTimerID && X_Timer_remove( pair.refreshTimerID );
+                       if( _getRefreshToken( this ) ){
+                               // 自動リフレッシュ
+                               pair.refreshTimerID = X_Timer_once( _getAccessTokenExpiry( this ) - X_Timer_now() - pair[ 'refreshMargin' ], this, this[ 'refreshToken' ] );
+                       };
+       };
+};
+
 function X_Net_OAuth2_detectAuthPopup(){
        var closed, search, pair = X_Pair_get( this );