1# OpenXPKI::Client::UI::Bootstrap 2# Written 2013 by Oliver Welter 3# (C) Copyright 2013 by The OpenXPKI Project 4 5package OpenXPKI::Client::UI::Bootstrap; 6use Moose; 7 8extends 'OpenXPKI::Client::UI::Result'; 9 10# Core modules 11use Data::Dumper; 12use Digest::SHA; 13 14# Project modules 15use OpenXPKI::i18n qw( i18nTokenizer get_language ); 16 17 18sub init_structure { 19 20 my $self = shift; 21 my $session = $self->_session; 22 my $user = $session->param('user') || undef; 23 24 # create CSRF token 25 if (!$session->param('rtoken')) { 26 $self->logger->debug('Generate rtoken'); 27 $session->param('rtoken', Digest::SHA::sha1_hex( $$. $session->id() . rand(2**32) ) ); 28 } 29 $self->_result->{rtoken} = $session->param('rtoken'); 30 31 $self->_result->{language} = get_language(); 32 33 # To issue redirects to the UI, we store the referrer 34 # default is mainly relevant for test scripts 35 my $baseurl = $self->param('baseurl') || '/openxpki'; 36 $baseurl =~ s|/$||; 37 $session->param('baseurl', $baseurl.'/#/'); 38 $session->flush; 39 $self->logger->debug("Baseurl from referrer: " . $baseurl); 40 41 if ($session->param('is_logged_in') && $user) { 42 $self->_result->{user} = $user; 43 44 # Preselect tenant, for now we just pick the first from the list 45 if ($user->{tenants}) { 46 $self->_result->{tenant} = $user->{tenants}->[0]->{value}; 47 $self->logger->trace('Preset tenant from items ' . Dumper $user->{tenants}) if $self->logger->is_trace; 48 } 49 50 $self->_result->{structure} = $session->param('menu'); 51 52 # Ping endpoint 53 if (my $ping = $session->param('ping')) { 54 $self->_result->{ping} = $ping; 55 } 56 57 # Redirection targets for apache based SSO Handling 58 if (my $auth = $session->param('authinfo')) { 59 if (my $target = ($auth->{resume} || $auth->{login})) { 60 $self->_result->{on_exception} = [{ 61 status_code => [ 403, 401 ], 62 redirect => $target, 63 }]; 64 } 65 } 66 } 67 68 # default menu if nothing was set before 69 $self->_result->{structure} ||= [{ 70 key => 'logout', 71 label => 'I18N_OPENXPKI_UI_CLEAR_LOGIN', 72 entries => [], 73 }]; 74 75 return $self; 76 77} 78 79 80sub init_error { 81 82 my $self = shift; 83 my $args = shift; 84 85 $self->_result->{main} = [{ 86 type => 'text', 87 content => { 88 headline => 'I18N_OPENXPKI_UI_OOPS', 89 paragraphs => [{text=>'I18N_OPENXPKI_UI_OOPS'}] 90 } 91 }]; 92 93 return $self; 94} 951; 96