The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package LWP::UserAgent::Keychain;

use strict;
use 5.8.1;
our $VERSION = '0.01';

use Mac::Glue ':all';
use base qw( LWP::UserAgent );

my $keychain = Mac::Glue->new("Keychain Scripting");

sub get_basic_credentials {
    my($self, $realm, $uri, $isproxy) = @_;

    for my $key ($keychain->obj(keys => keychain => "Login.keychain")->get) {
        if ($key->prop('class')->get eq 'cint' and
            $key->prop('server')->get eq $uri->host and
            $key->prop('protocol')->get eq $uri->scheme) {

            my $username = $key->prop('account')->get;
            my $password = $key->prop('password')->get;
            return ($username, $password);
        }
    }

    return (undef, undef);
}

1;
__END__

=encoding utf-8

=for stopwords LWP

=head1 NAME

LWP::UserAgent::Keychain - UserAgent that looks up passwords on Mac OS X keychain

=head1 SYNOPSIS

  use LWP::UserAgent::Keychain;

  my $ua = LWP::UserAgent::Keychain->new;
  $ua->get("http://proteceted.example.com/");

=head1 DESCRIPTION

LWP::UserAgent::Keychain is a LWP UserAgent object and it tries to
lookup username and password on Mac OS X keychain when it encounters
the page secured under HTTP basic or digest authentication.

By default, the tries to find the Internet Key in the keychain named
Login.

=head1 AUTHOR

Tatsuhiko Miyagawa E<lt>miyagawa@cpan.orgE<gt>

=head1 LICENSE

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

=head1 SEE ALSO

L<Mac::Glue>, L<LWP>

=cut