Changeset 17507

Show
Ignore:
Timestamp:
08/12/08 15:51:43 (5 years ago)
Author:
lyokato
Message:

lang/perl/OAuth-Lite: updated for 1.10

Location:
lang/perl/OAuth-Lite/trunk/lib/OAuth/Lite
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/OAuth-Lite/trunk/lib/OAuth/Lite/Consumer.pm

    r8716 r17507  
    399399    my ($self, %args) = @_; 
    400400    $args{url} ||= $self->request_token_url; 
    401     my $request_token_url = $args{url} 
     401    my $request_token_url = delete $args{url} 
    402402        or Carp::croak qq/get_request_token needs url in hash params 
    403403            or set request_token_path on constructor./; 
    404     my $realm = $args{realm} || $self->{realm} || ''; 
     404    my $realm = delete $args{realm} || $self->{realm} || ''; 
    405405    my $res = $self->__request( 
    406         realm => $realm, 
    407         url   => $request_token_url, 
     406        realm  => $realm, 
     407        url    => $request_token_url, 
     408        params => {%args}, 
    408409    ); 
    409410    unless ($res->is_success) { 
  • lang/perl/OAuth-Lite/trunk/lib/OAuth/Lite/Server/mod_perl2.pm

    r4677 r17507  
    146146 
    147147    sub service { 
    148         my ($self, $params) = @_; 
     148        my $self = shift; 
    149149    } 
    150150 
     
    250250And disables the exchanged request-token. 
    251251 
    252 =head2 service($params) 
     252=head2 service 
    253253 
    254254Handle protected resource. 
     
    256256 
    257257    sub service { 
    258         my ($self, $params) = @_; 
     258        my $self = shift; 
     259        my $params = $self->{params}; 
    259260        my $token_string = $params->{oauth_token}; 
    260261        my $access_token = MyDB::Scheme->resultset('RequestToken')->find($token_string); 
     
    312313    $self->oauth->allow_extra_param('foo'); 
    313314 
     315=head2 request_method 
     316 
     317Request method (Upper Case). 
     318When the raw request method is POST and X-HTTP-Method-Override is define in header, 
     319return the value of X-HTTP-Method-Override. 
     320 
     321=head2 request_uri 
     322 
     323Returns request uri 
     324 
    314325=head2 request_body 
    315326 
     
    319330 
    320331Set proper 'WWW-Authentication' response header 
     332 
     333=head2 is_required_request_token 
     334 
     335Check if current request requires request-token. 
     336 
     337=head2 is_required_access_token 
     338 
     339Check if current request requires access-token. 
     340 
     341=head2 is_required_protected_resource 
     342 
     343Check if current request requires protected-resource. 
     344 
     345=head2 accepts_consumer_request 
     346 
     347You can adopt OAuth Consumer Request 1.0. 
     348 
     349See http://oauth.googlecode.com/svn/spec/ext/consumer_request/1.0/drafts/1/spec.html 
     350 
     351To adopt this spec, you have to set var 'AcceptConsumerRequest' on httpd.conf 
     352 
     353        <Location /resource> 
     354        PerlSetVar Mode PROTECTED_RESOURCE 
     355        PerlSetVar AcceptConsumerRequest 1 
     356        PerlResponseHandler MyServiceWithOAuth 
     357        </Location> 
     358 
     359Then override service method for protected resource. 
     360 
     361        sub service { 
     362                my $self = shift; 
     363        my $params = $self->{params}; 
     364 
     365                my $resource_owner_id; 
     366 
     367                if (exists $params->{oauth_token}) { 
     368 
     369                        my $access_token_value = $params->{oauth_token}; 
     370                        $resource_owner_id = $self->get_user_id_of_access_token($access_token_value); 
     371 
     372                } else { 
     373 
     374                        my $consumer_key = $params->{oauth_consumer_key}; 
     375                        $resource_owner_id = $self->get_user_id_of_consumer_developer($consumer_key); 
     376 
     377                } 
     378 
     379                my @resources = MyDB::Scheme->resultset('SomeResource')->search({ 
     380                                user_id => $resource_owner_id,   
     381                }); 
     382 
     383                # output resource data in the manner your api defines. 
     384                ... 
     385 
     386                return Apache2::Const::OK; 
     387 
     388        } 
    321389 
    322390=head2 error 
     
    378446    my $self = bless { 
    379447        request => $r, 
    380         oauth   => OAuth::Lite::ServerUtil->new, 
    381         realm   => undef, 
    382         secure  => 0, 
    383         mode    => PROTECTED_RESOURCE, 
     448        oauth => OAuth::Lite::ServerUtil->new, 
     449        realm => undef, 
     450        secure => 0, 
     451        mode => PROTECTED_RESOURCE, 
     452                accepts_consumer_request => 0, 
     453        params => {}, 
     454        completed_validation => 0, 
    384455    }, $class; 
    385456    my $realm = $self->request->dir_config('Realm'); 
    386457    $self->{realm} = $realm if $realm; 
     458    my $accept = $self->request->dir_config('AcceptConsumerRequest'); 
     459    $self->{accepts_consumer_request} = $accept if $accept; 
    387460    my $mode = $self->request->dir_config('Mode'); 
     461    my @valid_modes = (PROTECTED_RESOURCE, REQUEST_TOKEN, ACCESS_TOKEN); 
    388462    if ($mode) { 
    389         if (none { $mode eq $_ } (PROTECTED_RESOURCE, REQUEST_TOKEN, ACCESS_TOKEN)) { 
     463        if (none { $mode eq $_ } @valid_modes) { 
    390464            die "Invalid mode.";  
    391465        } else { 
     
    420494} 
    421495 
     496sub request_uri { 
     497    my $self = shift; 
     498    return $self->request->uri; 
     499} 
     500 
     501sub request_method { 
     502    my $self = shift; 
     503    unless (defined $self->{_request_method}) { 
     504        my $method = uc($self->request->method); 
     505        my $x_method = uc($self->request->headers_in->{'X-HTTP-Method-Override'} || ''); 
     506        if ($method eq 'POST' && ($x_method eq 'PUT' || $x_method eq 'DELETE')) { 
     507            $self->{_request_method} = $x_method; 
     508        } else { 
     509            $self->{_request_method} = $method; 
     510        } 
     511    } 
     512    return $self->{_request_method}; 
     513} 
     514 
    422515sub __service { 
    423516    my $self = shift; 
     
    427520    if ($authorization && $authorization =~ /^\s*OAuth/) { 
    428521        ($realm, $params) = parse_auth_header($authorization); 
    429     } elsif ( uc($self->request->method) eq 'POST' 
     522    } elsif ( $self->request_method() eq 'POST' 
    430523          &&  $self->request->headers_in->{'Content-Type'} =~ m!application/x-www-form-urlencoded!) { 
    431524        for my $pair (split /&/, $self->request_body) { 
     
    439532    } 
    440533 
    441     my $needs_to_check_token =  $self->__is_required_request_token 
    442                              ? 0 
    443                              : 1; 
     534    my $needs_to_check_token =  ( $self->is_required_request_token 
     535        || ( $self->is_required_protected_resource && $self->accepts_consumer_request ) ) 
     536        ? 0 
     537        : 1; 
    444538 
    445539    unless ($self->oauth->validate_params($params, $needs_to_check_token)) { 
    446540        return $self->errout(400, $self->oauth->errstr); 
    447541    } 
     542 
     543    $self->{params} = $params; 
    448544 
    449545    my $consumer_key = $params->{oauth_consumer_key}; 
     
    467563    my $request_uri = $uri->as_string; 
    468564 
    469     if ($self->__is_required_request_token) { 
     565    if ($self->is_required_request_token) { 
    470566 
    471567        $self->oauth->verify_signature( 
    472             method          => $self->request->method,  
     568            method          => $self->request_method(),  
    473569            params          => $params, 
    474570            url             => $request_uri, 
     
    476572        ) or return $self->errout(401, q{Invalid signature}); 
    477573 
    478         my $request_token = $self->publish_request_token($consumer_key); 
     574        my $request_token = $self->publish_request_token($consumer_key) 
     575            or return $self->errout(401, $self->errstr); 
    479576        return $self->__output_token($request_token); 
    480577 
    481     } elsif ($self->__is_required_access_token) { 
     578    } elsif ($self->is_required_access_token) { 
    482579 
    483580        my $token_value = $params->{oauth_token}; 
     
    487584        } 
    488585        $self->oauth->verify_signature( 
    489             method          => $self->request->method,  
     586            method          => $self->request_method(),  
    490587            params          => $params, 
    491588            url             => $request_uri, 
     
    499596    } else { 
    500597 
    501         my $token_value = $params->{oauth_token}; 
    502         my $token_secret = $self->get_access_token_secret($token_value); 
    503         unless (defined $token_secret) { 
    504             return $self->errout(401, q{Invalid token}); 
     598        my $token_secret = ''; 
     599        if (exists $params->{oauth_token}) { 
     600            my $token_value = $params->{oauth_token}; 
     601            $token_secret = $self->get_access_token_secret($token_value); 
     602            unless (defined $token_secret) { 
     603                return $self->errout(401, q{Invalid token}); 
     604            } 
    505605        } 
    506606 
    507607        $self->oauth->verify_signature( 
    508             method          => $self->request->method,  
     608            method          => $self->request_method(),  
    509609            params          => $params, 
    510610            url             => $request_uri, 
    511611            consumer_secret => $consumer_secret || '', 
    512             token_secret    => $token_secret || '', 
     612            token_secret    => $token_secret, 
    513613        ) or return $self->errout(401, q{Invalid signature}); 
     614 
     615        $self->{completed_validation} = 1; 
    514616 
    515617        return $self->service($params); 
     
    528630} 
    529631 
    530 sub __is_required_request_token { 
     632sub is_consumer_request { 
     633    my $self = shift; 
     634    unless ($self->is_required_protected_resource && $self->accepts_consumer_request) { 
     635        die qq(This method can be called only when accessing protected resource. 
     636            and accepts consumer-request.); 
     637    } 
     638    unless ($self->{completed_validation}) { 
     639        die qq(This method can be called only after validation); 
     640    } 
     641    return exists $self->{params}{oauth_token} ? 1 : 0; 
     642} 
     643 
     644sub is_required_request_token { 
    531645    my $self = shift; 
    532646    return ($self->{mode} eq REQUEST_TOKEN) ? 1 : 0; 
    533647} 
    534648 
    535 sub __is_required_access_token { 
     649sub is_required_access_token { 
    536650    my $self = shift; 
    537651    return ($self->{mode} eq ACCESS_TOKEN) ? 1 : 0; 
     652} 
     653 
     654sub is_required_protected_resource { 
     655    my $self = shift; 
     656    return ($self->{mode} eq PROTECTED_RESOURCE) ? 1 : 0; 
     657} 
     658 
     659sub accepts_consumer_request { 
     660    my $self = shift; 
     661    return $self->{accepts_consumer_request}; 
    538662} 
    539663 
     
    585709sub set_authenticate_header { 
    586710    my $self = shift; 
    587     $self->request->err_headers_out->add( 'WWW-Authenticate', 
    588         sprintf(q{OAuth realm="%s"}, $self->realm)); 
     711    my $header = sprintf(q{OAuth realm="%s"}, $self->realm); 
     712    $self->request->err_headers_out->add( 'WWW-Authenticate', $header ); 
    589713} 
    590714