diff options
| author | Wilmer van der Gaast <wilmer@gaast.net> | 2010-04-26 01:42:37 +0100 | 
|---|---|---|
| committer | Wilmer van der Gaast <wilmer@gaast.net> | 2010-04-26 01:42:37 +0100 | 
| commit | 508c340d1d12d3ca932001d7ee1dea1a4c81bf02 (patch) | |
| tree | 7afffb4e4258fb8190555afdc7b2707965894229 /lib/oauth.c | |
| parent | b2bc25c4483f4c2b419d91d479f38c3f07ef4226 (diff) | |
Successfully posted a tweet!
Twitter's tricky. It returns vars (user_id, screen_name) in the access token
that, the way I read the spec, should be included in all subsequent queries. 
However, stuff only started to work when I dropped those vars.
This code's definitely not pretty ATM. Need to clean up now that it actually
works.
Diffstat (limited to 'lib/oauth.c')
| -rw-r--r-- | lib/oauth.c | 40 | 
1 files changed, 23 insertions, 17 deletions
| diff --git a/lib/oauth.c b/lib/oauth.c index c166d96a..6731fe7e 100644 --- a/lib/oauth.c +++ b/lib/oauth.c @@ -174,9 +174,8 @@ const char *oauth_params_get( GSList **params, const char *key )  	return NULL;  } -GSList *oauth_params_parse( char *in ) +static void oauth_params_parse( GSList **params, char *in )  { -	GSList *ret = NULL;  	char *amp, *eq;  	while( in && *in ) @@ -189,7 +188,7 @@ GSList *oauth_params_parse( char *in )  		if( ( amp = strchr( eq + 1, '&' ) ) )  			*amp = '\0'; -		oauth_params_add( &ret, in, eq + 1 ); +		oauth_params_add( params, in, eq + 1 );  		*eq = '=';  		if( amp == NULL ) @@ -198,8 +197,6 @@ GSList *oauth_params_parse( char *in )  		*amp = '&';  		in = amp + 1;  	} -	 -	return ret;  }  void oauth_params_free( GSList **params ) @@ -311,10 +308,10 @@ static void oauth_request_token_done( struct http_request *req )  	if( req->status_code == 200 )  	{ -		GSList *params; +		GSList *params = NULL;  		st->auth_params = g_strdup( req->reply_body ); -		params = oauth_params_parse( st->auth_params ); +		oauth_params_parse( ¶ms, st->auth_params );  		st->token = g_strdup( oauth_params_get( ¶ms, "oauth_token" ) );  		oauth_params_free( ¶ms );  	} @@ -344,13 +341,13 @@ static void oauth_access_token_done( struct http_request *req )  	//st->func( st );  } -char *oauth_http_header( char *access_token, const char *method, const char *url ) +char *oauth_http_header( char *access_token, const char *method, const char *url, char *args )  { -	GSList *params, *l; -	char *token_secret, *sig, *params_s; +	GSList *params = NULL, *l; +	char *token_secret, *sig, *params_s, *s;  	GString *ret = NULL; -	params = oauth_params_parse( access_token ); +	oauth_params_parse( ¶ms, access_token );  	if( params == NULL )  		goto err;  	token_secret = g_strdup( oauth_params_get( ¶ms, "oauth_token_secret" ) ); @@ -360,12 +357,6 @@ char *oauth_http_header( char *access_token, const char *method, const char *url  	oauth_add_default_params( ¶ms ); -	params_s = oauth_params_string( params ); -	sig = oauth_sign( method, url, params_s, token_secret ); -	g_free( params_s ); -	sig = g_realloc( sig, strlen( sig ) * 3 + 1 ); -	http_encode( sig ); -	  	ret = g_string_new( "OAuth " );  	for( l = params; l; l = l->next )  	{ @@ -385,6 +376,21 @@ char *oauth_http_header( char *access_token, const char *method, const char *url  		g_string_append( ret, "\", " );  	} +	if( args ) +		oauth_params_parse( ¶ms, args ); +	if( ( s = strchr( url, '?' ) ) ) +	{ +		s = g_strdup( s + 1 ); +		oauth_params_parse( ¶ms, s + 1 ); +		g_free( s ); +	} +	 +	params_s = oauth_params_string( params ); +	sig = oauth_sign( method, url, params_s, token_secret ); +	g_free( params_s ); +	sig = g_realloc( sig, strlen( sig ) * 3 + 1 ); +	http_encode( sig ); +	  	g_string_append_printf( ret, "oauth_signature=\"%s\"", sig );  err: | 
