60 lines
1.3 KiB
Perl
60 lines
1.3 KiB
Perl
package unix_dog::Controller::Main;
|
|
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;
|