--- loncom/auth/lonauth.pm 2017/08/08 18:12:18 1.146 +++ loncom/auth/lonauth.pm 2018/04/21 21:29:31 1.151 @@ -1,7 +1,7 @@ # The LearningOnline Network # User Authentication Module # -# $Id: lonauth.pm,v 1.146 2017/08/08 18:12:18 raeburn Exp $ +# $Id: lonauth.pm,v 1.151 2018/04/21 21:29:31 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -36,6 +36,7 @@ use Apache::loncommon(); use Apache::lonnet; use Apache::lonmenu(); use Apache::createaccount; +use Apache::ltiauth; use Fcntl qw(:flock); use Apache::lonlocal; use Apache::File(); @@ -45,7 +46,7 @@ use Digest::MD5; # ------------------------------------------------------------ Successful login sub success { my ($r, $username, $domain, $authhost, $lowerurl, $extra_env, - $form) = @_; + $form,$skipcritical) = @_; # ------------------------------------------------------------ Get cookie ready my $cookie = @@ -64,10 +65,12 @@ sub success { # ------------------------------------------------- Check for critical messages - my @what=&Apache::lonnet::dump('critical',$domain,$username); - if ($what[0]) { - if (($what[0] ne 'con_lost') && ($what[0]!~/^error\:/)) { - $lowerurl='/adm/email?critical=display'; + unless ($skipcritical) { + my @what=&Apache::lonnet::dump('critical',$domain,$username); + if ($what[0]) { + if (($what[0] ne 'con_lost') && ($what[0]!~/^error\:/)) { + $lowerurl='/adm/email?critical=display'; + } } } @@ -93,7 +96,29 @@ sub success { } # -------------------------------------------------------- Menu script and info my $destination = $lowerurl; - + if ($env{'request.lti.login'}) { + if (($env{'request.lti.reqcrs'}) && ($env{'request.lti.reqrole'} eq 'cc')) { + &Apache::loncommon::content_type($r,'text/html'); + if ($securecookie) { + $r->headers_out->add('Set-cookie' => $securecookie); + } + if ($defaultcookie) { + $r->headers_out->add('Set-cookie' => $defaultcookie); + } + $r->send_http_header; + &Apache::ltiauth::lti_reqcrs($r,$domain,$form,$username,$domain); + return; + } + if ($env{'request.lti.selfenrollrole'}) { + if (&Apache::ltiauth::lti_enroll($username,$domain, + $env{'request.lti.selfenrollrole'}) eq 'ok') { + $form->{'role'} = $env{'request.lti.selfenrollrole'}; + &Apache::lonnet::delenv('request.lti.selfenrollrole'); + } else { + &Apache::ltiauth::invalid_request($r,24); + } + } + } if (defined($form->{role})) { my $envkey = 'user.role.'.$form->{role}; my $now=time; @@ -135,7 +160,11 @@ sub success { $destination .= 'source=login'; } - my $windowinfo = Apache::lonhtmlcommon::scripttag('self.name="loncapaclient";'); + my $windowname = 'loncapaclient'; + if ($env{'request.lti.login'}) { + $windowname .= 'lti'; + } + my $windowinfo = Apache::lonhtmlcommon::scripttag('self.name="'.$windowname.'";'); my $header = ''; my $brcrum = [{'href' => '', 'text' => 'Successful Login'},]; @@ -161,11 +190,7 @@ sub success { } } } - my $start_page=&Apache::loncommon::start_page('Successful Login', - $header,$args); - my $end_page =&Apache::loncommon::end_page(); - my $continuelink=''.&mt('Continue').''; # ------------------------------------------------- Output for successful login &Apache::loncommon::content_type($r,'text/html'); @@ -177,22 +202,35 @@ sub success { } $r->send_http_header; - my %lt=&Apache::lonlocal::texthash( - 'wel' => 'Welcome', - 'pro' => 'Login problems?', - ); - my $loginhelp = &loginhelpdisplay($domain); - if ($loginhelp) { - $loginhelp = '

'.$lt{'pro'}.'

'; + my $start_page; + if ($env{'request.lti.login'}) { + $args = {'only_body' => 1,}; + $start_page=&Apache::loncommon::start_page('',$header,$args); + } else { + $start_page=&Apache::loncommon::start_page('Successful Login', + $header,$args); } + my $end_page =&Apache::loncommon::end_page(); - my $welcome = &mt('Welcome to the Learning[_1]Online[_2] Network with CAPA. Please wait while your session is being set up.','',''); + my $continuelink=''.&mt('Continue').''; + + my $pagebody; + unless ($env{'request.lti.login'}) { + my %lt=&Apache::lonlocal::texthash( + 'wel' => 'Welcome', + 'pro' => 'Login problems?', + ); + $pagebody = "

$lt{'wel'}

\n". + &mt('Welcome to the Learning[_1]Online[_2] Network with CAPA. Please wait while your session is being set up.','',''); + my $loginhelp = &loginhelpdisplay($domain); + if ($loginhelp) { + $pagebody .= '

'.$lt{'pro'}.'

'; + } + } $r->print(<$lt{'wel'} -$welcome -$loginhelp +$pagebody $continuelink $end_page ENDSUCCESS @@ -407,7 +445,7 @@ sub handler { my $authhost=Apache::lonnet::authenticate($form{'uname'},$upass, $form{'udom'},$defaultauth, $clientcancheckhost); - + # --------------------------------------------------------------------- Failed? if ($authhost eq 'no_host') { @@ -485,15 +523,15 @@ sub handler { my $noprivswitch; # # su-user's home server and user's home server must have one of: -# (a) same internet dom -# (b) same primary library server for home server's domain -# (c) same "internet domain" for primary library server for home server's domain +# (a) same domain +# (b) same primary library server for the two domains +# (c) same "internet domain" for primary library server(s) for home servers' domains # - my $uprim = &Apache::lonnet::domain($sudom,'primary'); - my $uintdom = &Apache::lonnet::internet_dom($uprim); + my $suprim = &Apache::lonnet::domain($sudom,'primary'); + my $suintdom = &Apache::lonnet::internet_dom($suprim); unless ($sudom eq $form{'udom'}) { - my $suprim = &Apache::lonnet::domain($sudom,'primary'); - my $suintdom = &Apache::lonnet::internet_dom($suprim); + my $uprim = &Apache::lonnet::domain($form{'udom'},'primary'); + my $uintdom = &Apache::lonnet::internet_dom($uprim); unless ($suprim eq $uprim) { unless ($suintdom eq $uintdom) { &Apache::lonnet::logthis('Attempted switch user ' @@ -510,7 +548,7 @@ sub handler { # my $lonhost = $r->dir_config('lonHostID'); my $hostintdom = &Apache::lonnet::internet_dom($lonhost); - if ($hostintdom ne $uintdom) { + if ($hostintdom ne $suintdom) { &Apache::lonnet::logthis('Attempted switch user on a ' .'server with a different "internet domain".'); } else {