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