Commit | Line | Data |
5b26866e |
1 | package App::EzPz::UserStore; |
2 | |
396f4b0b |
3 | use Module::Runtime qw(use_module); |
5b26866e |
4 | use Scalar::Util 'blessed'; |
5b26866e |
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) = @_; |
396f4b0b |
15 | return use_module('Authen::Htpasswd')->new($self->htpasswd_file); |
5b26866e |
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)) { |
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 | |
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) = @_; |
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 | |
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; |