The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl

use strict;
use File::Spec;
my $DIR;

BEGIN {
    (undef, $DIR, undef) = File::Spec->splitpath( File::Spec->rel2abs(__FILE__) );
    unshift @INC, "$DIR/../lib";
}

use YAML;
use Data::Dumper;

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

    # Retrive the Plack::Middleware::DoormanTwitter object
    my $doorman = $env->{'doorman.users.twitter'};

    my $status = $doorman->is_sign_in ? "Logged In As @{[ $doorman->twitter_screen_name ]}" : "Not Logged In";

    return [200, ['Content-Type' => 'text/html'], [
        qq{<html><body><nav>},
        qq{<a href="/">Home</a> },
        qq{<a href="/page1">Page 1</a> },
        qq{<a href="/page2">Page 2</a> },
        qq{<a href="/page3">Page 3</a> },
        $doorman->is_sign_in ? qq{ <a href="@{[ $doorman->sign_out_path ]}">Logout</a>} : qq{ <a href="@{[ $doorman->sign_in_path ]}">Login</a>},
        qq{</nav>},
        qq{<p>$status</p>},
        '<hr><pre>' . Data::Dumper->Dump([$env->{'psgix.session'}], ['session']) . "</pre>",
        '<hr><pre>' . Data::Dumper->Dump([$env], ['env']) . "</pre>",
        "</body></html>"
    ]];
};


# Register your test app at http://twitter.com/oauth_clients
# Must make it a 'broweser app' with 'callback' value in order to get it working.
# However, The 'callback' value in the app setting can be a random valid URL,
# the real, useful, proper callback url is given in the middleware.


unless (-f "$DIR/twitter.yml") {
    die "Construct $DIR/twitter.yml first, see $DIR/twitter.yml.example for example.\n";
}

my $twitter_config = YAML::LoadFile("$DIR/twitter.yml");

use Plack::Builder;
builder {
    enable "Session::Cookie";
    enable "DoormanTwitter", root_url => 'http://localhost:5000', scope => 'users',
        consumer_key    => $twitter_config->{consumer_key},
        consumer_secret => $twitter_config->{consumer_secret};
    $app;
};