Apache-Auth-UserDB

 view release on metacpan or  search on metacpan

lib/Apache/Auth/User.pm  view on Meta::CPAN


use constant TRUE   => (0 == 0);
use constant FALSE  => not TRUE;

# Interface:
##############################################################################

sub new;

sub name;
sub password;
sub password_digest;

# Implementation:
##############################################################################

sub new {
    my ($class, %options) = @_;
    my $self = bless(\%options, $class);
    return $self;
}

sub name {
    my ($self, @value) = @_;
    $self->{name} = $value[0] if @value;
    return $self->{name};
}

sub password {
    my ($self, @value) = @_;
    if (@value) {
        $self->{password} = $value[0];
        $self->{password_digest} = undef;
    }
    return $self->{password};
}

sub password_digest {
    my ($self, @value) = @_;
    if (@value) {
        $self->{password_digest} = $value[0];
    }
    elsif (not defined($self->{password_digest})) {
        $self->{password_digest} = $self->_build_password_digest();
    }
    return $self->{password_digest};
}

TRUE;

lib/Apache/Auth/User/Basic.pm  view on Meta::CPAN


use constant TRUE   => (0 == 0);
use constant FALSE  => not TRUE;

use constant crypt_salt_characters  => ('.', '/', '0'..'9', 'A'..'Z', 'a'..'z');

# Interface:
##############################################################################

sub signature;
sub password;

# Implementation:
##############################################################################

sub signature {
    my ($self) = @_;
    return $self->name;
}

sub password {
    my ($self, @value) = @_;
    if (@value) {
        $self->{password} = $value[0];
        $self->{password_digest} = $self->_build_password_digest
            if defined($self->{password});
    }
    return $self->{password};
}

sub _build_password_digest {
    my ($self) = @_;
    
    croak("Unable to build password digest from incomplete data")
        if not defined($self->{password});
    
    return crypt(
        $self->{password},
        join('', ($self->crypt_salt_characters)[rand(64), rand(64)])
    );
}

TRUE;

lib/Apache/Auth/User/Digest.pm  view on Meta::CPAN

            $self->name . ':' . $self->realm
        :   undef;
}

sub realm {
    my ($self, @value) = @_;
    $self->{realm} = $value[0] if @value;
    return $self->{realm};
}

sub _build_password_digest {
    my ($self) = @_;
    
    croak("Unable to build password digest from incomplete data")
        if not defined($self->{realm}) or
           not defined($self->{name}) or
           not defined($self->{password});
    
    my $text = join(':', $self->{name}, $self->{realm}, $self->{password});
    return Digest::MD5::md5_hex($text);
}

TRUE;

lib/Apache/Auth/UserDB/File/Basic.pm  view on Meta::CPAN

##############################################################################

sub _parse_entry {
    my ($self, $entry) = @_;
    
    $entry =~ /^([^:]*):([^:]*)$/
        or croak('Malformed userdb entry encountered: "' . $entry . '"');
    
    return Apache::Auth::User::Basic->new(
        name            => $1,
        password_digest => $2
    );
}

sub _build_entry {
    my ($self, $user) = @_;
    
    return join(':',
        $user->name,
        $user->password_digest
    );
}

TRUE;

lib/Apache/Auth/UserDB/File/Digest.pm  view on Meta::CPAN


sub _parse_entry {
    my ($self, $entry) = @_;
    
    $entry =~ /^([^:]*):([^:]*):([^:]*)$/
        or croak('Malformed userdb entry encountered: "' . $entry . '"');
    
    return Apache::Auth::User::Digest->new(
        name            => $1,
        realm           => $2,
        password_digest => $3
    );
}

sub _build_entry {
    my ($self, $user) = @_;
    
    return join(':',
        $user->name,
        $user->realm,
        $user->password_digest
    );
}

TRUE;

t/00-user-basic.t  view on Meta::CPAN

    TEST_USERNAME   => 'Julian Mehnle',
    TEST_PASSWORD   => 'foobar'
};

# Create:
##############################################################################

