- Timestamp:
- 08/28/09 20:03:43 (3 months ago)
- Location:
- trunk/FireEagle/plugins/FireEagle
- Files:
-
- 14 added
- 1 removed
- 10 modified
-
fireeagle.pl (modified) (4 diffs)
-
lib/Net/FireEagle.pm (modified) (8 diffs)
-
lib/Net/OAuth.pm (added)
-
lib/Net/OAuth/AccessTokenRequest.pm (modified) (1 diff)
-
lib/Net/OAuth/AccessTokenResponse.pm (added)
-
lib/Net/OAuth/ConsumerRequest.pm (added)
-
lib/Net/OAuth/Message.pm (added)
-
lib/Net/OAuth/ProtectedResourceRequest.pm (modified) (1 diff)
-
lib/Net/OAuth/Request.pm (modified) (4 diffs)
-
lib/Net/OAuth/RequestTokenRequest.pm (modified) (2 diffs)
-
lib/Net/OAuth/RequestTokenResponse.pm (added)
-
lib/Net/OAuth/Response.pm (added)
-
lib/Net/OAuth/SignatureMethod/HMAC_SHA1.pm (modified) (1 diff)
-
lib/Net/OAuth/SignatureMethod/PLAINTEXT.pm (modified) (1 diff)
-
lib/Net/OAuth/SignatureMethod/RSA_SHA1.pm (modified) (3 diffs)
-
lib/Net/OAuth/Simple.pm (added)
-
lib/Net/OAuth/UserAuthRequest.pm (added)
-
lib/Net/OAuth/UserAuthResponse.pm (added)
-
lib/Net/OAuth/V1_0A (added)
-
lib/Net/OAuth/V1_0A/AccessTokenRequest.pm (added)
-
lib/Net/OAuth/V1_0A/RequestTokenRequest.pm (added)
-
lib/Net/OAuth/V1_0A/RequestTokenResponse.pm (added)
-
lib/Net/OAuth/V1_0A/UserAuthResponse.pm (added)
-
lib/URI (deleted)
-
tmpl/dialog_setup_fireeagle.tmpl (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/FireEagle/plugins/FireEagle/fireeagle.pl
r603 r1577 9 9 use URI::Escape; 10 10 11 our $VERSION = '1.0 3';11 our $VERSION = '1.04'; 12 12 13 13 our $ConsumerKey = 'q6QnDA0V96yU'; … … 118 118 return unless $id == $app->user->id; 119 119 } 120 if ( my $userpic_node = $tmpl->getElementById( 'u serpic_asset_id' ) ) {120 if ( my $userpic_node = $tmpl->getElementById( 'url' ) ) { 121 121 my $node = $tmpl->createElement( 'app:setting', { 122 122 id => 'fireeagle-location', … … 166 166 unless ( $app->param( 'done' ) ) { 167 167 my $fe = _fireeagle_client(); 168 $fe->callback( 'oob' ); 168 169 %arg = ( 169 170 id => $app->user->id, 170 171 auth_uri => $fe->get_authorization_url, 171 request_token => $fe-> {request_token},172 request_token_secret => $fe-> {request_token_secret},172 request_token => $fe->request_token, 173 request_token_secret => $fe->request_token_secret, 173 174 ); 174 175 } else { … … 186 187 my( $app ) = @_; 187 188 my $fe = _fireeagle_client(); 188 $fe->{request_token} = $app->param( 'request_token' ); 189 $fe->{request_token_secret} = $app->param( 'request_token_secret' ); 190 $fe->request_access_token; ## trap errors 189 $fe->request_access_token( 190 token => $app->param( 'request_token' ), 191 token_secret => $app->param( 'request_token_secret' ), 192 verifier => $app->param( 'verifier' ), 193 ); 191 194 my $user = $app->user; 192 195 $user->meta( 'fireeagle_access_token', $fe->access_token ); -
trunk/FireEagle/plugins/FireEagle/lib/Net/FireEagle.pm
r958 r1577 3 3 # Client library for FireEagle 4 4 use strict; 5 use LWP; 6 use CGI; 7 use Carp; 8 require Net::OAuth::Request; 9 require Net::OAuth::RequestTokenRequest; 10 require Net::OAuth::AccessTokenRequest; 11 require Net::OAuth::ProtectedResourceRequest; 12 13 BEGIN { 14 eval { require Math::Random::MT }; 15 unless ($@) { 16 Math::Random::MT->import(qw(srand rand)); 17 } 18 } 19 20 our $VERSION = '1.2'; 21 our $DEBUG = 0; 5 use base qw(Net::OAuth::Simple); 6 7 our $VERSION = '1.6'; 22 8 23 9 # FireEagle Endpoint URLs … … 28 14 our $UPDATE_API_URL = 'https://fireeagle.yahooapis.com/api/0.1/update'; 29 15 our $LOOKUP_API_URL = 'https://fireeagle.yahooapis.com/api/0.1/lookup'; 30 our $SIGNATURE_METHOD = 'HMAC-SHA1'; 31 our $UNAUTHORIZED = "Unauthorized."; 32 33 our @required_constructor_params = qw(consumer_key consumer_secret); 34 our @access_token_params = qw(access_token access_token_secret); 16 our $WITHIN_API_URL = 'https://fireeagle.yahooapis.com/api/0.1/within'; 17 our $RECENT_API_URL = 'https://fireeagle.yahooapis.com/api/0.1/recent'; 35 18 36 19 … … 139 122 =back 140 123 124 Alternatively when you create a new web-based application, a general-purpose 125 access token is issued to you along with your application key and secret. You 126 can get them at http://fireeagle.yahoo.net/developer/manage. 127 128 They are tied to your application and allow your application to make 129 general-purpose API method calls (often batch-style) to Fire Eagle. 130 131 You can read about them at 132 133 http://fireagle.yahoo.net/developer/documentation/using_oauth#feaccesstokens 134 135 136 137 You can pass them in using the param 138 139 =over 4 140 141 =item general_token 142 143 =item general_token_secret 144 145 =back 146 141 147 =cut 142 148 … … 144 150 my $proto = shift; 145 151 my $class = ref $proto || $proto; 146 my %params = @_; 147 my $client = bless \%params, $class; 148 149 # Verify arguments 150 $client->_check; 151 152 # Set up LibWWWPerl for HTTP requests 153 $client->{browser} = LWP::UserAgent->new; 154 155 # Client Object 156 return $client; 157 } 158 159 160 161 # Validate required constructor params 162 sub _check { 163 my $self = shift; 164 foreach my $param ( @required_constructor_params ) { 165 if ( not defined $self->{$param} ) { 166 die "Missing required parameter '$param'"; 167 } 168 } 169 } 170 171 =head2 authorized 172 173 Whether the client has the necessary credentials to be authorized. 174 175 Note that the credentials may be wrong and so the request may still fail. 176 177 =cut 178 179 sub authorized { 180 my $self = shift; 181 foreach my $param ( @access_token_params ) { 182 if ( not defined $self->{$param} ) { return 0; } 183 } 184 return 1; 185 } 186 187 =head2 consumer_key [consumer key] 188 189 Returns the current consumer key. 190 191 Can optionally set the consumer key. 192 193 =cut 194 195 sub consumer_key { 196 my $self = shift; 197 $self->_access('consumer_key', @_); 198 } 199 200 =head2 consumer_secret [consumer secret] 201 202 Returns the current consumer secret. 203 204 Can optionally set the consumer secret. 205 206 =cut 207 208 sub consumer_secret { 209 my $self = shift; 210 $self->_access('consumer_secret', @_); 211 } 212 213 214 =head2 access_token [access_token] 215 216 Returns the current access token. 217 218 Can optionally set a new token. 219 220 =cut 221 222 sub access_token { 223 my $self = shift; 224 $self->_access('access_token', @_); 225 } 226 227 228 =head2 access_token_secret [access_token_secret] 229 230 Returns the current access token secret. 231 232 Can optionally set a new secret. 233 234 =cut 235 236 sub access_token_secret { 237 my $self = shift; 238 return $self->_access('access_token_secret', @_); 239 } 240 241 =head2 request_token [request_token] 242 243 Returns the current request token. 244 245 Can optionally set a new token. 246 247 =cut 248 249 sub request_token { 250 my $self = shift; 251 $self->_access( 'request_token', @_); 252 } 253 254 255 =head2 request_token_secret [request_token_secret] 256 257 Returns the current request token secret. 258 259 Can optionally set a new secret. 260 261 =cut 262 263 sub request_token_secret { 264 my $self = shift; 265 return $self->_access( 'request_token_secret', @_); 266 } 267 268 269 270 271 272 sub _access { 273 my $self = shift; 274 my $key = shift; 275 $self->{$key} = shift if @_; 276 return $self->{$key}; 277 } 278 279 # generate a random number 280 sub _nonce { 281 return int( rand( 2**32 ) ); 282 } 283 284 =head2 request_access_token 285 286 Request the access token and access token secret for this user. 287 288 The user must have authorized this app at the url given by 289 C<get_authorization_url> first. 290 291 Returns the access token and access token secret but also sets 292 them internally so that after calling this method you can 293 immediately call C<location> or C<update_location>. 294 295 =cut 296 297 sub request_access_token { 298 my $self = shift; 299 print "REQUESTING ACCESS TOKEN\n" if $DEBUG; 300 my $access_token_response = $self->_make_request( 301 'Net::OAuth::AccessTokenRequest', 302 $ACCESS_TOKEN_URL, 'GET', 303 token => $self->{request_token}, 304 token_secret => $self->{request_token_secret}, 305 ); 306 307 # Cast response into CGI query for EZ parameter decoding 308 my $access_token_response_query = 309 new CGI( $access_token_response->content ); 310 311 # Split out token and secret parameters from the access token response 312 $self->{access_token} = $access_token_response_query->param('oauth_token'); 313 $self->{access_token_secret} = 314 $access_token_response_query->param('oauth_token_secret'); 315 316 die "ERROR: FireEagle did not reply with an access token" 317 unless ( $self->{access_token} && $self->{access_token_secret} ); 318 319 return ( $self->{access_token}, $self->{access_token_secret} ); 320 } 321 322 323 sub _request_request_token { 324 my $self = shift; 325 my $request_token_response = $self->_make_request( 326 'Net::OAuth::RequestTokenRequest', 327 $REQUEST_TOKEN_URL, 'GET'); 328 329 die "GET for $REQUEST_TOKEN_URL failed: ".$request_token_response->status_line 330 unless ( $request_token_response->is_success ); 331 332 # Cast response into CGI query for EZ parameter decoding 333 my $request_token_response_query = 334 new CGI( $request_token_response->content ); 335 336 # Split out token and secret parameters from the request token response 337 $self->{request_token} = 338 $request_token_response_query->param('oauth_token'); 339 $self->{request_token_secret} = 340 $request_token_response_query->param('oauth_token_secret'); 341 342 } 343 344 =head2 get_authorization_url 345 346 Get the URL to authorize a user. 347 348 =cut 349 350 sub get_authorization_url { 351 my $self = shift; 352 353 if (!defined $self->{request_token}) { 354 $self->_request_request_token; 355 } 356 return $AUTHORIZATION_URL . '?oauth_token=' . $self->{request_token}; 357 } 358 152 my %tokens = @_; 153 154 return $class->SUPER::new( tokens => \%tokens, 155 urls => { 156 authorization_url => $AUTHORIZATION_URL, 157 request_token_url => $REQUEST_TOKEN_URL, 158 access_token_url => $ACCESS_TOKEN_URL, 159 }); 160 161 } 359 162 360 163 =head2 location [opt[s] … … 379 182 380 183 my $url = $QUERY_API_URL; 381 382 $url .= '.'.$opts{format} if defined $opts{format}; 184 $url .= '.'.$opts{format} if defined $opts{format}; 383 185 384 186 return $self->_make_restricted_request($url, 'GET'); … … 404 206 my %opts = @_; 405 207 406 my $extras = $self->_munge_location($location);208 my %extras = $self->_munge('address', $location); 407 209 408 my $url = $UPDATE_API_URL; 409 410 $url .= '.'.$opts{format} if defined $opts{format}; 210 my $url = $UPDATE_API_URL; 211 $url .= '.'.$opts{format} if defined $opts{format}; 411 212 412 return $self->_make_restricted_request($url, 'POST', $extras);213 return $self->_make_restricted_request($url, 'POST', %extras); 413 214 } 414 215 … … 434 235 my %opts = @_; 435 236 436 my $extras = $self->_munge_location($location);437 438 my $url = $LOOKUP_API_URL;237 my %extras = $self->_munge('address', $location); 238 my $url = $LOOKUP_API_URL; 239 $url .= '.'.$opts{format} if defined $opts{format}; 439 240 440 $url .= '.'.$opts{format} if defined $opts{format}; 441 442 return $self->_make_restricted_request($url, 'GET', $extras); 443 } 444 445 sub _munge_location { 446 my $self = shift; 447 my $loc = shift; 448 my $ref = ref($loc); 449 return { address => $loc } if !defined $ref or "" eq $ref; 450 return $loc if 'HASH' eq $ref; 451 die "Can't understand location parameter in the form of a $ref ref"; 241 return $self->_make_restricted_request($url, 'GET', %extras); 242 } 243 244 =head2 within <query> <opt[s]> 245 246 Takes a Place ID or a WoE ID and returns a list of users using your 247 application who are within the bounding box of that location. 248 249 Return the result of the update in either xml or json 250 depending on C<opts>. 251 252 The query can either be a plain string or a hash reference containing 253 location parameters as described in 254 255 http://fireeagle.yahoo.net/developer/documentation/location#locparams 256 257 =cut 258 259 sub within { 260 my $self = shift; 261 my $location = shift; 262 my %opts = @_; 263 264 my %extras = $self->_munge('address', $location); 265 my $url = $WITHIN_API_URL; 266 $url .= '.'.$opts{format} if defined $opts{format}; 267 268 return $self->_make_restricted_request_general($url, 'GET', %extras); 269 } 270 271 272 =head2 recent <query> [opt[s]] 273 274 Query for users of an Application who have updated their locations recently. 275 276 Return the result of the update in either xml or json 277 depending on C<opts>. 278 279 Query is either a number representing a unix time stamp, to 280 specify the earliest update to return, or a hash reference containing 281 parameters as described in 282 283 http://fireagle.yahoo.net/developer/documentation/querying#recent 284 285 =cut 286 287 sub recent { 288 my $self = shift; 289 my $time = shift; 290 my %opts = @_; 291 292 my %extras = $self->_munge('time', $time); 293 my $url = $RECENT_API_URL; 294 $url .= '.'.$opts{format} if defined $opts{format}; 295 296 return $self->_make_restricted_request_general($url, 'GET', %extras); 297 } 298 299 sub _make_restricted_request_general { 300 my $self = shift; 301 my $response = $self->make_general_request(@_); 302 return $response->content; 452 303 } 453 304 454 305 sub _make_restricted_request { 455 306 my $self = shift; 456 457 croak $UNAUTHORIZED unless $self->authorized; 458 459 my $url = shift; 460 my $method = shift; 461 my $extra = shift || {}; 462 my $response = $self->_make_request( 463 'Net::OAuth::ProtectedResourceRequest', 464 $url, $method, 465 token => $self->{access_token}, 466 token_secret => $self->{access_token_secret}, 467 extra_params => $extra, 468 ); 307 my $response = $self->make_restricted_request(@_); 469 308 return $response->content; 470 309 } 471 310 472 sub _make_request { 473 my $self = shift; 474 475 my $class = shift; 476 my $url = shift; 477 my $method = lc(shift); 478 my %extra = @_; 479 480 my $request = $class->new( 481 consumer_key => $self->{consumer_key}, 482 consumer_secret => $self->{consumer_secret}, 483 request_url => $url, 484 request_method => uc($method), 485 signature_method => $SIGNATURE_METHOD, 486 timestamp => time, 487 nonce => $self->_nonce, 488 %extra, 489 ); 490 $request->sign; 491 die "COULDN'T VERIFY! Check OAuth parameters.\n" 492 unless $request->verify; 493 494 my $request_url = $url . '?' . $request->to_post_body; 495 my $response = $self->{browser}->$method($request_url); 496 die "$method on $request_url failed: ".$response->status_line 497 unless ( $response->is_success ); 498 499 return $response; 500 } 501 502 503 =head1 RANDOMNESS 504 505 If C<Math::Random::MT> is installed then any nonces 506 generated will use a Mersenne Twiser instead of Perl's 507 built in randomness function. 311 sub _munge { 312 my $self = shift; 313 my $key = shift; 314 my $item = shift || return (); 315 my $ref = ref($item); 316 return ( $key => $item ) if !defined $ref or "" eq $ref; 317 return %$item if 'HASH' eq $ref; 318 die "Can't understand $key parameter in the form of a $ref ref"; 319 } 508 320 509 321 =head1 BUGS … … 535 347 =head1 SEE ALSO 536 348 537 L<Net::OAuth >349 L<Net::OAuth::Simple> 538 350 539 351 =cut -
trunk/FireEagle/plugins/FireEagle/lib/Net/OAuth/AccessTokenRequest.pm
r533 r1577 4 4 use base 'Net::OAuth::Request'; 5 5 6 __PACKAGE__->add_required_ request_params(qw/token/);6 __PACKAGE__->add_required_message_params(qw/token/); 7 7 __PACKAGE__->add_required_api_params(qw/token_secret/); 8 8 sub allow_extra_params {0} 9 sub sign_message {1} 9 10 10 11 =head1 NAME 11 12 12 Net::OAuth:: RequestTokenRequest - An OAuth protocol request for an Access Token13 Net::OAuth::AccessTokenRequest - An OAuth protocol request for an Access Token 13 14 14 15 =head1 SEE ALSO 15 16 16 L<Net::OAuth ::Request>, L<http://oauth.net>17 L<Net::OAuth>, L<http://oauth.net> 17 18 18 19 =head1 AUTHOR -
trunk/FireEagle/plugins/FireEagle/lib/Net/OAuth/ProtectedResourceRequest.pm
r533 r1577 2 2 use warnings; 3 3 use strict; 4 use base 'Net::OAuth:: AccessTokenRequest';4 use base 'Net::OAuth::Request'; 5 5 6 __PACKAGE__->add_required_message_params(qw/token/); 7 __PACKAGE__->add_required_api_params(qw/token_secret/); 6 8 sub allow_extra_params {1} 9 sub sign_message {1} 10 7 11 8 12 =head1 NAME 9 13 10 Net::OAuth:: RequestTokenRequest - An OAuth protocol request for a Protected Resource14 Net::OAuth::ProtectedResourceRequest - An OAuth protocol request for a Protected Resource 11 15 12 16 =head1 SEE ALSO 13 17 14 L<Net::OAuth ::Request>, L<http://oauth.net>18 L<Net::OAuth>, L<http://oauth.net> 15 19 16 20 =head1 AUTHOR -
trunk/FireEagle/plugins/FireEagle/lib/Net/OAuth/Request.pm
r533 r1577 2 2 use warnings; 3 3 use strict; 4 use base qw/ Class::Data::Inheritable Class::Accessor/;5 use URI ::Escape;6 use U NIVERSAL::require;4 use base qw/Net::OAuth::Message/; 5 use URI; 6 use URI::QueryParam; 7 7 8 our $VERSION = '0. 05';8 our $VERSION = '0.19'; 9 9 10 __PACKAGE__->mk_classdata(required_ request_params => [qw/10 __PACKAGE__->mk_classdata(required_message_params => [qw/ 11 11 consumer_key 12 12 signature_method … … 15 15 /]); 16 16 17 __PACKAGE__->mk_classdata(optional_ request_params => [qw/17 __PACKAGE__->mk_classdata(optional_message_params => [qw/ 18 18 version 19 signature 19 20 /]); 20 21 … … 25 26 /]); 26 27 28 __PACKAGE__->mk_classdata(optional_api_params => [qw/ 29 signature_key 30 token_secret 31 extra_params 32 protocol_version 33 /]); 34 27 35 __PACKAGE__->mk_classdata(signature_elements => [qw/ 28 36 request_method 29 request_url30 normalized_ request_parameters37 normalized_request_url 38 normalized_message_parameters 31 39 /]); 32 40 41 __PACKAGE__->mk_classdata(all_message_params => [ 42 @{__PACKAGE__->required_message_params}, 43 @{__PACKAGE__->optional_message_params}, 44 ]); 45 46 __PACKAGE__->mk_classdata(all_api_params => [ 47 @{__PACKAGE__->required_api_params}, 48 @{__PACKAGE__->optional_api_params}, 49 ]); 50 51 __PACKAGE__->mk_classdata(all_params => [ 52 @{__PACKAGE__->all_api_params}, 53 @{__PACKAGE__->all_message_params}, 54 ]); 55 33 56 __PACKAGE__->mk_accessors( 34 @{__PACKAGE__->required_request_params}, 35 @{__PACKAGE__->optional_request_params}, 36 @{__PACKAGE__->required_api_params}, 37 qw/extra_params signature signature_key token_secret/ 57 @{__PACKAGE__->all_params}, 38 58 ); 39 40 sub add_required_request_params {41 my $class = shift;42 $class->required_request_params([@{$class->required_request_params}, @_]);43 $class->mk_accessors(@_);44 }45 46 sub add_optional_request_params {47 my $class = shift;48 $class->optional_request_params([@{$class->optional_request_params}, @_]);49 $class->mk_accessors(@_);50 }51 52 sub add_required_api_params {53 my $class = shift;54 $class->required_api_params([@{$class->required_api_params}, @_]);55 $class->mk_accessors(@_);56 }57 58 sub add_to_signature {59 my $class = shift;60 $class->signature_elements([@{$class->signature_elements}, @_]);61 }62 63 sub new {64 my $proto = shift;65 my $class = ref $proto || $proto;66 my %params = @_;67 $params{version} = '1.0' unless defined $params{version};68 my $req = bless \%params, $class;69 $req->check;70 return $req;71 }72 73 sub check {74 my $self = shift;75 foreach my $k (@{$self->required_request_params}, @{$self->required_api_params}) {76 if (not defined $self->{$k}) {77 die "Missing required parameter '$k'";78 }79 }80 if ($self->{extra_params} and $self->allow_extra_params) {81 foreach my $k (keys %{$self->{extra_params}}) {82 if ($k =~ /^oauth_/) {83 die "Parameter '$k' not allowed in arbitrary params"84 }85 }86 }87 }88 89 sub encode {90 my $str = shift;91 $str = "" unless defined $str;92 return URI::Escape::uri_escape_utf8($str,'^\w.~-');93 }94 95 sub decode {96 my $str = shift;97 return uri_unescape($str);98 }99 100 sub allow_extra_params {1}101 102 sub gather_request_parameters {103 my $self = shift;104 my %opts = @_;105 $opts{quote} = "" unless defined $opts{quote};106 $opts{params} ||= [];107 my %params;108 foreach my $k (@{$self->required_request_params}, @{$self->optional_request_params}, @{$opts{add}}) {109 $params{"oauth_$k"} = $self->$k;110 }111 if ($self->{extra_params} and !$opts{no_extra} and $self->allow_extra_params) {112 foreach my $k (keys %{$self->{extra_params}}) {113 $params{$k} = $self->{extra_params}{$k};114 }115 }116 if ($opts{hash}) {117 return \%params;118 }119 my @pairs;120 while (my ($k,$v) = each %params) {121 push @pairs, join('=', encode($k), $opts{quote} . encode($v) . $opts{quote});122 }123 return sort(@pairs); # sort not required here but makes module more testable124 }125 126 sub normalized_request_parameters {127 my $self = shift;128 return join('&', $self->gather_request_parameters);129 }130 131 sub signature_base_string {132 my $self = shift;133 return join('&', map(encode($self->$_), @{$self->signature_elements}));134 }135 59 136 60 sub signature_key { 137 61 my $self = shift; 138 62 # For some sig methods (I.e. RSA), users will pass in their own key 139 my $key = $self->get('signature_key'); 63 my $key = $self->get('signature_key'); 140 64 unless (defined $key) { 141 $key = encode($self->consumer_secret) . '&';142 $key .= encode($self->token_secret) if $self->can('token_secret');65 $key = Net::OAuth::Message::encode($self->consumer_secret) . '&'; 66 $key .= Net::OAuth::Message::encode($self->token_secret) if $self->can('token_secret'); 143 67 } 144 68 return $key; 145 69 } 146 70 147 sub sign{71 sub normalized_request_url { 148 72 my $self = shift; 149 my $class = $self->_signature_method_class; 150 $self->signature($class->sign($self, @_)); 73 my $url = $self->request_url; 74 Net::OAuth::Message::_ensure_uri_object($url); 75 $url->query(undef); 76 return $url; 151 77 } 152 78 153 sub verify {154 my $self = shift;155 my $class = $self->_signature_method_class;156 return $class->verify($self, @_);157 }158 159 sub _signature_method_class {160 my $self = shift;161 (my $signature_method = $self->signature_method) =~ s/\W+/_/g;162 my $klass = 'Net::OAuth::SignatureMethod::' . $signature_method;163 $klass->require or die "Unable to load $signature_method plugin";164 return $klass;165 }166 167 sub to_authorization_header {168 my $self = shift;169 my $realm = shift;170 my $sep = shift || ",";171 return join($sep, "OAuth realm=\"$realm\"",172 $self->gather_request_parameters(quote => '"', add => [qw/signature/], no_extra => 1));173 }174 175 sub from_authorization_header {176 my $proto = shift;177 my $class = ref $proto || $proto;178 my $header = shift;179 my %extra_params = @_;180 my @header = split /[\s]*,[\s]*/, $header;181 shift @header;182 my %params;183 foreach my $pair (@header) {184 my ($k,$v) = split /=/, $pair;185 if (defined $k and defined $v) {186 $v =~ s/(^"|"$)//g;187 ($k,$v) = map decode($_), $k, $v;188 $k =~ s/^oauth_//;189 $params{$k} = $v;190 }191 }192 return $class->new(%params, %extra_params);193 }194 195 sub to_post_body {196 my $self = shift;197 return join('&', $self->gather_request_parameters(add => [qw/signature/]));198 }199 200 sub to_hash {201 my $self = shift;202 return $self->gather_request_parameters(hash => 1, add => [qw/signature/]);203 }204 79 205 80 =head1 NAME … … 209 84 =head1 SEE ALSO 210 85 211 L< http://oauth.net>86 L<Net::OAuth>, L<http://oauth.net> 212 87 213 88 =head1 AUTHOR -
trunk/FireEagle/plugins/FireEagle/lib/Net/OAuth/RequestTokenRequest.pm
r533 r1577 3 3 use strict; 4 4 use base 'Net::OAuth::Request'; 5 6 sub sign_message {1} 5 7 6 8 =head1 NAME … … 10 12 =head1 SEE ALSO 11 13 12 L<Net::OAuth ::Request>, L<http://oauth.net>14 L<Net::OAuth>, L<http://oauth.net> 13 15 14 16 =head1 AUTHOR -
trunk/FireEagle/plugins/FireEagle/lib/Net/OAuth/SignatureMethod/HMAC_SHA1.pm
r533 r1577 25 25 =head1 SEE ALSO 26 26 27 L<Net::OAuth ::Request>, L<http://oauth.net>27 L<Net::OAuth>, L<http://oauth.net> 28 28 29 29 =head1 AUTHOR -
trunk/FireEagle/plugins/FireEagle/lib/Net/OAuth/SignatureMethod/PLAINTEXT.pm
r533 r1577 21 21 =head1 SEE ALSO 22 22 23 L<Net::OAuth ::Request>, L<http://oauth.net>23 L<Net::OAuth>, L<http://oauth.net> 24 24 25 25 =head1 AUTHOR -
trunk/FireEagle/plugins/FireEagle/lib/Net/OAuth/SignatureMethod/RSA_SHA1.pm
r533 r1577 7 7 my $self = shift; 8 8 my $request = shift; 9 my $key = shift || $request->signature_key; 9 10 die '$request->signature_key must be an RSA key object (e.g. Crypt::OpenSSL::RSA) that can sign($text)' 10 unless UNIVERSAL::can($ request->signature_key, 'sign');11 return encode_base64($ request->signature_key->sign($request->signature_base_string), "");11 unless UNIVERSAL::can($key, 'sign'); 12 return encode_base64($key->sign($request->signature_base_string), ""); 12 13 } 13 14 … … 17 18 my $key = shift || $request->signature_key; 18 19 die 'You must pass an RSA key object (e.g. Crypt::OpenSSL::RSA) that can verify($text,$sig)' 19 unless UNIVERSAL::can($ request->signature_key, 'verify');20 unless UNIVERSAL::can($key, 'verify'); 20 21 return $key->verify($request->signature_base_string, decode_base64($request->signature)); 21 22 } … … 27 28 =head1 SEE ALSO 28 29 29 L<Net::OAuth ::Request>, L<http://oauth.net>30 L<Net::OAuth>, L<http://oauth.net> 30 31 31 32 =head1 AUTHOR -
trunk/FireEagle/plugins/FireEagle/tmpl/dialog_setup_fireeagle.tmpl
r537 r1577 22 22 DOM.addEventListener( DOM.getElement( 'ready-button' ), 'click', function( ev ) { 23 23 Event.stop( ev ); 24 window.location = '<mt:var name="script_url">?__mode=link_fireeagle_account&request_token=<mt:var name="request_token">&request_token_secret=<mt:var name="request_token_secret"> ';24 window.location = '<mt:var name="script_url">?__mode=link_fireeagle_account&request_token=<mt:var name="request_token">&request_token_secret=<mt:var name="request_token_secret">&verifier=' + DOM.getElement( 'verifier-input' ).value; 25 25 } ); 26 26 } ); … … 48 48 49 49 <div id="step-two" class="hidden"> 50 <p style="margin-top: 15px;">When you've authorized Movable Type to access your Fire Eagle account, click the big "Ready!" button below.</p>50 <p style="margin-top: 15px;">When you've authorized Movable Type to access your Fire Eagle account, Fire Eagle will give you a verification code to enter to link your accounts. Paste or type the verification code in below, then click the "Link my accounts!" button.</p> 51 51 52 <button id="ready-button"><__trans phrase="READY!"></button> 52 <__trans phrase="Verification code:"> <input id="verifier-input" name="verifier" size="10" /> 53 <button id="ready-button"><__trans phrase="Link my accounts!"></button> 53 54 </div> 54 55 </mt:else>
