OSDN Git Service

Version 0.6.153, fix layout @X.UI.
[pettanr/clientJs.git] / 0.6.x / js / 06_net / 10_XOAuth2.js
index 43a34d6..55c40ea 100644 (file)
@@ -13,17 +13,33 @@ var X_NET_OAUTH2_detection      = new Function( 'w', 'try{return w.location.sear
  * <dt>X.Event.PROGRESS<dd>コードを window から受け取った、リフレッシュトークンの開始、コードの認可を header -> params に切替
  * </dl>
  * 
- * OAuth2 state
- * <dl>
- * <dt>0 : <dd>disconnected
- * <dt>1 : <dd>now authentication ...
- * <dt>2 : <dd>authorization_code
- * <dt>3 : <dd>refresh_token
- * <dt>4 : <dd>hasAccessToken
- * </dl>
- * 
  * original :
  *  oauth2.js , <opendata@oucs.ox.ac.uk>
+ * 
+ * @alias X.OAuth2
+ * @class OAuth2 サービスを定義し接続状況をモニタする。適宜にトークンのアップデートなどを行う
+ * @constructs OAuth2
+ * @extends {EventDispatcher}
+ * @example // OAuth2 サービスの定義
+oauth2 = X.OAuth2({
+       'clientID'          : 'xxxxxxxx.apps.googleusercontent.com',
+       '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 ), // 専用の軽量ページを用意してもよいが、現在のアドレスでも可能
+       'scopes'            : [ 'https://www.googleapis.com/auth/blogger' ],
+       'authorizeWindowWidth'  : 500,
+       'authorizeWindowHeight' : 500
+}).listen( [ X.Event.NEED_AUTH, X.Event.CANCELED, X.Event.SUCCESS, X.Event.ERROR, X.Event.PROGRESS ], updateOAuth2State );
+
+// XHR 時に oauth2 を渡す
+X.Net( {
+       xhr      : 'https://www.googleapis.com/blogger/v3/users/self/blogs',
+       dataType : 'json',
+       auth     : oauth2,
+       test     : 'gadget' // http -> https:xProtocol なリクエストのため、google ガジェットを proxy に使用
+       } )
+       .listen( [ X.Event.SUCCESS, X.Event.ERROR, X.Event.PROGRESS ], updateOAuth2State );
  */
 X[ 'OAuth2' ] = X_EventDispatcher[ 'inherits' ](
                'X.OAuth2',
@@ -50,12 +66,25 @@ X[ 'OAuth2' ] = X_EventDispatcher[ 'inherits' ](
                                // TODO kill の cancel
                        },
 
+                       /**
+                        * OAuth2 の状態。
+                        * <dl>
+                        * <dt>0 : <dd>未接続
+                        * <dt>1 : <dd>認可用 window がポップアップ中
+                        * <dt>2 : <dd>コードを認可中
+                        * <dt>3 : <dd>トークンのリフレッシュ中
+                        * <dt>4 : <dd>接続
+                        * </dl>
+                        * @return {number}
+                        */
                        'state' : function(){
                                return X_Pair_get( this ).oauth2State || 0;
                        },
                        
+                       /**
+                        * 認可用 window をポップアップする。ポップアップブロックが働かないように必ず pointer event 内で呼ぶこと。
+                        */
                        'requestAuth' : function(){
-                               // pointer event 内で呼ぶこと
                                // 二つ以上の popup を作らない
                                if( X_NET_OAUTH2_authorizationWindow ) return;
                                
@@ -85,6 +114,9 @@ X[ 'OAuth2' ] = X_EventDispatcher[ 'inherits' ](
                                this[ 'asyncDispatch' ]( { type : X_EVENT_PROGRESS, message : 'Start to auth.' } );
                        },
                        
+                       /**
+                        * 認可プロセスのキャンセル。ポップアップを閉じて認可用の通信は中断する。
+                        */
                        'cancelAuth' : function(){
                                var pair = X_Pair_get( this );
                                
@@ -103,6 +135,9 @@ X[ 'OAuth2' ] = X_EventDispatcher[ 'inherits' ](
                                this[ 'asyncDispatch' ]( X_EVENT_CANCELED );
                        },
                        
+                       /**
+                        * アクセストークンのリフレッシュ。
+                        */
                        'refreshToken' : function(){
                                /* TODO 自動リフレッシュ
                                 *                              var expires_at = this._getAccessTokenExpiry();