{
    my $user = Apache::Auth::User::Basic->new(
        name        => TEST_USERNAME,
        password    => TEST_PASSWORD
    );
    isa_ok($user, 'Apache::Auth::User::Basic', 'Created user');
    
    is("$user", TEST_USERNAME, 'User object signature');
    
    my $password_digest = $user->password_digest;
    like($password_digest, qr/^[.\/0-9A-Za-z]{13}$/, 'Crypt algorithm is standard DES crypt');
    
    is(crypt(TEST_PASSWORD, $password_digest), $password_digest, 'Crypt algorithm works');
}

t/01-user-digest.t  view on Meta::CPAN

    TEST_PW_DIGEST  => 'ef4e1115f75e35811343a2207ba863a8'
};

# Create:
##############################################################################

{
    my $user = Apache::Auth::User::Digest->new(
        realm       => TEST_REALM,
        name        => TEST_USERNAME,
        password    => TEST_PASSWORD
    );
    isa_ok($user, 'Apache::Auth::User::Digest', 'Created user');
    
    is("$user", join(':', TEST_USERNAME, TEST_REALM), 'User object signature');
    
    is($user->password_digest, TEST_PW_DIGEST, 'Digest algorithm works');
}

t/02-userdb-file-basic.t  view on Meta::CPAN

##############################################################################

{
    my $userdb = Apache::Auth::UserDB::File::Basic->new(
        file_name   => USERDB_FILE
    );
    isa_ok($userdb, 'Apache::Auth::UserDB::File::Basic', 'Created userdb');
    
    my $user = Apache::Auth::User::Basic->new(
        name        => TEST_USERNAME,
        password    => TEST_PASSWORD
    );
    $userdb->add_user($user);
    is($userdb->users, 1, '1 created user in userdb');
    
    ok($userdb->commit(), 'Committed userdb');
}

# Open, read, and write:
##############################################################################

{
    my $userdb = Apache::Auth::UserDB::File::Basic->open(
        file_name   => USERDB_FILE
    );
    isa_ok($userdb, 'Apache::Auth::UserDB::File::Basic', 'Re-opened userdb');
    
    is($userdb->users, 1, '1 re-read user in userdb');
    
    my $user = Apache::Auth::User::Basic->new(
        name        => TEST_USERNAME,
        password    => TEST_PASSWORD2
    );
    $userdb->add_user($user);
    is($userdb->users, 1, '1 user in userdb after replacing 1 user');
    
    ok($userdb->commit(), 'Committed userdb');
}

unlink(USERDB_FILE);

t/03-userdb-file-digest.t  view on Meta::CPAN


{
    my $userdb = Apache::Auth::UserDB::File::Digest->new(
        file_name   => USERDB_FILE
    );
    isa_ok($userdb, 'Apache::Auth::UserDB::File::Digest', 'Created userdb');
    
    my $user = Apache::Auth::User::Digest->new(
        realm       => TEST_REALM,
        name        => TEST_USERNAME,
        password    => TEST_PASSWORD
    );
    $userdb->add_user($user);
    is($userdb->users, 1, '1 created user in userdb');
    
    ok($userdb->commit(), 'Committed userdb');
}

# Open, read, and write:
##############################################################################

t/03-userdb-file-digest.t  view on Meta::CPAN

    my $userdb = Apache::Auth::UserDB::File::Digest->open(
        file_name   => USERDB_FILE
    );
    isa_ok($userdb, 'Apache::Auth::UserDB::File::Digest', 'Re-opened userdb');
    
    is($userdb->users, 1, '1 re-read user in userdb');
    
    my $user = Apache::Auth::User::Digest->new(
        realm       => TEST_REALM2,
        name        => TEST_USERNAME,
        password    => TEST_PASSWORD
    );
    $userdb->add_user($user);
    is($userdb->users, 2, '2 users in userdb after adding 1 user');
    
    $user = Apache::Auth::User::Digest->new(
        realm       => TEST_REALM,
        name        => TEST_USERNAME,
        password    => TEST_PASSWORD
    );
    $userdb->add_user($user);
    is($userdb->users, 2, '2 users in userdb after replacing 1 user');
    
    ok($userdb->commit(), 'Committed userdb');
}

unlink(USERDB_FILE);



( run in 0.701 second using v1.01-cache-2.11-cpan-49f99fa48dc )