X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=scpubgit%2FApp-EzPz.git;a=blobdiff_plain;f=lib%2FApp%2FEzPz%2FUserStore.pm;fp=lib%2FApp%2FEzPz%2FUserStore.pm;h=8b0a557d9d2940f64c3e180247f76a79a63733d8;hp=0000000000000000000000000000000000000000;hb=5b26866ea3dc1b51e669b9e213d002c05de81e14;hpb=9ec9210e002a02c473e947cc024e64ef216caba2 diff --git a/lib/App/EzPz/UserStore.pm b/lib/App/EzPz/UserStore.pm new file mode 100644 index 0000000..8b0a557 --- /dev/null +++ b/lib/App/EzPz/UserStore.pm @@ -0,0 +1,64 @@ +package App::EzPz::UserStore; + +use App::EzPz::User; +use Scalar::Util 'blessed'; +use Authen::Htpasswd; +use Moo; + +has ezmlm_bindir => (is => 'ro', required => 1); + +has htpasswd_file => (is => 'ro', required => 1); + +has _htpasswd => (is => 'lazy'); + +sub _build__htpasswd { + my ($self) = @_; + return Authen::Htpasswd->new($self->htpasswd_file); +} + +sub all { + my ($self) = @_; + return map $self->_inflate_user($_), $self->_htpasswd->all_users; +} + +sub get { + my ($self, $name) = @_; + if (my $htp_user = $self->_htpasswd->lookup_user($name)) { + return $self->_inflate_user($htp_user); + } else { + return undef; + } +} + +sub add { + my ($self, $user) = @_; + unless (blessed($user)) { + $user = App::EzPz::User->new($user); + } + my $htp_file = $self->_htpasswd; + my $htp_user = $user->_htpasswd_user; + $htp_file->add_user($htp_user); + $htp_user->file($htp_file); + return $user; +} + +sub remove { + my ($self, $user) = @_; + $self->_htpasswd->remove_user($user->_htpasswd_user); + return $user; +} + +sub _inflate_user { + my ($self, $htp_user) = @_; + return App::EzPz::User->new( + htpasswd_user => $htp_user, + ); +} + +sub check_password { + my ($self, $name, $password) = @_; + return unless my $user = $self->get($name); + return $user->check_password($password); +} + +1;