Revision: 50170
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at August 13, 2011 08:23 by ryanstewart
Initial Code
<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
backgroundAlpha="0" actionBarVisible="false"
title="TwitterAuthView"
add="view1_addHandler(event)"
creationComplete="view1_creationCompleteHandler(event)"
removing="view1_removingHandler(event)">
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
import org.iotashan.oauth.OAuthConsumer;
import org.iotashan.oauth.OAuthRequest;
import org.iotashan.oauth.OAuthSignatureMethod_HMAC_SHA1;
import org.iotashan.oauth.OAuthToken;
import org.iotashan.utils.OAuthUtil;
import spark.events.ViewNavigatorEvent;
import vo.Profile;
private var consumerKey:String = "your consumer key";
private var consumerSecret:String = "your consumer secret";
private var twitterRequestURL:String = "https://api.twitter.com/oauth/request_token";
private var twitterAuthURL:String = "https://api.twitter.com/oauth/authorize";
private var twitterTokenURL:String = "https://api.twitter.com/oauth/access_token";
private var requestToken:OAuthToken;
private var twitterWebView:StageWebView;
private var accessRequest:OAuthRequest;
private var consumer:OAuthConsumer;
private var accessToken:OAuthToken;
private var thisProfile:Profile;
override public function set data(value:Object):void
{
thisProfile = value as Profile;
}
override public function createReturnObject():Object
{
return thisProfile;
}
protected function view1_addHandler(event:FlexEvent):void
{
if(navigator.poppedViewReturnedObject)
{
thisProfile = navigator.poppedViewReturnedObject.object as Profile;
}
}
protected function view1_creationCompleteHandler(event:FlexEvent):void
{
consumer = new OAuthConsumer(consumerKey,consumerSecret);
var oauth:OAuthRequest = new OAuthRequest(OAuthRequest.HTTP_MEHTOD_GET,twitterRequestURL,null,consumer);
var request:URLRequest = new URLRequest(oauth.buildRequest(new OAuthSignatureMethod_HMAC_SHA1()));
var loader:URLLoader = new URLLoader(request);
loader.addEventListener(Event.COMPLETE,onLoaderComplete);
}
protected function onLoadComplete(event:Event):void
{
// if(twitterWebView.location == 'https://api.twitter.com/oauth/authorize')
// {
// twitterWebView.loadURL("javascript:var myFunction="
// + "function(){document.location=document.body.innerHTML;}");
// twitterWebView.loadURL("javascript:myFunction();");
// }
// twitterWebView.loadURL("javascript:var myFunction="
// + "function(){document.location=document.body.innerHTML;}");
// twitterWebView.loadURL("javascript:myFunction();");
trace(twitterWebView.location);
}
protected function onLocationChanging(event:LocationChangeEvent):void
{
trace(event.location);
// trace('test');
}
protected function onLoaderComplete(event:Event):void
{
var baseHeight:int = actionBar.height + twitterInstructions.height + tiPinNumber.height + btnFinished.height+25;
requestToken = OAuthUtil.getTokenFromResponse(event.currentTarget.data);
var authRequest:URLRequest = new URLRequest('http://api.twitter.com/oauth/authorize?oauth_token='+requestToken.key);
twitterWebView = new StageWebView();
twitterWebView.viewPort = new Rectangle(0,baseHeight,stage.width,stage.height-baseHeight);
twitterWebView.stage = this.stage;
twitterWebView.assignFocus();
twitterWebView.loadURL(authRequest.url);
twitterWebView.addEventListener(LocationChangeEvent.LOCATION_CHANGING,onLocationChanging);
twitterWebView.addEventListener(Event.COMPLETE,onLoadComplete);
}
protected function button1_clickHandler(event:MouseEvent):void
{
var params:Object = new Object();
params.oauth_verifier = tiPinNumber.text;
accessRequest = new OAuthRequest(OAuthRequest.HTTP_MEHTOD_GET,twitterTokenURL,params,consumer,requestToken);
var accessUrlRequest:URLRequest = new URLRequest(accessRequest.buildRequest(new OAuthSignatureMethod_HMAC_SHA1()));
var accessLoader:URLLoader = new URLLoader(accessUrlRequest);
accessLoader.addEventListener(Event.COMPLETE,onAccessRequestComplete);
// navigator.popView();
}
protected function onAccessRequestComplete(event:Event):void
{
accessToken = OAuthUtil.getTokenFromResponse(event.currentTarget.data);
thisProfile.twitterAccessKey = accessToken.key;
thisProfile.twitterAccessSecret = accessToken.secret;
twitterWebView.dispose();
navigator.pushView(ConfigureSocialNetworksView,thisProfile);
}
protected function view1_removingHandler(event:ViewNavigatorEvent):void
{
twitterWebView.dispose();
}
]]>
</fx:Script>
<s:layout>
<s:VerticalLayout horizontalAlign="center" />
</s:layout>
<s:ActionBar id="actionBar" skinClass="skins.MyActionBarSkin" width="100%" />
<fx:Style source="styles/MainStyle.css" />
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:Label id="twitterInstructions" width="90%" styleName="LabelFont"
text="Log into twitter in the box below, then authorize the application and put the PIN number in the box below." />
<s:TextInput id="tiPinNumber" width="90%" skinClass="skins.TextInputSkin" styleName="LabelFont" />
<s:Button id="btnFinished" label="Finished" click="button1_clickHandler(event)" styleName="ButtonLabel"
width="90%" skinClass="skins.ContinueButtonSkin" />
</s:View>
Initial URL
Initial Description
Authenticating against Twitter within a Flex Mobile View. I do all of it within a StageWebView window so I can have them type the pin into the app while seeing it.
Initial Title
Twitter Authentication with Flex Mobile
Initial Tags
Initial Language
ActionScript 3