The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Plack::Middleware::OAuth::Handler::RequestTokenV2;
use warnings;
use strict;
use parent qw(Plack::Middleware::OAuth::Handler);

sub default_callback {
    my $self = shift;
    my $provider = $self->provider;
    my $env = $self->env;
    # 'REQUEST_URI' => '/oauth/twitter',
    # 'SCRIPT_NAME' => '/oauth',
    # 'PATH_INFO' => '/twitter',
    return URI->new( $env->{'psgi.url_scheme'} . '://' . 
        $env->{HTTP_HOST} . $env->{SCRIPT_NAME} . '/' . lc($provider) . '/callback' );
}

sub run {
    my $self = shift;
    my $config = $self->config;

	# "https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL";
	my $uri = URI->new( $config->{authorize_url} );
    my %query = (
		client_id     => $config->{client_id},
		redirect_uri  => $config->{redirect_uri}  || $self->default_callback,
		response_type => $config->{response_type} || 'code',
		scope         => $config->{scope},
    );
	$uri->query_form( %query );
	return $self->redirect( $uri );
}

1;