Select Git revision
-
Andrej Ramašeuski authoredAndrej Ramašeuski authored
SSO.pm 2.96 KiB
package CF::Controller::SSO;
use Mojo::Base 'Mojolicious::Controller';
use Mojo::Pg::PubSub;
use feature 'signatures';
no warnings qw{ experimental::signatures };
use Mojo::UserAgent;
sub subjects ($c) {
$c->openapi->valid_input or return;
my $args = $c->validation->output;
my ( $groups, $users, @subjects );
if ( $args->{class} =~ /all|group/ ) {
@subjects = $c->_groups( $args->{search} );
}
if ( $args->{class} =~ /all|user/ ) {
@subjects = (@subjects, $c->_users( $args->{search} ));
}
$c->render(openapi => \@subjects);
}
sub _groups ($c, $search) {
my $ua = Mojo::UserAgent->new;
my @groups = ();
my $groups;
eval {
$groups = $ua->get(
sprintf($c->config->{iapi_get_groups}, $search)
)->result->json;
};
if ( $groups && ref $groups eq 'ARRAY' ) {
my @tmp = ();
# vyssi priorita pri vyskytu na zacatku
GROUP:
foreach my $group ( @{ $groups } ) {
next if $group->{code} =~ /^_group/; # nezarazene skupiny
next if $group->{name} =~ /^@/; # zavinacove skupiny
$group->{priority} = 0;
$group->{priority} = 1 if $group->{name} =~ /^$search/i;
$group->{priority} = 2 if $group->{code} =~ /^$search/i;
push @tmp, $group,
}
GROUP:
foreach my $group ( sort {
$b->{priority} <=> $a->{priority} or
lc($a->{name}) cmp lc($b->{name}) or
lc($a->{code}) cmp lc($b->{code})
} @tmp ) {
push @groups, {
class => 'group',
value => $group->{code},
label => $group->{name},
};
}
}
return @groups;
}