Commit | Line | Data |
5b26866e |
1 | package App::EzPz::User; |
2 | |
396f4b0b |
3 | use Module::Runtime qw(use_module); |
5b26866e |
4 | use Moo; |
5 | |
6 | has _htpasswd_user => ( |
7 | is => 'ro', init_arg => 'htpasswd_user', required => 1, |
8 | handles => [ qw(username password check_password) ], |
9 | ); |
10 | |
fda55d3e |
11 | has ezmlm_config => ( |
12 | is => 'rwp', |
13 | handles => { |
14 | _new_list_object => 'new_list_object' |
15 | } |
16 | ); |
396f4b0b |
17 | |
5b26866e |
18 | around 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 |
28 | sub 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 | |
37 | sub 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 |
45 | sub 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 | |
51 | sub 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 | |
59 | sub 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 |
67 | sub 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 |
73 | 1; |