add config object, connect user system up to lists code
[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_config => (
8   is => 'ro',
9   coerce => sub {
10     return $_[0] if blessed($_[0]);
11     return use_module('App::EzPz::EzmlmConfig')->new($_[0]);
12   }
13 );
14
15 has htpasswd_file => (is => 'ro', required => 1);
16
17 has _htpasswd => (is => 'lazy');
18
19 sub _build__htpasswd {
20   my ($self) = @_;
21   return use_module('Authen::Htpasswd')->new($self->htpasswd_file);
22 }
23
24 sub all {
25   my ($self) = @_;
26   return map $self->_inflate_user($_), $self->_htpasswd->all_users;
27 }
28
29 sub 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
38 sub add {
39   my ($self, $user) = @_;
40   unless (blessed($user)) {
41     $user = use_module('App::EzPz::User')->new($user);
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);
47   $user->_set_ezmlm_config($self->ezmlm_config);
48   return $user;
49 }
50
51 sub remove {
52   my ($self, $user) = @_;
53   $self->_htpasswd->remove_user($user->_htpasswd_user);
54   return $user;
55 }
56
57 sub _inflate_user {
58   my ($self, $htp_user) = @_;
59   return use_module('App::EzPz::User')->new(
60     htpasswd_user => $htp_user,
61     ezmlm_config => $self->ezmlm_config,
62   );
63 }
64
65 sub check_password {
66   my ($self, $name, $password) = @_;
67   return unless my $user = $self->get($name);
68   return $user->check_password($password);
69 }
70
71 1;