Changeset b2bc25c


Ignore:
Timestamp:
2010-04-25T23:21:00Z (15 years ago)
Author:
Wilmer van der Gaast <wilmer@…>
Branches:
master
Children:
508c340
Parents:
346dfd9
Message:

Added a function that generates an OAuth Authorization: HTTP header.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/oauth.c

    r346dfd9 rb2bc25c  
    5050        char *auth_params;
    5151        char *token;
     52       
     53        char *access_token;
    5254};
    5355
     
    147149                {
    148150                        g_free( l->data );
    149                         *params = g_slist_remove( *params, l );
     151                        *params = g_slist_remove( *params, l->data );
    150152                }
    151153        }
     
    223225       
    224226        return g_string_free( str, FALSE );
     227}
     228
     229static void oauth_add_default_params( GSList **params )
     230{
     231        char *s;
     232       
     233        oauth_params_set( params, "oauth_consumer_key", CONSUMER_KEY );
     234        oauth_params_set( params, "oauth_signature_method", "HMAC-SHA1" );
     235       
     236        s = g_strdup_printf( "%d", (int) time( NULL ) );
     237        oauth_params_set( params, "oauth_timestamp", s );
     238        g_free( s );
     239       
     240        s = oauth_nonce();
     241        oauth_params_set( params, "oauth_nonce", s );
     242        g_free( s );
     243       
     244        oauth_params_set( params, "oauth_version", "1.0" );
    225245}
    226246
     
    241261                params = *params_;
    242262       
    243         oauth_params_set( &params, "oauth_consumer_key", CONSUMER_KEY );
    244         oauth_params_set( &params, "oauth_signature_method", "HMAC-SHA1" );
    245        
    246         s = g_strdup_printf( "%d", (int) time( NULL ) );
    247         oauth_params_set( &params, "oauth_timestamp", s );
    248         g_free( s );
    249        
    250         s = oauth_nonce();
    251         oauth_params_set( &params, "oauth_nonce", s );
    252         g_free( s );
    253        
    254         oauth_params_set( &params, "oauth_version", "1.0" );
     263        oauth_add_default_params( &params );
    255264       
    256265        params_s = oauth_params_string( params );
     
    328337static void oauth_access_token_done( struct http_request *req )
    329338{
    330 }
     339        struct oauth_info *st = req->data;
     340       
     341        if( req->status_code == 200 )
     342                st->access_token = g_strdup( req->reply_body );
     343       
     344        //st->func( st );
     345}
     346
     347char *oauth_http_header( char *access_token, const char *method, const char *url )
     348{
     349        GSList *params, *l;
     350        char *token_secret, *sig, *params_s;
     351        GString *ret = NULL;
     352       
     353        params = oauth_params_parse( access_token );
     354        if( params == NULL )
     355                goto err;
     356        token_secret = g_strdup( oauth_params_get( &params, "oauth_token_secret" ) );
     357        if( token_secret == NULL )
     358                goto err;
     359        oauth_params_del( &params, "oauth_token_secret" );
     360       
     361        oauth_add_default_params( &params );
     362       
     363        params_s = oauth_params_string( params );
     364        sig = oauth_sign( method, url, params_s, token_secret );
     365        g_free( params_s );
     366        sig = g_realloc( sig, strlen( sig ) * 3 + 1 );
     367        http_encode( sig );
     368       
     369        ret = g_string_new( "OAuth " );
     370        for( l = params; l; l = l->next )
     371        {
     372                char *kv = l->data;
     373                char *eq = strchr( kv, '=' );
     374                char esc[strlen(kv)*3+1];
     375               
     376                if( eq == NULL )
     377                        break; /* WTF */
     378               
     379                strcpy( esc, eq + 1 );
     380                http_encode( esc );
     381               
     382                g_string_append_len( ret, kv, eq - kv + 1 );
     383                g_string_append_c( ret, '"' );
     384                g_string_append( ret, esc );
     385                g_string_append( ret, "\", " );
     386        }
     387       
     388        g_string_append_printf( ret, "oauth_signature=\"%s\"", sig );
     389       
     390err:
     391        oauth_params_free( &params );
     392        g_free( sig );
     393        g_free( token_secret );
     394       
     395        return ret ? g_string_free( ret, FALSE ) : NULL;
     396}
Note: See TracChangeset for help on using the changeset viewer.