From 53171e2b9e5ed0d632b86f2feeaf7e9624a3b9fb Mon Sep 17 00:00:00 2001 From: Iain C Docherty Date: Fri, 19 Apr 2013 08:19:22 -0400 Subject: [PATCH] Added missing files --- lib/WWW/Firebase/API.pm | 34 +++++++++ lib/WWW/Firebase/API/Connection.pm | 106 +++++++++++++++++++++++++++++ lib/WWW/Firebase/TokenGenerator.pm | 69 +++++++++++++++++++ 3 files changed, 209 insertions(+) create mode 100644 lib/WWW/Firebase/API.pm create mode 100644 lib/WWW/Firebase/API/Connection.pm create mode 100644 lib/WWW/Firebase/TokenGenerator.pm diff --git a/lib/WWW/Firebase/API.pm b/lib/WWW/Firebase/API.pm new file mode 100644 index 00000000..e9026b6b --- /dev/null +++ b/lib/WWW/Firebase/API.pm @@ -0,0 +1,34 @@ +package WWW::Firebase::API; + +use Moose; +use JSON; +use JSON::WebToken; +use DateTime; +use Data::Dumper; + +has 'secret' => ( + is => 'rw', + isa => 'Str', + required => 1, +); + +sub GET { +} + +sub PUT { +} + +sub POST { +} + +sub PATCH { +} + +sub DELETE { +} + + + +1; + + diff --git a/lib/WWW/Firebase/API/Connection.pm b/lib/WWW/Firebase/API/Connection.pm new file mode 100644 index 00000000..c4fc24c5 --- /dev/null +++ b/lib/WWW/Firebase/API/Connection.pm @@ -0,0 +1,106 @@ +package WWW::Firebase::API::Connection; + +use MooseX::Singleton; + +use Log::Log4perl; +use Data::Dumper; +use LWP::UserAgent; +use JSON; +use Carp; + +has 'base_uri' => (is => 'ro', required => 1); +has 'auth' => (is => 'rw', required => 1); +has 'user_agent' => (is => 'ro', lazy_build => 1); +has 'log' => (is => 'ro', lazy_build => 1); + +sub _build_log { + my ($self) = @_; + + return Log::Log4perl->get_logger('WWW::Firebase::API::Connection'); +} + +sub _build_user_agent { + my ($self) = @_; + + return LWP::UserAgent->new(env_proxy => 1); +} + + +sub GET { + my ($self, $url, $params) = @_; + + return $self->call({ + url => $url, + method => 'GET', + params => $params, + }); + +} + +sub POST { + my ($self, $url, $data, $params) = @_; + + return $self->call({ + url => $url, + method => 'POST', + params => $params, + data => $data, + }); +} + +sub PUT { + my ($self, $url, $data, $params) = @_; + + return $self->call({ + url => $url, + method => 'PUT', + params => $params, + data => $data, + }); +} + +sub DELETE { + my ($self, $url, $params) = @_; + + return $self->call({ + url => $url, + method => 'DELETE', + params => $params, + }); + +} + +sub call { + my ($self, $args) = @_; + + my $url = $args->{url}; + my $method = $args->{method}; + my $data = $args->{data}; + my $params = $args->{params}; + + if (defined $params) { + $params .= "&auth=".$self->auth; + } + else { + $params = "?auth=".$self->auth; + } + + + $self->log->debug("API-CALL: PATH $url : METHOD $method [$params]"); + + $url = $self->base_uri.$url.'.json'; + $url .= "?$params" if $params; + + my $request = HTTP::Request->new($method => $url); + $request->content(encode_json($data)) if $data; + my $response = $self->user_agent->request($request); + + if (not $response->is_success) { + Carp::croak("HTTP Error (".$response->status_line.")"); + } + print STDERR "[".$response->content."]\n"; + return decode_json($response->content); +} + +1; + diff --git a/lib/WWW/Firebase/TokenGenerator.pm b/lib/WWW/Firebase/TokenGenerator.pm new file mode 100644 index 00000000..c48227b1 --- /dev/null +++ b/lib/WWW/Firebase/TokenGenerator.pm @@ -0,0 +1,69 @@ +package WWW::Firebase::TokenGenerator; + +use Moose; +use JSON; +use JSON::WebToken; +use DateTime; +use Data::Dumper; + +has 'secret' => ( + is => 'rw', + isa => 'Str', + required => 1, +); + +has 'version' => ( + is => 'ro', + isa => 'Int', + default => 0, +); + +has 'expires' => ( + is => 'rw', + isa => 'Maybe[DateTime]', +); + +has 'not_before' => ( + is => 'rw', + isa => 'Maybe[DateTime]', +); + +has 'debug' => ( + is => 'rw', + isa => 'Maybe[Int]', +); + +has 'admin' => ( + is => 'rw', + isa => 'Maybe[Int]', +); + +has 'algorithm' => ( + is => 'rw', + isa => 'Str', + default => 'HS256', +); + +sub create_token { + my ($self, $data) = @_; + + # ensure that data is JSONifiable + my $json = encode_json($data); + + my $claims = { + d => $data, + v => $self->version, + iat => time, + }; + $claims->{admin} = $self->admin if $self->admin; + $claims->{debug} = $self->debug if $self->debug; + $claims->{nbf} = $self->not_before->epoch if defined $self->not_before; + $claims->{exp} = $self->expires->epoch if defined $self->expires; + + my $jwt = encode_jwt($claims, $self->secret, $self->algorithm); +} + + +1; + + -- 2.51.2