website/lib/unix_dog/Controller/Main.pm

64 lines
1.4 KiB
Perl

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;