Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
1 result

SSO.pm

Blame
  • 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;
    
    }