package DJabberd::Authen::InMemoryOnly;
use strict;
use base 'DJabberd::Authen';
use Carp qw(croak);
sub new {
my $class = shift;
my $self = $class->SUPER::new;
$self->{_users} = {}; # username -> $password
return $self;
}
sub can_register_jids { 1 }
sub can_unregister_jids { 1 }
sub can_retrieve_cleartext { 1 }
sub unregister_jid {
my ($self, $cb, %args) = @_;
my $user = $args{'username'};
if (delete $self->{_users}{$user}) {
$cb->deleted;
} else {
$cb->notfound;
}
}
sub register_jid {
my ($self, $cb, %args) = @_;
my $user = $args{'username'};
my $pass = $args{'password'};
if (defined $self->{_users}{$user}) {
$cb->conflict;
}
$self->{_users}{$user} = $pass;
$cb->saved;
}
sub check_cleartext {
my ($self, $cb, %args) = @_;
my $user = $args{'username'};
my $pass = $args{'password'};
unless (defined $self->{_users}{$user}) {
return $cb->reject;
}
my $goodpass = $self->{_users}{$user};
unless ($pass eq $goodpass) {
return $cb->reject;
}
$cb->decline;
}
sub get_password {
my ($self, $cb, %args) = @_;
my $user = $args{'username'};
if (my $pass = $self->{_users}{$user}) {
$cb->set($pass);
return;
}
$cb->decline;
}
1;