Monday, March 28, 2011 at 12:00 AM.
system.verbs.apps.OAuth.appDance
on appDance (adrapp, flPromptForPin=false) { <<Changes <<3/27/11; 12:52:32 AM by DW <<Rewrite to allow for web apps. <<Old code <<on appDance (adrapp, flPromptForPin=false) <<Changes <<1/1/10; 11:22:57 AM by DW <<New optional param -- flPromptForPin, default false. See section about Desktop Clients on Authentication page of the Twitter API wiki. <<http://apiwiki.twitter.com/Authentication <<3/6/09; 9:02:07 AM by DW <<Minor code cleanup. <<2/12/09; 2:08:33 PM by DW <<Created. If successful, the table will have elements named accessToken and accessTokenSecret. <<OAuth.getRequestToken (adrapp^.requestTokenUrl, adrapp^.consumerkey, adrapp^.consumersecret, @adrapp^.token, @adrapp^.tokenSecret) << <<local (accessurl = adrapp^.authorizeUrl + "?oauth_token=" + adrapp^.token) <<webbrowser.openurl (accessurl) <<webbrowser.bringtofront () << <<if flPromptForPin //1/1/10 by DW <<if not dialog.ask ("Enter the 7-character PIN?", @adrapp^.pin) <<return <<adrapp^.pin = string.trimwhitespace (adrapp^.pin) //drop any trailing blanks user might have copied by accident << <<local (i) <<for i = 1 to 60 <<try <<local (verifier = nil) //1/1/10 by DW <<if flPromptForPin <<verifier = adrapp^.pin <<OAuth.getAccessToken (adrapp^.accessTokenUrl, adrapp^.consumerkey, adrapp^.consumersecret, adrapp^.token, adrapp^.tokensecret, verifier, @adrapp^.accessToken, @adrapp^.accessTokenSecret) <<if sizeof (adrapp^.accessToken) > 0 <<break <<clock.waitseconds (2) <<1/1/10; 11:22:57 AM by DW <<New optional param -- flPromptForPin, default false. See section about Desktop Clients on Authentication page of the Twitter API wiki. <<http://apiwiki.twitter.com/Authentication <<3/6/09; 9:02:07 AM by DW <<Minor code cleanup. <<2/12/09; 2:08:33 PM by DW <<Created. If successful, the table will have elements named accessToken and accessTokenSecret. OAuth.getRequestToken (adrapp^.requestTokenUrl, adrapp^.consumerkey, adrapp^.consumersecret, @adrapp^.token, @adrapp^.tokenSecret); local (accessurl = adrapp^.authorizeUrl + "?oauth_token=" + adrapp^.token); if flPromptForPin { webbrowser.openurl (accessurl); webbrowser.bringtofront (); bundle { if not dialog.ask ("Enter the 7-character PIN?", @adrapp^.pin) { return}; adrapp^.pin = string.trimwhitespace (adrapp^.pin)}} //drop any trailing blanks user might have copied by accident else { local (pta = html.getpagetableaddress ()); webserver.redirect (pta, accessurl)}; <<scratchpad.adrapp = adrapp; scratchpad.flPromptForPin = flPromptForPin thread.callscript (@OAuth.waitForAuthorization, {adrapp, flPromptForPin}); }; <<local (i) <<for i = 1 to 60 <<try <<local (verifier = nil) //1/1/10 by DW <<if flPromptForPin <<verifier = adrapp^.pin <<OAuth.getAccessToken (adrapp^.accessTokenUrl, adrapp^.consumerkey, adrapp^.consumersecret, adrapp^.token, adrapp^.tokensecret, verifier, @adrapp^.accessToken, @adrapp^.accessTokenSecret) <<if sizeof (adrapp^.accessToken) > 0 <<break <<clock.waitseconds (2) bundle { //test code appDance (scratchpad.adrapp)}
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.