The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

DESCRIPTION

The original Flickr Authentication has been deprecated in favor of OAuth. This example script shows one way to use Flickr::API to go from having just the consumer_key and consumer_secret (or api_key and api_secret using Flickr's terminology) to an authenticated token.

USAGE

 ./flickr_oauth_authentication.pl \
    --consumer_key="24680beef13579feed987654321ddcc6" \
    --consumer_secret="de0cafe4feed0242" \
  [ --perms={read,write,delete} \]
  [ --config_out="/path/to/a/writable/config.st" ]
  [ --help ]
  [ --man ]

If not specified, perms defaults to read.

The script will produce a url for you to enter into a browser then prompt you to enter the callback url that is returned by flickr.

It then does a Data::Dumper dump of the parameter keys and values which can be recorded for future use. If you want to make it more complete, you could modify the script to format and dump the information into a config file of some type.

PROGRAM FLOW

Following the flow laid out in https://www.flickr.com/services/api/auth.oauth.html

Flickr Step 1, Application: get a request token

The script takes the consumer_key and consumer secret and creates a Flickr::API object. It then calls the oauth_request_token method with an optional callback specified.

  my $api = Flickr::API->new($cli_args);

  $api->oauth_request_token({'callback' => 'https://127.0.0.1'});

Flickr Step 1, Flickr: return a request token.

The oauth request token is saved in the Flickr::API object.

Flickr Step 2. Application: Direct user to Flickr for Authorization

The script now calls the oauth_authorize_uri method with the optional perms parameter. The Flickr::API returns a uri which (in this case) is cut in the terminal and pasted into a browser.

  my $request2 = $api->oauth_authorize_uri({'perms' => $cli_args->{'perms'}});

  print "\n\nYou now need to open: \n\n$request2\n\nin a browser.\n ";

Flickr Step 2. Flickr: Prompts user to provide Authorization

Assuming all is well with the request token and oauth_authorize_uri Flickr will open a webpage to allow you to authenticate the application identified by the consumer_key to have the requested perms.

Flickr Step 2. User: User authorizes application access

This is you, granting permission to the application.

Flick Step 2, Flickr: redirects the user back to the application

Flickr returns an oauth_verifier in the callback. In this script you cut the callback from the browser and paste it into the terminal to continue on to the next step.

  $response2 = $term->readline('Enter the callback redirected url:   ');

The cutting and pasting is a little crude, but you only have to do it once.

Flickr Step 3, Application: exchange request token for access token

The script takes the request token and the oauth_verifier and exchanges them for an access token.

  my $request3 = $api->oauth_access_token(\%hash2);

Flickr Step 3, Flickr: returns an access token and token secret

Flickr will return an access token and token secret if all has gone well. These are stashed in the Flickr::API object.

Save the access information

How you save the access information is outside the scope of this example. However, the export_config method can be used to retrieve the oauth parameters from the Flickr::API object.

  my %oconfig = $api->export_config('protected resource');

  print Dumper(\%oconfig);

AUTHOR

Louis B. Moore <lbmoore at cpan.org>

COPYRIGHT AND LICENSE

Copyright 2014,2016, Louis B. Moore

This program is released under the Artistic License 2.0 by The Perl Foundation.