package unix_dog::Controller::Main; use strict; use warnings FATAL => 'all'; use experimental 'signatures'; use Mojo::Base 'Mojolicious::Controller', -signatures; use Net::LDAPS; sub index ($self) { $self->render(); } sub rules ($self) { $self->render(); } 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;