#!/usr/local/bin/perl -w
###########################################
# dropbox-init -- collect dropbox token
# Mike Schilli, 2011 (m@perlmeister.com)
###########################################
use strict;
use Mojolicious::Lite;
use Net::Dropbox::API;
use YAML qw(LoadFile DumpFile);

my $dev_key    = "iyaiu823ajksgwf";
my $dev_secret = "zlkj32lkj2kl3dp";
my $listen     = "http://localhost:8082";
my($home)      = glob '~';
my $CFG_FILE  = "$home/.dropbox.yml";

my $CFG = {};
$CFG = LoadFile( $CFG_FILE ) if 
  -f $CFG_FILE;

@ARGV = (qw(daemon --listen), $listen);

my $box = Net::Dropbox::API->new({
  key    => $dev_key, 
  secret => $dev_secret,
});

my $REQUEST_TOKEN;
my $REQUEST_SECRET;

###########################################
get '/' => sub {
###########################################
  my ( $self ) = @_;

  $box->callback_url( "$listen/callback" );
  $self->stash->{login_url} = $box->login;

  $REQUEST_TOKEN  = $box->request_token;
  $REQUEST_SECRET = $box->request_secret;
} => 'index';

###########################################
get '/callback' => sub {
###########################################
  my ( $self ) = @_;

  $box->auth({
    request_token  => 
      $self->param('oauth_token'), 
    request_secret => 
      $REQUEST_SECRET
  });

  $CFG->{ access_token } = 
    $box->access_token();
  $CFG->{ access_secret } = 
    $box->access_secret();

  DumpFile $CFG_FILE, $CFG;

  $self->render_text( "Token saved.",
        layout => 'default' );
};

app->start;

__DATA__
###########################################
@@ index.html.ep
% layout 'default';
<a href="<%= $login_url %>"
>Login on dropbox.com</a>

@@ layouts/default.html.ep
<!doctype html><html>
  <head><title>Token Fetcher</title></head>
    <body>
      <pre>
      <%== content %>
      </pre>
    </body>
</html>
