From 3e3dc478fc9b4eb90681df89156dfcc8f7f81481 Mon Sep 17 00:00:00 2001 From: franck cuny Date: Mon, 13 Sep 2010 13:31:56 +0200 Subject: initial import --- lib/Net/HTTP/Spore/Middleware/Auth/Basic.pm | 24 +++++++++++++++++ lib/Net/HTTP/Spore/Middleware/Auth/OAuth.pm | 37 ++++++++++++++++++++++++++ lib/Net/HTTP/Spore/Middleware/Format.pm | 37 ++++++++++++++++++++++++++ lib/Net/HTTP/Spore/Middleware/Format/Auto.pm | 17 ++++++++++++ lib/Net/HTTP/Spore/Middleware/Format/JSON.pm | 19 +++++++++++++ lib/Net/HTTP/Spore/Middleware/Format/XML.pm | 13 +++++++++ lib/Net/HTTP/Spore/Middleware/Format/YAML.pm | 12 +++++++++ lib/Net/HTTP/Spore/Middleware/LogDispatch.pm | 7 +++++ lib/Net/HTTP/Spore/Middleware/Runtime.pm | 22 +++++++++++++++ lib/Net/HTTP/Spore/Middleware/Test.pm | 12 +++++++++ lib/Net/HTTP/Spore/Middleware/Test/Response.pm | 28 +++++++++++++++++++ lib/Net/HTTP/Spore/Middleware/UserAgent.pm | 15 +++++++++++ 12 files changed, 243 insertions(+) create mode 100644 lib/Net/HTTP/Spore/Middleware/Auth/Basic.pm create mode 100644 lib/Net/HTTP/Spore/Middleware/Auth/OAuth.pm create mode 100644 lib/Net/HTTP/Spore/Middleware/Format.pm create mode 100644 lib/Net/HTTP/Spore/Middleware/Format/Auto.pm create mode 100644 lib/Net/HTTP/Spore/Middleware/Format/JSON.pm create mode 100644 lib/Net/HTTP/Spore/Middleware/Format/XML.pm create mode 100644 lib/Net/HTTP/Spore/Middleware/Format/YAML.pm create mode 100644 lib/Net/HTTP/Spore/Middleware/LogDispatch.pm create mode 100644 lib/Net/HTTP/Spore/Middleware/Runtime.pm create mode 100644 lib/Net/HTTP/Spore/Middleware/Test.pm create mode 100644 lib/Net/HTTP/Spore/Middleware/Test/Response.pm create mode 100644 lib/Net/HTTP/Spore/Middleware/UserAgent.pm (limited to 'lib/Net/HTTP/Spore/Middleware') diff --git a/lib/Net/HTTP/Spore/Middleware/Auth/Basic.pm b/lib/Net/HTTP/Spore/Middleware/Auth/Basic.pm new file mode 100644 index 0000000..18c1e16 --- /dev/null +++ b/lib/Net/HTTP/Spore/Middleware/Auth/Basic.pm @@ -0,0 +1,24 @@ +package Net::HTTP::Spore::Middleware::Auth::Basic; + +use Moose; +use MIME::Base64; + +extends 'Net::HTTP::Spore::Middleware'; + +has username => (isa => 'Str', is => 'rw', predicate => 'has_username'); +has password => (isa => 'Str', is => 'rw', predicate => 'has_password'); + +sub call { + my ( $self, $req ) = @_; + + if ( $self->has_username && $self->has_password ) { + $req->header( + 'Authorization' => 'Basic ' + . MIME::Base64::encode( + $self->username . ':' . $self->password, '' + ) + ); + } +} + +1; diff --git a/lib/Net/HTTP/Spore/Middleware/Auth/OAuth.pm b/lib/Net/HTTP/Spore/Middleware/Auth/OAuth.pm new file mode 100644 index 0000000..e30a45b --- /dev/null +++ b/lib/Net/HTTP/Spore/Middleware/Auth/OAuth.pm @@ -0,0 +1,37 @@ +package Net::HTTP::Spore::Middleware::Auth::OAuth; + +use Moose; +extends 'Net::HTTP::Spore::Middleware'; + +use Net::OAuth; +use MIME::Base64; + +has [qw/consumer_key consumer_secret token token_secret/] => ( + is => 'ro', + isa => 'Str', + required => 1, +); + +sub call { + my ( $self, $req ) = @_; + + my $request = Net::OAuth->request('protected resource')->new( + version => '1.0', + consumer_key => $self->consumer_key, + consumer_secret => $self->consumer_secret, + token => $self->token, + token_secret => $self->token_secret, + request_method => $req->method, + signature_method => 'HMAC-SHA1', + timestamp => time, + nonce => MIME::Base64::encode( time . $$ . rand ), + request_url => $req->uri, + # extra_params => \%post_args, + ); + + $request->sign; + my $auth = $request->to_authorization_header; + $req->header( 'Authorization' => $auth ); +} + +1; diff --git a/lib/Net/HTTP/Spore/Middleware/Format.pm b/lib/Net/HTTP/Spore/Middleware/Format.pm new file mode 100644 index 0000000..7acd376 --- /dev/null +++ b/lib/Net/HTTP/Spore/Middleware/Format.pm @@ -0,0 +1,37 @@ +package Net::HTTP::Spore::Middleware::Format; + +use Moose; +extends 'Net::HTTP::Spore::Middleware'; + +sub encode { die "must be implemented" } +sub decode { die "must be implemented" } +sub accept_type { die "must be implemented" } +sub content_type { die "must be implemented" } + +sub call { + my ( $self, $req ) = @_; + + return + if ( exists $req->env->{'sporex.format'} + && $req->env->{'sporex.format'} == 1 ); + + $req->header( $self->accept_type ); + + if ( $req->env->{'spore.payload'} ) { + $req->env->{'spore.payload'} = + $self->encode( $req->env->{'spore.payload'} ); + $req->header( $self->content_type ); + } + + $req->env->{'sporex.format'} = 1; + + return $self->response_cb( + sub { + my $res = shift; + my $content = $self->decode( $res->body ); + $res->body($content); + } + ); +} + +1; diff --git a/lib/Net/HTTP/Spore/Middleware/Format/Auto.pm b/lib/Net/HTTP/Spore/Middleware/Format/Auto.pm new file mode 100644 index 0000000..fd66b8c --- /dev/null +++ b/lib/Net/HTTP/Spore/Middleware/Format/Auto.pm @@ -0,0 +1,17 @@ +package Net::HTTP::Spore::Middleware::Format::Auto; + +use Moose; +extends 'Net::HTTP::Spore::Middleware::Format'; + +sub call { + my ( $self, $req ) = @_; + + $req->env->{'sporex.format'} = 1; + + return $self->response_cb( sub { + my $res = shift; + return $res; + }); +} + +1; diff --git a/lib/Net/HTTP/Spore/Middleware/Format/JSON.pm b/lib/Net/HTTP/Spore/Middleware/Format/JSON.pm new file mode 100644 index 0000000..61326cd --- /dev/null +++ b/lib/Net/HTTP/Spore/Middleware/Format/JSON.pm @@ -0,0 +1,19 @@ +package Net::HTTP::Spore::Middleware::Format::JSON; + +use JSON; +use Moose; +extends 'Net::HTTP::Spore::Middleware::Format'; + +has _json_parser => ( + is => 'rw', + isa => 'JSON', + lazy => 1, + default => sub { JSON->new->allow_nonref }, +); + +sub encode { $_[0]->_json_parser->encode( $_[1] ); } +sub decode { $_[0]->_json_parser->decode( $_[1] ); } +sub accept_type { ( 'Accept' => 'application/json' ) } +sub content_type { ( 'Content-Type' => 'application/json' ) } + +1; diff --git a/lib/Net/HTTP/Spore/Middleware/Format/XML.pm b/lib/Net/HTTP/Spore/Middleware/Format/XML.pm new file mode 100644 index 0000000..c4ae038 --- /dev/null +++ b/lib/Net/HTTP/Spore/Middleware/Format/XML.pm @@ -0,0 +1,13 @@ +package Net::HTTP::Spore::Middleware::Format::XML; + +use Moose; +extends 'Net::HTTP::Spore::Middleware::Format'; + +use XML::Simple; + +sub accept_type { ( 'Accept' => 'text/xml' ); } +sub content_type { ( 'Content-Type' => 'text/xml' ) } +sub encode { XMLout( $_[1] ) } +sub decode { XMLin( $_[1] ) } + +1; diff --git a/lib/Net/HTTP/Spore/Middleware/Format/YAML.pm b/lib/Net/HTTP/Spore/Middleware/Format/YAML.pm new file mode 100644 index 0000000..bd844ce --- /dev/null +++ b/lib/Net/HTTP/Spore/Middleware/Format/YAML.pm @@ -0,0 +1,12 @@ +package Net::HTTP::Spore::Middleware::Format::YAML; + +use YAML; +use Moose; +extends 'Net::HTTP::Spore::Middleware::Format'; + +sub encode { YAML::Decode( $_[1] ); } +sub decode { YAML::Load( $_[1] ); } +sub accept_type { ( 'Accept' => 'text/x-yaml' ) } +sub content_type { ( 'Content-Type' => 'text/x-yaml' ) } + +1; diff --git a/lib/Net/HTTP/Spore/Middleware/LogDispatch.pm b/lib/Net/HTTP/Spore/Middleware/LogDispatch.pm new file mode 100644 index 0000000..2724fcf --- /dev/null +++ b/lib/Net/HTTP/Spore/Middleware/LogDispatch.pm @@ -0,0 +1,7 @@ +package Net::HTTP::Spore::Middleware::LogDispatch; + +use Moose; +extends 'Net::HTTP::Spore::Middleware'; + + +1; diff --git a/lib/Net/HTTP/Spore/Middleware/Runtime.pm b/lib/Net/HTTP/Spore/Middleware/Runtime.pm new file mode 100644 index 0000000..1614c31 --- /dev/null +++ b/lib/Net/HTTP/Spore/Middleware/Runtime.pm @@ -0,0 +1,22 @@ +package Net::HTTP::Spore::Middleware::Runtime; + +use Moose; +extends 'Net::HTTP::Spore::Middleware'; +use Time::HiRes; + +sub call { + my ( $self, $req) = @_; + + my $start_time = [Time::HiRes::gettimeofday]; + + $self->response_cb( + sub { + my $res = shift; + my $req_time = sprintf '%.6f', + Time::HiRes::tv_interval($start_time); + $res->header('X-Spore-Runtime' => $req_time); + } + ); +} + +1; diff --git a/lib/Net/HTTP/Spore/Middleware/Test.pm b/lib/Net/HTTP/Spore/Middleware/Test.pm new file mode 100644 index 0000000..6cf2c9e --- /dev/null +++ b/lib/Net/HTTP/Spore/Middleware/Test.pm @@ -0,0 +1,12 @@ +package Net::HTTP::Spore::Middleware::Test; + +use strict; +use warnings; + +use parent qw/Net::HTTP::Spore::Middleware/; + +sub call { +# use YAML::Syck; warn Dump \@_; +} + +1; diff --git a/lib/Net/HTTP/Spore/Middleware/Test/Response.pm b/lib/Net/HTTP/Spore/Middleware/Test/Response.pm new file mode 100644 index 0000000..ca216c5 --- /dev/null +++ b/lib/Net/HTTP/Spore/Middleware/Test/Response.pm @@ -0,0 +1,28 @@ +package Net::HTTP::Spore::Middleware::Test::Response; + +use Moose; +extends 'Net::HTTP::Spore::Middleware'; + +has status => ( isa => 'Int', is => 'ro', lazy => 1, default => 200 ); +has headers => ( isa => 'ArrayRef', is => 'ro', default => sub { [] } ); +has callback => ( + isa => 'CodeRef', + is => 'ro', + lazy => 1, + default => sub { + sub { + my ( $self, $req ) = @_; + $req->new_response( $self->status, $self->headers, $self->body, ); + } + } +); + +has body => + ( isa => 'HashRef', is => 'ro', lazy => 1, default => sub { { foo => 1 } } ); + +sub call { + my ( $self, $req ) = @_; + $self->callback->($self, $req); +} + +1; diff --git a/lib/Net/HTTP/Spore/Middleware/UserAgent.pm b/lib/Net/HTTP/Spore/Middleware/UserAgent.pm new file mode 100644 index 0000000..0517c26 --- /dev/null +++ b/lib/Net/HTTP/Spore/Middleware/UserAgent.pm @@ -0,0 +1,15 @@ +package Net::HTTP::Spore::Middleware::UserAgent; + +use Moose; +extends qw/Net::HTTP::Spore::Middleware/; + +has useragent => (is => 'ro', isa => 'Str', required => 1); + +sub call { + my ($self, $req) = @_; + + $req->header('User-Agent' => $self->useragent); +} + + +1; -- cgit 1.4.1