-
Guillaume ROUSSE authoredGuillaume ROUSSE authored
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;