home *** CD-ROM | disk | FTP | other *** search
/ Computer Active 2010 August / CA08.iso / Multimedija / shufflr.air / ShufflrClient.swf / scripts / com / facebook / utils / DesktopSessionHelper.as next >
Encoding:
Text File  |  2010-06-23  |  15.5 KB  |  401 lines

  1. package com.facebook.utils
  2. {
  3.    import com.adobe.serialization.json.JSON;
  4.    import com.facebook.Facebook;
  5.    import com.facebook.air.JSONCall;
  6.    import com.facebook.air.JSONEvent;
  7.    import com.facebook.air.SessionData;
  8.    import com.facebook.commands.auth.ExpireSession;
  9.    import com.facebook.commands.auth.RevokeExtendedPermission;
  10.    import com.facebook.commands.users.GetLoggedInUser;
  11.    import com.facebook.commands.users.HasAppPermission;
  12.    import com.facebook.data.BooleanResultData;
  13.    import com.facebook.data.StringResultData;
  14.    import com.facebook.data.auth.ExtendedPermissionValues;
  15.    import com.facebook.errors.FacebookError;
  16.    import com.facebook.events.FacebookEvent;
  17.    import com.facebook.net.FacebookCall;
  18.    import com.facebook.session.DesktopSession;
  19.    import com.facebook.views.LoginWindow;
  20.    import com.facebook.views.PermissionWindow;
  21.    import flash.display.NativeWindow;
  22.    import flash.events.Event;
  23.    import flash.events.EventDispatcher;
  24.    import flash.events.IOErrorEvent;
  25.    import flash.events.SecurityErrorEvent;
  26.    import flash.html.HTMLLoader;
  27.    import flash.net.SharedObject;
  28.    import flash.net.URLRequest;
  29.    
  30.    public class DesktopSessionHelper extends EventDispatcher
  31.    {
  32.       protected var permissions:Object;
  33.       
  34.       public var facebook:Facebook;
  35.       
  36.       public var permissionWin:PermissionWindow;
  37.       
  38.       protected var queuedGrantPermissions:Array;
  39.       
  40.       protected var queuedHasPermissions:Array;
  41.       
  42.       public var sessionData:SessionData;
  43.       
  44.       public var allPermissions:Array = [ExtendedPermissionValues.EMAIL,ExtendedPermissionValues.READ_MAILBOX,ExtendedPermissionValues.OFFLINE_ACCESS,ExtendedPermissionValues.STATUS_UPDATE,ExtendedPermissionValues.PHOTO_UPLOAD,ExtendedPermissionValues.VIDEO_UPLOAD,ExtendedPermissionValues.CREATE_EVENT,ExtendedPermissionValues.CREATE_NOTE,ExtendedPermissionValues.RSVP_EVENT,ExtendedPermissionValues.SMS,ExtendedPermissionValues.SHARE_ITEM,ExtendedPermissionValues.CREATE_LISTING,ExtendedPermissionValues.PUBLISH_STREAM,ExtendedPermissionValues.READ_STREAM];
  45.       
  46.       public var apiKey:String;
  47.       
  48.       protected var queuedRevokePermissions:Array;
  49.       
  50.       protected var sessionSO:SharedObject;
  51.       
  52.       public var loginWin:LoginWindow;
  53.       
  54.       protected var parentWindow:NativeWindow;
  55.       
  56.       public function DesktopSessionHelper(param1:String = "", param2:NativeWindow = null)
  57.       {
  58.          super();
  59.          this.permissions = {};
  60.          this.queuedGrantPermissions = [];
  61.          this.queuedRevokePermissions = [];
  62.          this.queuedHasPermissions = [];
  63.          this.parentWindow = param2;
  64.          this.apiKey = param1;
  65.          if(this.apiKey != "")
  66.          {
  67.             this.login(this.apiKey);
  68.          }
  69.       }
  70.       
  71.       protected function onHasPermissionComplete(param1:FacebookEvent) : void
  72.       {
  73.          var _loc3_:Boolean = false;
  74.          var _loc4_:FacebookError = null;
  75.          var _loc2_:String = this.queuedHasPermissions.shift();
  76.          if(param1.success)
  77.          {
  78.             _loc3_ = (param1.data as BooleanResultData).value;
  79.             dispatchEvent(new FacebookEvent(FacebookEvent.PERMISSION_STATUS,false,false,true,null,null,_loc2_,_loc3_));
  80.          }
  81.          else
  82.          {
  83.             _loc4_ = new FacebookError();
  84.             _loc4_.errorMsg = "HasPermission call failed";
  85.             dispatchEvent(new FacebookEvent(FacebookEvent.ERROR,false,false,false,null,_loc4_));
  86.          }
  87.       }
  88.       
  89.       protected function onCheckLoginLocationChange(param1:Event) : void
  90.       {
  91.          var _loc2_:String = (param1.target as HTMLLoader).location;
  92.          if(_loc2_.indexOf("result=logged_in") > -1)
  93.          {
  94.             this.permissionWin = new PermissionWindow();
  95.             this.permissionWin.addEventListener(Event.CLOSE,this.onPermissionWinClose,false,0,true);
  96.             this.permissionWin.askPermissions(this.queuedGrantPermissions,this.apiKey);
  97.             this.queuedGrantPermissions = [];
  98.             dispatchEvent(new FacebookEvent(FacebookEvent.PERMISSIONS_WINDOW_SHOW));
  99.          }
  100.          else if(_loc2_.indexOf("result=not_logged_in") > -1)
  101.          {
  102.             this.showLogin();
  103.          }
  104.       }
  105.       
  106.       public function hasPermission(param1:String, param2:Boolean = false) : void
  107.       {
  108.          var _loc3_:FacebookCall = null;
  109.          var _loc4_:Boolean = false;
  110.          if(this.sessionData == null)
  111.          {
  112.             this.login(this.apiKey);
  113.          }
  114.          else if(param2)
  115.          {
  116.             this.queuedHasPermissions.push(param1);
  117.             _loc3_ = this.facebook.post(new HasAppPermission(param1,this.sessionData.uid));
  118.             _loc3_.addEventListener(FacebookEvent.COMPLETE,this.onHasPermissionComplete,false,0,true);
  119.          }
  120.          else
  121.          {
  122.             _loc4_ = Boolean(this.permissions[param1]);
  123.             dispatchEvent(new FacebookEvent(FacebookEvent.PERMISSION_STATUS,false,false,false,null,null,param1,_loc4_));
  124.          }
  125.       }
  126.       
  127.       protected function getPermissions() : void
  128.       {
  129.          var _loc1_:JSONCall = new JSONCall(this.sessionData,this.apiKey);
  130.          _loc1_.addEventListener(JSONEvent.SUCCESS,this.onGetPermissionsSuccess,false,0,true);
  131.          _loc1_.addEventListener(JSONEvent.FAILURE,this.onGetPermissionsFailure,false,0,true);
  132.          _loc1_.addEventListener(IOErrorEvent.IO_ERROR,this.onGetPermissionsIOError,false,0,true);
  133.          _loc1_.addEventListener(SecurityErrorEvent.SECURITY_ERROR,this.onGetPermissionsSecurityError,false,0,true);
  134.          _loc1_.call("fql.query",{"query":"select " + this.allPermissions.join(", ") + " from permissions where uid = " + this.sessionData.uid});
  135.       }
  136.       
  137.       public function grantPermissions(param1:Array) : void
  138.       {
  139.          var _loc2_:HTMLLoader = null;
  140.          this.queuedGrantPermissions = param1;
  141.          if(this.sessionData == null)
  142.          {
  143.             this.login(this.apiKey);
  144.          }
  145.          else
  146.          {
  147.             _loc2_ = new HTMLLoader();
  148.             _loc2_.addEventListener(Event.LOCATION_CHANGE,this.onCheckLoginLocationChange,false,0,true);
  149.             _loc2_.load(new URLRequest("http://www.facebook.com/extern/desktop_login_status.php?next=http://www.facebook.com/connect/login_success.html&api_key=" + this.apiKey));
  150.          }
  151.       }
  152.       
  153.       protected function onValidateSession(param1:FacebookEvent) : void
  154.       {
  155.          if(param1.success && (param1.data as StringResultData).value == this.sessionData.uid)
  156.          {
  157.             this.getPermissions();
  158.             dispatchEvent(new FacebookEvent(FacebookEvent.CONNECT,false,false,true));
  159.          }
  160.          else
  161.          {
  162.             this.sessionSO.clear();
  163.             this.sessionSO.flush();
  164.             this.sessionData = null;
  165.             dispatchEvent(new FacebookEvent(FacebookEvent.VERIFYING_SESSION));
  166.          }
  167.       }
  168.       
  169.       public function logout() : void
  170.       {
  171.          var _loc1_:FacebookCall = null;
  172.          if(this.sessionSO == null)
  173.          {
  174.             if(this.apiKey == "")
  175.             {
  176.                throw new Error("Cannot logout. No api_key specified.");
  177.             }
  178.             this.sessionSO = SharedObject.getLocal(this.apiKey);
  179.          }
  180.          else
  181.          {
  182.             _loc1_ = this.facebook.post(new ExpireSession());
  183.             _loc1_.addEventListener(FacebookEvent.COMPLETE,this.onExpireSession,false,0,true);
  184.          }
  185.       }
  186.       
  187.       protected function onRevokePermissionComplete(param1:FacebookEvent) : void
  188.       {
  189.          var _loc3_:FacebookError = null;
  190.          var _loc2_:String = this.queuedRevokePermissions.shift();
  191.          if(param1.success)
  192.          {
  193.             dispatchEvent(new FacebookEvent(FacebookEvent.PERMISSION_CHANGE,false,false,true,null,null,_loc2_,false));
  194.          }
  195.          else
  196.          {
  197.             _loc3_ = new FacebookError();
  198.             _loc3_.errorMsg = "RevokePermission call failed";
  199.             dispatchEvent(new FacebookEvent(FacebookEvent.ERROR,false,false,false,null,_loc3_));
  200.          }
  201.       }
  202.       
  203.       protected function onExpireSession(param1:FacebookEvent) : void
  204.       {
  205.          this.sessionSO.clear();
  206.          this.sessionSO.flush();
  207.          this.sessionData = null;
  208.          dispatchEvent(new FacebookEvent(FacebookEvent.LOGOUT,false,false,true));
  209.       }
  210.       
  211.       protected function onLoginSuccess(param1:FacebookEvent) : void
  212.       {
  213.          var _loc2_:RegExp = /\{.+?\}/;
  214.          var _loc3_:String = _loc2_.exec(unescape(this.loginWin.sessionParams))[0];
  215.          var _loc4_:Object = com.adobe.serialization.json.JSON.decode(_loc3_);
  216.          this.populateSessionData(_loc4_);
  217.          this.facebook = new Facebook();
  218.          this.facebook.startSession(new DesktopSession(this.apiKey,this.sessionData.secret,this.sessionData.session_key));
  219.          this.getPermissions();
  220.          if(this.queuedGrantPermissions.length)
  221.          {
  222.             this.grantPermissions(this.queuedGrantPermissions);
  223.          }
  224.          this.sessionSO.data.session_key = this.sessionData.session_key;
  225.          this.sessionSO.data.secret = this.sessionData.secret;
  226.          this.sessionSO.data.expires = this.sessionData.expires;
  227.          this.sessionSO.data.uid = this.sessionData.uid;
  228.          this.sessionSO.flush();
  229.          dispatchEvent(new FacebookEvent(FacebookEvent.CONNECT,false,false,true));
  230.       }
  231.       
  232.       protected function onGetPermissionsIOError(param1:IOErrorEvent) : void
  233.       {
  234.          var _loc2_:FacebookError = new FacebookError();
  235.          _loc2_.errorMsg = "Getting Permissions IO Error";
  236.          _loc2_.errorEvent = param1;
  237.          dispatchEvent(new FacebookEvent(FacebookEvent.ERROR,false,false,false,null,_loc2_));
  238.       }
  239.       
  240.       public function revokePermissions(param1:Array) : void
  241.       {
  242.          var _loc2_:Array = null;
  243.          var _loc3_:String = null;
  244.          var _loc4_:FacebookCall = null;
  245.          this.queuedRevokePermissions = param1;
  246.          if(this.sessionData == null)
  247.          {
  248.             this.login(this.apiKey);
  249.          }
  250.          else
  251.          {
  252.             _loc2_ = [];
  253.             while(this.queuedRevokePermissions.length)
  254.             {
  255.                _loc3_ = this.queuedRevokePermissions.shift();
  256.                _loc2_.push(_loc3_);
  257.                _loc4_ = this.facebook.post(new RevokeExtendedPermission(_loc3_,this.sessionData.uid));
  258.                _loc4_.addEventListener(FacebookEvent.COMPLETE,this.onRevokePermissionComplete,false,0,true);
  259.             }
  260.             this.queuedRevokePermissions = _loc2_;
  261.          }
  262.       }
  263.       
  264.       protected function onGetPermissionsFailure(param1:JSONEvent) : void
  265.       {
  266.          var _loc2_:FacebookError = new FacebookError();
  267.          _loc2_.errorMsg = "Getting Permissions Failure";
  268.          dispatchEvent(new FacebookEvent(FacebookEvent.ERROR,false,false,false,null,_loc2_));
  269.       }
  270.       
  271.       protected function onGetPermissionsSecurityError(param1:SecurityErrorEvent) : void
  272.       {
  273.          var _loc2_:FacebookError = new FacebookError();
  274.          _loc2_.errorMsg = "Getting Permissions Security Error";
  275.          _loc2_.errorEvent = param1;
  276.          dispatchEvent(new FacebookEvent(FacebookEvent.ERROR,false,false,false,null,_loc2_));
  277.       }
  278.       
  279.       protected function onLoginFailure(param1:FacebookEvent) : void
  280.       {
  281.          dispatchEvent(param1);
  282.       }
  283.       
  284.       public function login(param1:String = "") : void
  285.       {
  286.          var _loc2_:FacebookCall = null;
  287.          if(param1 != "")
  288.          {
  289.             this.apiKey = param1;
  290.          }
  291.          if(this.apiKey == "")
  292.          {
  293.             throw new Error("Cannot login. No api_key specified.");
  294.          }
  295.          this.sessionSO = SharedObject.getLocal(this.apiKey);
  296.          if(this.sessionSO.data.session_key != null)
  297.          {
  298.             this.populateSessionData(this.sessionSO.data);
  299.             this.facebook = new Facebook();
  300.             this.facebook.startSession(new DesktopSession(this.apiKey,this.sessionData.secret,this.sessionData.session_key));
  301.             _loc2_ = this.facebook.post(new GetLoggedInUser());
  302.             _loc2_.addEventListener(FacebookEvent.COMPLETE,this.onValidateLoginSession,false,0,true);
  303.          }
  304.          else
  305.          {
  306.             this.showLogin();
  307.          }
  308.       }
  309.       
  310.       protected function onPermissionWinClose(param1:Event) : void
  311.       {
  312.          this.getPermissions();
  313.       }
  314.       
  315.       public function verifySession() : void
  316.       {
  317.          var _loc1_:FacebookCall = null;
  318.          this.sessionSO = SharedObject.getLocal(this.apiKey);
  319.          if(this.sessionSO.data.session_key != null)
  320.          {
  321.             this.populateSessionData(this.sessionSO.data);
  322.             this.facebook = new Facebook();
  323.             this.facebook.startSession(new DesktopSession(this.apiKey,this.sessionData.secret,this.sessionData.session_key));
  324.             _loc1_ = this.facebook.post(new GetLoggedInUser());
  325.             _loc1_.addEventListener(FacebookEvent.COMPLETE,this.onValidateSession,false,0,true);
  326.          }
  327.          else
  328.          {
  329.             dispatchEvent(new FacebookEvent(FacebookEvent.VERIFYING_SESSION));
  330.          }
  331.       }
  332.       
  333.       public function shutdown() : void
  334.       {
  335.          if(this.loginWin != null && !this.loginWin.closed)
  336.          {
  337.             this.loginWin.close();
  338.          }
  339.          if(this.permissionWin != null && !this.permissionWin.closed)
  340.          {
  341.             this.permissionWin.close();
  342.          }
  343.       }
  344.       
  345.       protected function onValidateLoginSession(param1:FacebookEvent) : void
  346.       {
  347.          if(param1.success && (param1.data as StringResultData).value == this.sessionData.uid)
  348.          {
  349.             this.getPermissions();
  350.             if(this.queuedGrantPermissions.length)
  351.             {
  352.                this.grantPermissions(this.queuedGrantPermissions);
  353.             }
  354.             dispatchEvent(new FacebookEvent(FacebookEvent.CONNECT,false,false,true));
  355.          }
  356.          else
  357.          {
  358.             this.sessionSO.clear();
  359.             this.sessionSO.flush();
  360.             this.sessionData = null;
  361.             this.login(this.apiKey);
  362.          }
  363.       }
  364.       
  365.       public function checkPermission(param1:String) : Boolean
  366.       {
  367.          return Boolean(this.permissions[param1]);
  368.       }
  369.       
  370.       protected function populateSessionData(param1:Object) : void
  371.       {
  372.          this.sessionData = new SessionData();
  373.          this.sessionData.session_key = param1.session_key;
  374.          this.sessionData.secret = param1.secret;
  375.          this.sessionData.expires = param1.expires;
  376.          this.sessionData.uid = param1.uid;
  377.       }
  378.       
  379.       protected function showLogin() : void
  380.       {
  381.          this.loginWin = new LoginWindow();
  382.          this.loginWin.addEventListener(FacebookEvent.LOGIN_SUCCESS,this.onLoginSuccess,false,0,true);
  383.          this.loginWin.addEventListener(FacebookEvent.LOGIN_FAILURE,this.onLoginFailure,false,0,true);
  384.          this.loginWin.connect(this.apiKey);
  385.          if(this.parentWindow != null)
  386.          {
  387.             this.loginWin.x = this.parentWindow.x;
  388.             this.loginWin.y = this.parentWindow.y;
  389.          }
  390.          dispatchEvent(new FacebookEvent(FacebookEvent.LOGIN_WINDOW_SHOW));
  391.       }
  392.       
  393.       protected function onGetPermissionsSuccess(param1:JSONEvent) : void
  394.       {
  395.          this.permissions = (param1.data as Array)[0];
  396.          dispatchEvent(new FacebookEvent(FacebookEvent.PERMISSIONS_LOADED,false,false,true));
  397.       }
  398.    }
  399. }
  400.  
  401.