#!/usr/local/bin/perl -w use strict; use CGI; use CGI::Carp qw(fatalsToBrowser); use Net::FireEagle; use JSON::Any; my $cgi = CGI->new; # Obviously this bit is horrifically insecure # and you would never do it like this my $user = $cgi->param('user') || 'simon'; my $file = ".fireeagle"; my %tokens = Net::FireEagle->load_tokens($file); my $fe = Net::FireEagle->new(%tokens); if ($fe->authorized) { my $method = $cgi->param('method') || 'location'; eval "$method"; } # We haven't authorized yet so get the authorization url unless ($cgi->param('oauth_token')) { # First get the request token my $url = $fe->get_authorization_url(); # We could pass a param to the callback #my $url = $fe->get_authorization_url( oauth_callback => $cgi->url."?rand=".rand() ); my @cookies; foreach my $name (qw(request_token request_token_secret)) { my $cookie = $cgi->cookie(-name => $name, -value => $fe->$name); push @cookies, $cookie; } # You could just set the cookies and redirect directly to the url print $cgi->header(-cookie=>\@cookies); print head("Authorize"); print "Authorize\n"; print foot(); exit 0; # We've been given the request token } elsif ($cgi->param('oauth_token')) { foreach my $name (qw(request_token request_token_secret)) { my $value = $cgi->cookie($name); $fe->$name($value); } # Paranoid checking die "Request tokens don't match\n" unless $fe->request_token eq $cgi->param('oauth_token'); # Set the verifier $fe->verifier($cgi->param('oauth_verifier')); # Get the access token and save the values $fe->request_access_token; my %tokens = $fe->tokens; # Again, this is horrifically insecure Net::FireEagle->save_tokens($file, %tokens); # Redirect to clear the cruft from the headers #print $cgi->redirect($cgi->url); location(); } die "We should never get here\n"; sub recent { print $cgi->header; print head("Your location"); my $json = $fe->recent(undef, format => 'json'); my $obj = parse_json($json); use Data::Dumper; print "
".Dumper($obj)."
"; print foot(); exit 0; } sub location { print $cgi->header; print head("Your location"); my $json = $fe->location(format => 'json'); my $obj = parse_json($json); my $what = $obj->{user}->{location_hierarchy}->[0]; printf("%s (accuracy level: %s)
", $what->{name}, $what->{level_name}); print foot(); exit 0; } sub head { my $title = shift; return "\n\n\tFireEagle - $title\n\n\n" } sub foot { return "\n\n"; } sub parse_json { my $json = shift; die "Couldn't parse blank JSON" unless defined $json and $json !~ m!^\s*$!; my $obj = eval { JSON::Any->new->from_json($json) }; die $@ if $@; die "Couldn't parse JSON for some reason" unless defined $obj; return $obj; }