The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package WebService::Cmis::Agent::BasicAuth;

=head1 NAME

WebService::Cmis::Agent::BasicAuth - authenticate via HTTP basic auth

=head1 DESCRIPTION

This class implements authentication using HTTP basic authentication.
It will be used when no other authentication mechanism has been specified
for a client.

  my $client = WebService::Cmis::getClient(
    url => "http://cmis.alfresco.com/service/cmis",
    useragent => new WebService::Cmis::Agent::BasicAuth(
      user => "user",
      password => "password",
    );
  );
  
  my $repo = $client->getRepository;

Parent class: L<WebService::Cmis::Agent>

=cut

use strict;
use warnings;

use WebService::Cmis::Agent ();
our @ISA = qw(WebService::Cmis::Agent);

=head1 METHODS

=over 4

=item new(%params)

Create a new WebService::Cmis::Agent::BasicAuth. 

See L<LWP::UserAgent> for more options.

Parameters:

=over 4

=item * user

=item * password

=back

=cut 

sub new {
  my ($class, %params) = @_;

  my $user = delete $params{user};
  my $password = delete $params{password};

  my $this = $class->SUPER::new(%params);

  $this->{user} = $user;
  $this->{password} = $password;

  return $this;
}

=item login(%params) 

sets the user and password for the current user agent

Parameters:

=over 4

=item * user 

=item * password

=back

=cut

sub login {
  my $this = shift;
  my %params = @_;

  $this->{user} = $params{user} if defined $params{user};
  $this->{password} = $params{password} if defined $params{password};
}

=item logout() 

invalidates the user credentials

=cut

sub logout {
  my $this = shift;

  $this->{user} = undef;
  $this->{password} = undef;
}

=item get_basic_credentials()

overrides the method in LWP::UserAgent to implement the given authentication mechanism.

=cut

sub get_basic_credentials {
  my ($this, $realm) = @_;

  return ($this->{user}, $this->{password});
}

=back


=head1 COPYRIGHT AND LICENSE

Copyright 2012-2013 Michael Daum

This module is free software; you can redistribute it and/or modify it under
the same terms as Perl itself.  See F<http://dev.perl.org/licenses/artistic.html>.

=cut

1;