diff options
| author | Wilmer van der Gaast <wilmer@gaast.net> | 2010-05-01 14:53:59 +0100 | 
|---|---|---|
| committer | Wilmer van der Gaast <wilmer@gaast.net> | 2010-05-01 14:53:59 +0100 | 
| commit | c2ecadc08daa5163f4c90aef36de0e33d0d44f16 (patch) | |
| tree | a88c01b58c6ec593f47b6efffec5be6d80555737 /protocols/twitter/twitter.c | |
| parent | 85ef57f94436f23447c0d8603b52977824381854 (diff) | |
Cleaned up OAuth stuff: consumer key/secret should *not* be in lib/oauth.c.
Keep it in the Twitter module, and use the oauth_info struct through the
whole session to keep all this together.
Diffstat (limited to 'protocols/twitter/twitter.c')
| -rw-r--r-- | protocols/twitter/twitter.c | 46 | 
1 files changed, 28 insertions, 18 deletions
| diff --git a/protocols/twitter/twitter.c b/protocols/twitter/twitter.c index f5baeeea..6d43d819 100644 --- a/protocols/twitter/twitter.c +++ b/protocols/twitter/twitter.c @@ -27,7 +27,6 @@  #include "twitter_http.h"  #include "twitter_lib.h" -  /**   * Main loop function   */ @@ -65,6 +64,16 @@ static void twitter_main_loop_start( struct im_connection *ic )  	td->main_loop_id = b_timeout_add(60000, twitter_main_loop, ic);  } + +static struct oauth_service twitter_oauth = +{ +	"http://api.twitter.com/oauth/request_token", +	"http://api.twitter.com/oauth/access_token", +	"http://api.twitter.com/oauth/authorize", +	.consumer_key = "xsDNKJuNZYkZyMcu914uEA", +	.consumer_secret = "FCxqcr0pXKzsF9ajmP57S3VQ8V6Drk4o2QYtqMcOszo", +}; +  static gboolean twitter_oauth_callback( struct oauth_info *info );  static void twitter_oauth_start( struct im_connection *ic ) @@ -73,8 +82,7 @@ static void twitter_oauth_start( struct im_connection *ic )  	imcb_log( ic, "Requesting OAuth request token" ); -	td->oauth_info = oauth_request_token( -		TWITTER_OAUTH_REQUEST_TOKEN, twitter_oauth_callback, ic ); +	td->oauth_info = oauth_request_token( &twitter_oauth, twitter_oauth_callback, ic );  }  static gboolean twitter_oauth_callback( struct oauth_info *info ) @@ -99,26 +107,24 @@ static gboolean twitter_oauth_callback( struct oauth_info *info )  		sprintf( name, "twitter_%s", ic->acc->user );  		msg = g_strdup_printf( "To finish OAuth authentication, please visit " -		                       "%s?%s and respond with the resulting PIN code.", -		                       TWITTER_OAUTH_AUTHORIZE, info->auth_params ); +		                       "%s and respond with the resulting PIN code.", +		                       info->auth_url );  		imcb_buddy_msg( ic, name, msg, 0, 0 );  		g_free( msg );  	}  	else if( info->stage == OAUTH_ACCESS_TOKEN )  	{ -		if( info->access_token == NULL ) +		if( info->token == NULL )  		{  			imcb_error( ic, "OAuth error: %s", info->http->status_string );  			imc_logout( ic, TRUE );  			return FALSE;  		} -		td->oauth = g_strdup( info->access_token ); -		  		/* IM mods didn't do this so far and it's ugly but I should  		   be able to get away with it... */ -		g_free( ic->acc->pass ); -		ic->acc->pass = g_strdup( info->access_token ); +		//g_free( ic->acc->pass ); +		//ic->acc->pass = g_strdup( info->access_token );  		twitter_main_loop_start( ic );  	} @@ -126,6 +132,7 @@ static gboolean twitter_oauth_callback( struct oauth_info *info )  	return TRUE;  } +  static char *set_eval_mode( set_t *set, char *value )  {  	if( g_strcasecmp( value, "one" ) == 0 || @@ -163,15 +170,15 @@ static void twitter_login( account_t *acc )  	td->user = acc->user;  	if( !set_getbool( &acc->set, "oauth" ) )  		td->pass = g_strdup( acc->pass ); -	else if( strstr( acc->pass, "oauth_token=" ) ) -		td->oauth = g_strdup( acc->pass ); +	//else if( strstr( acc->pass, "oauth_token=" ) ) +	//	td->oauth = g_strdup( acc->pass );  	td->home_timeline_id = 0;  	sprintf( name, "twitter_%s", acc->user );  	imcb_add_buddy( ic, name, NULL );  	imcb_buddy_status( ic, name, OPT_LOGGED_IN, NULL, NULL ); -	if( td->pass || td->oauth ) +	if( td->pass || td->oauth_info )  		twitter_main_loop_start( ic );  	else  		twitter_oauth_start( ic ); @@ -196,9 +203,7 @@ static void twitter_logout( struct im_connection *ic )  	if( td )  	{  		oauth_info_free( td->oauth_info ); -		  		g_free( td->pass ); -		g_free( td->oauth );  		g_free( td );  	} @@ -215,10 +220,15 @@ static int twitter_buddy_msg( struct im_connection *ic, char *who, char *message  	if (g_strncasecmp(who, "twitter_", 8) == 0 &&  	    g_strcasecmp(who + 8, ic->acc->user) == 0)  	{ -		if( set_getbool( &ic->acc->set, "oauth" ) && td->oauth_info ) +		if( set_getbool( &ic->acc->set, "oauth" ) && +		    td->oauth_info && td->oauth_info->token == NULL )  		{ -			oauth_access_token( TWITTER_OAUTH_ACCESS_TOKEN, message, td->oauth_info ); -			td->oauth_info = NULL; +			if( !oauth_access_token( message, td->oauth_info ) ) +			{ +				imcb_error( ic, "OAuth error: %s", "Failed to send access token request" ); +				imc_logout( ic, TRUE ); +				return FALSE; +			}  		}  		else  			twitter_post_status(ic, message); | 
