home *** CD-ROM | disk | FTP | other *** search
Wrap
package com.facebook.utils { import com.adobe.serialization.json.JSON; import com.facebook.Facebook; import com.facebook.air.JSONCall; import com.facebook.air.JSONEvent; import com.facebook.air.SessionData; import com.facebook.commands.auth.ExpireSession; import com.facebook.commands.auth.RevokeExtendedPermission; import com.facebook.commands.users.GetLoggedInUser; import com.facebook.commands.users.HasAppPermission; import com.facebook.data.BooleanResultData; import com.facebook.data.StringResultData; import com.facebook.data.auth.ExtendedPermissionValues; import com.facebook.errors.FacebookError; import com.facebook.events.FacebookEvent; import com.facebook.net.FacebookCall; import com.facebook.session.DesktopSession; import com.facebook.views.LoginWindow; import com.facebook.views.PermissionWindow; import flash.display.NativeWindow; import flash.events.Event; import flash.events.EventDispatcher; import flash.events.IOErrorEvent; import flash.events.SecurityErrorEvent; import flash.html.HTMLLoader; import flash.net.SharedObject; import flash.net.URLRequest; public class DesktopSessionHelper extends EventDispatcher { protected var permissions:Object; public var facebook:Facebook; public var permissionWin:PermissionWindow; protected var queuedGrantPermissions:Array; protected var queuedHasPermissions:Array; public var sessionData:SessionData; 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]; public var apiKey:String; protected var queuedRevokePermissions:Array; protected var sessionSO:SharedObject; public var loginWin:LoginWindow; protected var parentWindow:NativeWindow; public function DesktopSessionHelper(param1:String = "", param2:NativeWindow = null) { super(); this.permissions = {}; this.queuedGrantPermissions = []; this.queuedRevokePermissions = []; this.queuedHasPermissions = []; this.parentWindow = param2; this.apiKey = param1; if(this.apiKey != "") { this.login(this.apiKey); } } protected function onHasPermissionComplete(param1:FacebookEvent) : void { var _loc3_:Boolean = false; var _loc4_:FacebookError = null; var _loc2_:String = this.queuedHasPermissions.shift(); if(param1.success) { _loc3_ = (param1.data as BooleanResultData).value; dispatchEvent(new FacebookEvent(FacebookEvent.PERMISSION_STATUS,false,false,true,null,null,_loc2_,_loc3_)); } else { _loc4_ = new FacebookError(); _loc4_.errorMsg = "HasPermission call failed"; dispatchEvent(new FacebookEvent(FacebookEvent.ERROR,false,false,false,null,_loc4_)); } } protected function onCheckLoginLocationChange(param1:Event) : void { var _loc2_:String = (param1.target as HTMLLoader).location; if(_loc2_.indexOf("result=logged_in") > -1) { this.permissionWin = new PermissionWindow(); this.permissionWin.addEventListener(Event.CLOSE,this.onPermissionWinClose,false,0,true); this.permissionWin.askPermissions(this.queuedGrantPermissions,this.apiKey); this.queuedGrantPermissions = []; dispatchEvent(new FacebookEvent(FacebookEvent.PERMISSIONS_WINDOW_SHOW)); } else if(_loc2_.indexOf("result=not_logged_in") > -1) { this.showLogin(); } } public function hasPermission(param1:String, param2:Boolean = false) : void { var _loc3_:FacebookCall = null; var _loc4_:Boolean = false; if(this.sessionData == null) { this.login(this.apiKey); } else if(param2) { this.queuedHasPermissions.push(param1); _loc3_ = this.facebook.post(new HasAppPermission(param1,this.sessionData.uid)); _loc3_.addEventListener(FacebookEvent.COMPLETE,this.onHasPermissionComplete,false,0,true); } else { _loc4_ = Boolean(this.permissions[param1]); dispatchEvent(new FacebookEvent(FacebookEvent.PERMISSION_STATUS,false,false,false,null,null,param1,_loc4_)); } } protected function getPermissions() : void { var _loc1_:JSONCall = new JSONCall(this.sessionData,this.apiKey); _loc1_.addEventListener(JSONEvent.SUCCESS,this.onGetPermissionsSuccess,false,0,true); _loc1_.addEventListener(JSONEvent.FAILURE,this.onGetPermissionsFailure,false,0,true); _loc1_.addEventListener(IOErrorEvent.IO_ERROR,this.onGetPermissionsIOError,false,0,true); _loc1_.addEventListener(SecurityErrorEvent.SECURITY_ERROR,this.onGetPermissionsSecurityError,false,0,true); _loc1_.call("fql.query",{"query":"select " + this.allPermissions.join(", ") + " from permissions where uid = " + this.sessionData.uid}); } public function grantPermissions(param1:Array) : void { var _loc2_:HTMLLoader = null; this.queuedGrantPermissions = param1; if(this.sessionData == null) { this.login(this.apiKey); } else { _loc2_ = new HTMLLoader(); _loc2_.addEventListener(Event.LOCATION_CHANGE,this.onCheckLoginLocationChange,false,0,true); _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)); } } protected function onValidateSession(param1:FacebookEvent) : void { if(param1.success && (param1.data as StringResultData).value == this.sessionData.uid) { this.getPermissions(); dispatchEvent(new FacebookEvent(FacebookEvent.CONNECT,false,false,true)); } else { this.sessionSO.clear(); this.sessionSO.flush(); this.sessionData = null; dispatchEvent(new FacebookEvent(FacebookEvent.VERIFYING_SESSION)); } } public function logout() : void { var _loc1_:FacebookCall = null; if(this.sessionSO == null) { if(this.apiKey == "") { throw new Error("Cannot logout. No api_key specified."); } this.sessionSO = SharedObject.getLocal(this.apiKey); } else { _loc1_ = this.facebook.post(new ExpireSession()); _loc1_.addEventListener(FacebookEvent.COMPLETE,this.onExpireSession,false,0,true); } } protected function onRevokePermissionComplete(param1:FacebookEvent) : void { var _loc3_:FacebookError = null; var _loc2_:String = this.queuedRevokePermissions.shift(); if(param1.success) { dispatchEvent(new FacebookEvent(FacebookEvent.PERMISSION_CHANGE,false,false,true,null,null,_loc2_,false)); } else { _loc3_ = new FacebookError(); _loc3_.errorMsg = "RevokePermission call failed"; dispatchEvent(new FacebookEvent(FacebookEvent.ERROR,false,false,false,null,_loc3_)); } } protected function onExpireSession(param1:FacebookEvent) : void { this.sessionSO.clear(); this.sessionSO.flush(); this.sessionData = null; dispatchEvent(new FacebookEvent(FacebookEvent.LOGOUT,false,false,true)); } protected function onLoginSuccess(param1:FacebookEvent) : void { var _loc2_:RegExp = /\{.+?\}/; var _loc3_:String = _loc2_.exec(unescape(this.loginWin.sessionParams))[0]; var _loc4_:Object = com.adobe.serialization.json.JSON.decode(_loc3_); this.populateSessionData(_loc4_); this.facebook = new Facebook(); this.facebook.startSession(new DesktopSession(this.apiKey,this.sessionData.secret,this.sessionData.session_key)); this.getPermissions(); if(this.queuedGrantPermissions.length) { this.grantPermissions(this.queuedGrantPermissions); } this.sessionSO.data.session_key = this.sessionData.session_key; this.sessionSO.data.secret = this.sessionData.secret; this.sessionSO.data.expires = this.sessionData.expires; this.sessionSO.data.uid = this.sessionData.uid; this.sessionSO.flush(); dispatchEvent(new FacebookEvent(FacebookEvent.CONNECT,false,false,true)); } protected function onGetPermissionsIOError(param1:IOErrorEvent) : void { var _loc2_:FacebookError = new FacebookError(); _loc2_.errorMsg = "Getting Permissions IO Error"; _loc2_.errorEvent = param1; dispatchEvent(new FacebookEvent(FacebookEvent.ERROR,false,false,false,null,_loc2_)); } public function revokePermissions(param1:Array) : void { var _loc2_:Array = null; var _loc3_:String = null; var _loc4_:FacebookCall = null; this.queuedRevokePermissions = param1; if(this.sessionData == null) { this.login(this.apiKey); } else { _loc2_ = []; while(this.queuedRevokePermissions.length) { _loc3_ = this.queuedRevokePermissions.shift(); _loc2_.push(_loc3_); _loc4_ = this.facebook.post(new RevokeExtendedPermission(_loc3_,this.sessionData.uid)); _loc4_.addEventListener(FacebookEvent.COMPLETE,this.onRevokePermissionComplete,false,0,true); } this.queuedRevokePermissions = _loc2_; } } protected function onGetPermissionsFailure(param1:JSONEvent) : void { var _loc2_:FacebookError = new FacebookError(); _loc2_.errorMsg = "Getting Permissions Failure"; dispatchEvent(new FacebookEvent(FacebookEvent.ERROR,false,false,false,null,_loc2_)); } protected function onGetPermissionsSecurityError(param1:SecurityErrorEvent) : void { var _loc2_:FacebookError = new FacebookError(); _loc2_.errorMsg = "Getting Permissions Security Error"; _loc2_.errorEvent = param1; dispatchEvent(new FacebookEvent(FacebookEvent.ERROR,false,false,false,null,_loc2_)); } protected function onLoginFailure(param1:FacebookEvent) : void { dispatchEvent(param1); } public function login(param1:String = "") : void { var _loc2_:FacebookCall = null; if(param1 != "") { this.apiKey = param1; } if(this.apiKey == "") { throw new Error("Cannot login. No api_key specified."); } this.sessionSO = SharedObject.getLocal(this.apiKey); if(this.sessionSO.data.session_key != null) { this.populateSessionData(this.sessionSO.data); this.facebook = new Facebook(); this.facebook.startSession(new DesktopSession(this.apiKey,this.sessionData.secret,this.sessionData.session_key)); _loc2_ = this.facebook.post(new GetLoggedInUser()); _loc2_.addEventListener(FacebookEvent.COMPLETE,this.onValidateLoginSession,false,0,true); } else { this.showLogin(); } } protected function onPermissionWinClose(param1:Event) : void { this.getPermissions(); } public function verifySession() : void { var _loc1_:FacebookCall = null; this.sessionSO = SharedObject.getLocal(this.apiKey); if(this.sessionSO.data.session_key != null) { this.populateSessionData(this.sessionSO.data); this.facebook = new Facebook(); this.facebook.startSession(new DesktopSession(this.apiKey,this.sessionData.secret,this.sessionData.session_key)); _loc1_ = this.facebook.post(new GetLoggedInUser()); _loc1_.addEventListener(FacebookEvent.COMPLETE,this.onValidateSession,false,0,true); } else { dispatchEvent(new FacebookEvent(FacebookEvent.VERIFYING_SESSION)); } } public function shutdown() : void { if(this.loginWin != null && !this.loginWin.closed) { this.loginWin.close(); } if(this.permissionWin != null && !this.permissionWin.closed) { this.permissionWin.close(); } } protected function onValidateLoginSession(param1:FacebookEvent) : void { if(param1.success && (param1.data as StringResultData).value == this.sessionData.uid) { this.getPermissions(); if(this.queuedGrantPermissions.length) { this.grantPermissions(this.queuedGrantPermissions); } dispatchEvent(new FacebookEvent(FacebookEvent.CONNECT,false,false,true)); } else { this.sessionSO.clear(); this.sessionSO.flush(); this.sessionData = null; this.login(this.apiKey); } } public function checkPermission(param1:String) : Boolean { return Boolean(this.permissions[param1]); } protected function populateSessionData(param1:Object) : void { this.sessionData = new SessionData(); this.sessionData.session_key = param1.session_key; this.sessionData.secret = param1.secret; this.sessionData.expires = param1.expires; this.sessionData.uid = param1.uid; } protected function showLogin() : void { this.loginWin = new LoginWindow(); this.loginWin.addEventListener(FacebookEvent.LOGIN_SUCCESS,this.onLoginSuccess,false,0,true); this.loginWin.addEventListener(FacebookEvent.LOGIN_FAILURE,this.onLoginFailure,false,0,true); this.loginWin.connect(this.apiKey); if(this.parentWindow != null) { this.loginWin.x = this.parentWindow.x; this.loginWin.y = this.parentWindow.y; } dispatchEvent(new FacebookEvent(FacebookEvent.LOGIN_WINDOW_SHOW)); } protected function onGetPermissionsSuccess(param1:JSONEvent) : void { this.permissions = (param1.data as Array)[0]; dispatchEvent(new FacebookEvent(FacebookEvent.PERMISSIONS_LOADED,false,false,true)); } } }