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