tumblrのoauthのメモ

メモ。Net::OAuthじゃなくてOAuth::Lite使ったらすぐに出来た。時間あったらなんではまってたか調べたい。
そもそもoauth久しぶりに見た

use strict;
use warnings;

use OAuth::Lite::Consumer;
use Plack::Response;
use Plack::Request;
use Plack::Builder;

my $consumer = OAuth::Lite::Consumer->new(
    consumer_key => $consumer_key,
    consumer_secret => $consumer_secret,
    site => "http://www.tumblr.com",
    request_token_path => "/oauth/request_token",
    authorize_path => "/oauth/authorize",
    access_token_path => "/oauth/access_token",
);

my $app = sub {
    my $env = shift;

    my $req = Plack::Request->new($env);
    my $oauth_verifier = $req->query_parameters->{oauth_verifier};
    my $res = Plack::Response->new;
    my $session = $env->{'psgix.session'};

    if ( $oauth_verifier ) {
        my $request_token = $session->{request_token};
        my $access_token = $consumer->get_access_token(
            token => $request_token,
            verifier => $oauth_verifier,
        );

        $res->status(200);
        $res->content_type("text/plain");
        $res->body(sprintf("access_token:%s\naccess_token_secret:%s\n", $access_token->token, $access_token->secret))
    }
    else {
        my $request_token = $consumer->get_request_token;
        $session->{request_token} = $request_token;
        $res->redirect($consumer->url_to_authorize(
                token => $request_token,
            ));
    }

    $res->finalize;
};

builder {
    enable 'Session';
    $app;
};