list name management
[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
7has ezmlm_bindir => (is => 'ro', required => 1);
8
9has htpasswd_file => (is => 'ro', required => 1);
10
11has _htpasswd => (is => 'lazy');
12
13sub _build__htpasswd {
14 my ($self) = @_;
396f4b0b 15 return use_module('Authen::Htpasswd')->new($self->htpasswd_file);
5b26866e 16}
17
18sub all {
19 my ($self) = @_;
20 return map $self->_inflate_user($_), $self->_htpasswd->all_users;
21}
22
23sub 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
32sub add {
33 my ($self, $user) = @_;
34 unless (blessed($user)) {
396f4b0b 35 $user = use_module('App::EzPz::User')->new($user);
5b26866e 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);
396f4b0b 41 $user->_set_ezmlm_bindir($self->ezmlm_bindir);
5b26866e 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) = @_;
396f4b0b 53 return use_module('App::EzPz::User')->new(
5b26866e 54 htpasswd_user => $htp_user,
396f4b0b 55 ezmlm_bindir => $self->ezmlm_bindir,
5b26866e 56 );
57}
58
59sub check_password {
60 my ($self, $name, $password) = @_;
61 return unless my $user = $self->get($name);
62 return $user->check_password($password);
63}
64
651;