user store tests
[scpubgit/App-EzPz.git] / lib / App / EzPz / UserStore.pm
CommitLineData
5b26866e 1package App::EzPz::UserStore;
2
396f4b0b 3use Module::Runtime qw(use_module);
5b26866e 4use Scalar::Util 'blessed';
5b26866e 5use Moo;
6
fda55d3e 7has ezmlm_config => (
8 is => 'ro',
9 coerce => sub {
10 return $_[0] if blessed($_[0]);
11 return use_module('App::EzPz::EzmlmConfig')->new($_[0]);
12 }
13);
5b26866e 14
15has htpasswd_file => (is => 'ro', required => 1);
16
17has _htpasswd => (is => 'lazy');
18
19sub _build__htpasswd {
20 my ($self) = @_;
396f4b0b 21 return use_module('Authen::Htpasswd')->new($self->htpasswd_file);
5b26866e 22}
23
24sub all {
25 my ($self) = @_;
26 return map $self->_inflate_user($_), $self->_htpasswd->all_users;
27}
28
29sub get {
30 my ($self, $name) = @_;
31 if (my $htp_user = $self->_htpasswd->lookup_user($name)) {
32 return $self->_inflate_user($htp_user);
33 } else {
34 return undef;
35 }
36}
37
38sub add {
39 my ($self, $user) = @_;
40 unless (blessed($user)) {
396f4b0b 41 $user = use_module('App::EzPz::User')->new($user);
5b26866e 42 }
43 my $htp_file = $self->_htpasswd;
44 my $htp_user = $user->_htpasswd_user;
45 $htp_file->add_user($htp_user);
46 $htp_user->file($htp_file);
fda55d3e 47 $user->_set_ezmlm_config($self->ezmlm_config);
5b26866e 48 return $user;
49}
50
51sub remove {
52 my ($self, $user) = @_;
8dbc4688 53 $self->_htpasswd->delete_user($user->_htpasswd_user);
5b26866e 54 return $user;
55}
56
57sub _inflate_user {
58 my ($self, $htp_user) = @_;
396f4b0b 59 return use_module('App::EzPz::User')->new(
5b26866e 60 htpasswd_user => $htp_user,
fda55d3e 61 ezmlm_config => $self->ezmlm_config,
5b26866e 62 );
63}
64
65sub check_password {
66 my ($self, $name, $password) = @_;
67 return unless my $user = $self->get($name);
68 return $user->check_password($password);
69}
70
711;