diff options
Diffstat (limited to 'protocols/twitter')
| -rw-r--r-- | protocols/twitter/twitter.c | 39 | ||||
| -rw-r--r-- | protocols/twitter/twitter.h | 1 | 
2 files changed, 37 insertions, 3 deletions
| diff --git a/protocols/twitter/twitter.c b/protocols/twitter/twitter.c index e2a5986b..eb05d9d5 100644 --- a/protocols/twitter/twitter.c +++ b/protocols/twitter/twitter.c @@ -69,17 +69,29 @@ static void twitter_oauth_callback( struct oauth_info *info );  static void twitter_oauth_start( struct im_connection *ic )  { +	imcb_log( ic, "Requesting OAuth request token" ); +  	oauth_request_token( TWITTER_OAUTH_REQUEST_TOKEN, twitter_oauth_callback, ic );  }  static void twitter_oauth_callback( struct oauth_info *info )  {  	struct im_connection *ic = info->data; +	struct twitter_data *td = ic->proto_data; -	if( info->request_token && info->access_token == NULL ) +	if( info->stage == OAUTH_REQUEST_TOKEN )  	{  		char name[strlen(ic->acc->user)+9], *msg; +		if( info->request_token == NULL ) +		{ +			imcb_error( ic, "OAuth error: %s", info->http->status_string ); +			imc_logout( ic, TRUE ); +			return; +		} +		 +		td->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.", @@ -87,6 +99,19 @@ static void twitter_oauth_callback( struct oauth_info *info )  		imcb_buddy_msg( ic, name, msg, 0, 0 );  		g_free( msg );  	} +	else if( info->stage == OAUTH_ACCESS_TOKEN ) +	{ +		if( info->access_token == NULL ) +		{ +			imcb_error( ic, "OAuth error: %s", info->http->status_string ); +			imc_logout( ic, TRUE ); +			return; +		} +		 +		td->oauth = g_strdup( info->access_token ); +		 +		twitter_main_loop_start( ic ); +	}  }  static char *set_eval_mode( set_t *set, char *value ) @@ -170,12 +195,20 @@ static void twitter_logout( struct im_connection *ic )   */  static int twitter_buddy_msg( struct im_connection *ic, char *who, char *message, int away )  { +	struct twitter_data *td = ic->proto_data; +	  	if (g_strncasecmp(who, "twitter_", 8) == 0 &&  	    g_strcasecmp(who + 8, ic->acc->user) == 0) -		twitter_post_status(ic, message); +	{ +		if( set_getbool( &ic->acc->set, "oauth" ) && td->oauth == NULL ) +			oauth_access_token( TWITTER_OAUTH_ACCESS_TOKEN, message, td->oauth_info ); +		else +			twitter_post_status(ic, message); +	}  	else +	{  		twitter_direct_messages_new(ic, who, message); -	 +	}  	return( 0 );  } diff --git a/protocols/twitter/twitter.h b/protocols/twitter/twitter.h index f1937bd0..9c046b66 100644 --- a/protocols/twitter/twitter.h +++ b/protocols/twitter/twitter.h @@ -37,6 +37,7 @@ struct twitter_data  	char* user;  	char* pass;  	char* oauth; +	struct oauth_info *oauth_info;  	guint64 home_timeline_id;  	gint main_loop_id;  	struct groupchat *home_timeline_gc; | 
