diff options
Diffstat (limited to 'protocols')
| -rw-r--r-- | protocols/twitter/twitter.c | 7 | ||||
| -rw-r--r-- | protocols/twitter/twitter.h | 1 | ||||
| -rw-r--r-- | protocols/twitter/twitter_http.c | 18 | ||||
| -rw-r--r-- | protocols/twitter/twitter_http.h | 2 | ||||
| -rw-r--r-- | protocols/twitter/twitter_lib.c | 10 | 
5 files changed, 29 insertions, 9 deletions
| diff --git a/protocols/twitter/twitter.c b/protocols/twitter/twitter.c index 726c7cb1..ead03c56 100644 --- a/protocols/twitter/twitter.c +++ b/protocols/twitter/twitter.c @@ -81,7 +81,10 @@ static void twitter_login( account_t *acc )  	twitter_connections = g_slist_append( twitter_connections, ic );  	td->user = acc->user; -	td->pass = acc->pass; +	if( strstr( acc->pass, "oauth_token=" ) == NULL ) +		td->pass = g_strdup( acc->pass ); +	else +		td->oauth = g_strdup( acc->pass );  	td->home_timeline_id = 0;  	ic->proto_data = td; @@ -118,6 +121,8 @@ static void twitter_logout( struct im_connection *ic )  	if( td )  	{ +		g_free( td->pass ); +		g_free( td->oauth );  		g_free( td );  	} diff --git a/protocols/twitter/twitter.h b/protocols/twitter/twitter.h index 88caa104..16620e1d 100644 --- a/protocols/twitter/twitter.h +++ b/protocols/twitter/twitter.h @@ -36,6 +36,7 @@ struct twitter_data  {  	char* user;  	char* pass; +	char* oauth;  	guint64 home_timeline_id;  	gint main_loop_id;  	struct groupchat *home_timeline_gc; diff --git a/protocols/twitter/twitter_http.c b/protocols/twitter/twitter_http.c index 3632140f..93e315fa 100644 --- a/protocols/twitter/twitter_http.c +++ b/protocols/twitter/twitter_http.c @@ -34,6 +34,7 @@  #include "url.h"  #include "misc.h"  #include "base64.h" +#include "oauth.h"  #include <ctype.h>  #include <errno.h> @@ -44,7 +45,7 @@ char *twitter_url_append(char *url, char *key, char* value);   * Do a request.   * This is actually pretty generic function... Perhaps it should move to the lib/http_client.c   */ -void *twitter_http(char *url_string, http_input_function func, gpointer data, int is_post, char* user, char* pass, char** arguments, int arguments_len) +void *twitter_http(char *url_string, http_input_function func, gpointer data, int is_post, char* user, char* pass, char* oauth_token, char** arguments, int arguments_len)  {  	url_t *url = g_new0( url_t, 1 );  	char *tmp; @@ -109,7 +110,20 @@ void *twitter_http(char *url_string, http_input_function func, gpointer data, in  	                            is_post ? "POST" : "GET", url->file, url->host );  	// If a pass and user are given we append them to the request. -	if (userpass_base64) +	if (oauth_token) +	{ +		char *full_header; +		 +		full_header = oauth_http_header(oauth_token, +		                                is_post ? "POST" : "GET", +		                                url_string, url_arguments); +		 +		tmp = g_strdup_printf("%sAuthorization: %s\r\n", request, full_header); +		g_free(request); +		g_free(full_header); +		request = tmp; +	} +	else if (userpass_base64)  	{  		tmp = g_strdup_printf("%sAuthorization: Basic %s\r\n", request, userpass_base64);  		g_free(request); diff --git a/protocols/twitter/twitter_http.h b/protocols/twitter/twitter_http.h index ec4a0b7c..1e29fb99 100644 --- a/protocols/twitter/twitter_http.h +++ b/protocols/twitter/twitter_http.h @@ -28,7 +28,7 @@  #include "http_client.h"  void *twitter_http(char *url_string, http_input_function func, gpointer data, int is_post,  -					char* user, char* pass, char** arguments, int arguments_len); +                   char* user, char* pass, char *oauth_token, char** arguments, int arguments_len);  #endif //_TWITTER_HTTP_H diff --git a/protocols/twitter/twitter_lib.c b/protocols/twitter/twitter_lib.c index d58afd73..c91f8bbf 100644 --- a/protocols/twitter/twitter_lib.c +++ b/protocols/twitter/twitter_lib.c @@ -129,7 +129,7 @@ void twitter_get_friends_ids(struct im_connection *ic, int next_cursor)  	char* args[2];  	args[0] = "cursor";  	args[1] = g_strdup_printf ("%d", next_cursor); -	twitter_http(TWITTER_FRIENDS_IDS_URL, twitter_http_get_friends_ids, ic, 0, td->user, td->pass, args, 2); +	twitter_http(TWITTER_FRIENDS_IDS_URL, twitter_http_get_friends_ids, ic, 0, td->user, td->pass, td->oauth, args, 2);  	g_free(args[1]);  } @@ -395,7 +395,7 @@ void twitter_get_home_timeline(struct im_connection *ic, int next_cursor)  		args[3] = g_strdup_printf ("%llu", (long long unsigned int) td->home_timeline_id);  	} -	twitter_http(TWITTER_HOME_TIMELINE_URL, twitter_http_get_home_timeline, ic, 0, td->user, td->pass, args, td->home_timeline_id ? 4 : 2); +	twitter_http(TWITTER_HOME_TIMELINE_URL, twitter_http_get_home_timeline, ic, 0, td->user, td->pass, td->oauth, args, td->home_timeline_id ? 4 : 2);  	g_free(args[1]);  	if (td->home_timeline_id) { @@ -619,7 +619,7 @@ void twitter_get_statuses_friends(struct im_connection *ic, int next_cursor)  	args[0] = "cursor";  	args[1] = g_strdup_printf ("%d", next_cursor); -	twitter_http(TWITTER_SHOW_FRIENDS_URL, twitter_http_get_statuses_friends, ic, 0, td->user, td->pass, args, 2); +	twitter_http(TWITTER_SHOW_FRIENDS_URL, twitter_http_get_statuses_friends, ic, 0, td->user, td->pass, td->oauth, args, 2);  	g_free(args[1]);  } @@ -653,7 +653,7 @@ void twitter_post_status(struct im_connection *ic, char* msg)  	char* args[2];  	args[0] = "status";  	args[1] = msg; -	twitter_http(TWITTER_STATUS_UPDATE_URL, twitter_http_post_status, ic, 1, td->user, td->pass, args, 2); +	twitter_http(TWITTER_STATUS_UPDATE_URL, twitter_http_post_status, ic, 1, td->user, td->pass, td->oauth, args, 2);  //	g_free(args[1]);  } @@ -671,7 +671,7 @@ void twitter_direct_messages_new(struct im_connection *ic, char *who, char *msg)  	args[2] = "text";  	args[3] = msg;  	// Use the same callback as for twitter_post_status, since it does basically the same. -	twitter_http(TWITTER_DIRECT_MESSAGES_NEW_URL, twitter_http_post_status, ic, 1, td->user, td->pass, args, 4); +	twitter_http(TWITTER_DIRECT_MESSAGES_NEW_URL, twitter_http_post_status, ic, 1, td->user, td->pass, td->oauth, args, 4);  //	g_free(args[1]);  //	g_free(args[3]);  } | 
