diff options
author | franck cuny <franck@lumberjaph.net> | 2010-06-02 18:56:12 +0200 |
---|---|---|
committer | franck cuny <franck@lumberjaph.net> | 2010-06-02 18:56:12 +0200 |
commit | 223e96504478e507e4d8e1627cb748fd4ec1c14b (patch) | |
tree | 635b6bb077da968eaa202c437f1c9ea6edef3746 | |
parent | clean code (diff) | |
download | moosex-net-api-223e96504478e507e4d8e1627cb748fd4ec1c14b.tar.gz |
handle authentication
-rw-r--r-- | lib/MooseX/Net/API/Role/Authentication.pm | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/lib/MooseX/Net/API/Role/Authentication.pm b/lib/MooseX/Net/API/Role/Authentication.pm new file mode 100644 index 0000000..6c38641 --- /dev/null +++ b/lib/MooseX/Net/API/Role/Authentication.pm @@ -0,0 +1,47 @@ +package MooseX::Net::API::Role::Authentication; + +use Moose::Role; + +has api_username => ( + is => 'rw', + isa => 'Str', + predicate => 'has_api_username', +); + +has api_password => ( + is => 'rw', + isa => 'Str', + predicate => 'has_api_password', +); + +# ugly :( +after BUILDALL => sub { + my $self = shift; + + for (qw/api_username api_password/) { + my $predicate = 'has_' . $_; + my $value = $self->meta->get_option($_); + $self->$_($value) if $value && !$self->$predicate; + } + + if (my $has_auth = $self->meta->get_option('authentication')) { + my $auth_method = $self->meta->get_option('authentication_method'); + if ($auth_method) { + $self->api_useragent->add_handler( + request_prepare => sub { $self->$auth_method(@_) }); + } + else { + if ($self->has_api_username && $self->has_api_password) { + $self->api_useragent->add_handler( + request_prepare => sub { + my $req = shift; + $req->headers->authorization_basic($self->api_username, + $self->api_password); + } + ); + } + } + } +}; + +1; |