aboutsummaryrefslogtreecommitdiffstats
path: root/protocols/twitter/twitter.c
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/twitter/twitter.c')
-rw-r--r--protocols/twitter/twitter.c39
1 files changed, 36 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 );
}