add config object, connect user system up to lists code
[scpubgit/App-EzPz.git] / lib / App / EzPz / User.pm
CommitLineData
5b26866e 1package App::EzPz::User;
2
396f4b0b 3use Module::Runtime qw(use_module);
5b26866e 4use Moo;
5
6has _htpasswd_user => (
7 is => 'ro', init_arg => 'htpasswd_user', required => 1,
8 handles => [ qw(username password check_password) ],
9);
10
fda55d3e 11has ezmlm_config => (
12 is => 'rwp',
13 handles => {
14 _new_list_object => 'new_list_object'
15 }
16);
396f4b0b 17
5b26866e 18around BUILDARGS => sub {
19 my ($orig, $self) = (shift, shift);
20 my $args = $self->$orig(@_);
21 $args->{htpasswd_user} ||=
396f4b0b 22 use_module('Authen::Htpasswd::User')->new(
5b26866e 23 delete @{$args}{qw(username password)}
24 );
25 return $args
26};
27
396f4b0b 28sub list_names {
29 my ($self) = @_;
30 if (my $unsplit = ($self->_htpasswd_user->extra_info||[])->[0]) {
31 return split /\s*,\s*/, $unsplit;
32 } else {
33 return ();
34 }
35}
36
37sub set_list_names {
38 my ($self, @names) = @_;
39 my @extra = @{$self->_htpasswd_user->extra_info||[]};
40 $extra[0] = join(', ', @names);
41 $self->_htpasswd_user->extra_info(@extra);
42 return;
43}
44
fda55d3e 45sub has_list_name {
396f4b0b 46 my ($self, $name) = @_;
47 my %names; @names{my @names = $self->list_names} = ();
fda55d3e 48 return exists $names{$name};
49}
50
51sub add_list_name {
52 my ($self, $name) = @_;
53 unless ($self->has_list_name($name)) {
54 $self->set_list_names($self->list_names, $name);
55 }
396f4b0b 56 return $name;
57}
58
59sub remove_list_name {
60 my ($self, $name) = @_;
fda55d3e 61 if ($self->has_list_name($name)) {
396f4b0b 62 $self->set_list_names(grep !($_ eq $name), $self->list_names)
63 }
64 return $name;
65}
66
fda55d3e 67sub get_list {
68 my ($self, $name) = @_;
69 return undef unless $self->has_list_name($name);
70 return $self->_new_list_object({ list_name => $name });
71}
72
5b26866e 731;