Skip to content
Snippets Groups Projects
Controller.pm 19.71 KiB
package AccessCheck::App::Controller;

use Mojo::Base qw(Mojolicious::Controller);

use English qw(-no_match_vars);
use HTTP::AcceptLanguage;
use Syntax::Keyword::Try;
use Template::Constants qw(:chomp);
use UNIVERSAL::require;

use AccessCheck::Data::Account;
use AccessCheck::Data::DB;
use AccessCheck::Data::Entity;
use AccessCheck::Data::Token;
use AccessCheck::L10N;
use AccessCheck::Regexp;
use AccessCheck::Tools;

sub init_l10n {
    my $self = shift;

    my $log = $self->app()->log();

    # lang identification first, as needed for any further error message
    my ($l10n, $lang);
    if ($lang = $self->param('lang')) {
        $log->debug(sprintf("setting language from parameter: %s", $lang));
    } elsif ($lang = $self->session('lang')) {
        $log->debug(sprintf("setting language from session: %s", $lang));
    } elsif (my $header = $self->req()->headers->header('Accept-Language')) {
        $lang = HTTP::AcceptLanguage->new($header)->match(qw/en fr/);
        $log->debug(sprintf("setting language from Accept-Language header: %s", $lang));
    } else {
        $lang = 'en';
    }

    $l10n = AccessCheck::L10N->get_handle($lang);

    $self->session(lang => $lang);
    $self->stash(lang => $lang);
    $self->stash(l10n => $l10n);

    return $l10n;
}

sub init_user {
    my $self = shift;

    my $headers = $self->req()->headers();

    my $idp = 
        $ENV{'Shib_Identity_Provider'} ||           # local SP
        $headers->header('Shib-Identity-Provider'); # remote SP

    my $name =
        $ENV{displayName} ||             # local SP
        $headers->header('displayName'); # remote SP

    my $user = {
        idp => $idp,
        name => $name
    };

    $self->stash(user => $user);

    return $user;
}

sub init_db {
    my $self = shift;