diff --git a/lib/unix_dog.pm b/lib/unix_dog.pm index 6c175fe..88ec1a9 100644 --- a/lib/unix_dog.pm +++ b/lib/unix_dog.pm @@ -26,6 +26,8 @@ sub startup ($self) { $r->get('/account')->to('Account#account'); $r->post('/account')->to('Account#update_account'); + + $r->get('/users')->to('Main#user_pages'); } 1; diff --git a/lib/unix_dog/Controller/Main.pm b/lib/unix_dog/Controller/Main.pm index 6a53cd3..0432864 100644 --- a/lib/unix_dog/Controller/Main.pm +++ b/lib/unix_dog/Controller/Main.pm @@ -1,5 +1,6 @@ package unix_dog::Controller::Main; use Mojo::Base 'Mojolicious::Controller', -signatures; +use Net::LDAPS; sub index ($self) { $self->render(); @@ -13,4 +14,46 @@ sub services ($self) { $self->render(); } + +my $cache = Mojo::Cache->new(max_keys => 1); +$cache->set(users => []); +Mojo::IOLoop->recurring(60 => sub { + $cache->set(users => []); +}); + +sub user_pages ($self) { + my $config = $self->config; + my $connStr = $config->{'ldap'}->{'uri'}; + + my $users = $cache->get('users'); + + if (scalar @{$users} != 0) { + $self->stash(users => $users); + return $self->render('main/usersList'); + } + + return Mojo::IOLoop->subprocess->run_p(sub { + my $ldap = Net::LDAPS->new($connStr, verify=>'none', version=>3) or die "$@"; + my $mesg = $ldap->bind(); + $mesg->code and die $mesg->error; + + $mesg = $ldap->search( + base => 'OU=Dogs,DC=unix,DC=dog', + filter => '(objectClass=posixAccount)', + attrs => ['uid'], + ); + $mesg->code and die $mesg->error; + + for ($mesg->entries) { + push @{$users}, $_->get_value('uid'); + } + return $users; + + })->then(sub (@results) { + $self->stash(users => (@results)); + $cache->set(users => (@results)); + $self->render('main/usersList'); + }); +} + 1; diff --git a/templates/layouts/default.html.ep b/templates/layouts/default.html.ep index dedeefc..f9d8fda 100644 --- a/templates/layouts/default.html.ep +++ b/templates/layouts/default.html.ep @@ -19,6 +19,7 @@ UNIX.dog

UNIX.dog