--- loncom/auth/lonacc.pm 2021/08/16 15:25:44 1.194 +++ loncom/auth/lonacc.pm 2021/10/26 15:52:54 1.199 @@ -1,7 +1,7 @@ # The LearningOnline Network # Cookie Based Access Handler # -# $Id: lonacc.pm,v 1.194 2021/08/16 15:25:44 raeburn Exp $ +# $Id: lonacc.pm,v 1.199 2021/10/26 15:52:54 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -305,7 +305,7 @@ sub sso_login { my $query = $r->args; my %form; if ($query) { - my @items = ('role','symb','iptoken','origurl','ltoken','linkkey'); + my @items = ('role','symb','iptoken','origurl','ltoken','linkkey','logtoken'); &Apache::loncommon::get_unprocessed_cgi($query,\@items); foreach my $item (@items) { if (defined($env{'form.'.$item})) { @@ -324,6 +324,20 @@ sub sso_login { } my ($linkprot,$linkkey); + if ($form{'logtoken'}) { + my ($firsturl,@rest); + my $lonhost = $r->dir_config('lonHostID'); + my $tmpinfo = &Apache::lonnet::reply('tmpget:'.$form{'logtoken'},$lonhost); + my $delete = &Apache::lonnet::tmpdel($form{'logtoken'}); + (undef,$firsturl,@rest) = split(/&/,$tmpinfo); + foreach my $item (@rest) { + my ($key,$value) = split(/=/,$item); + $form{$key} = &unescape($value); + } + if ($firsturl =~ m{^/tiny/$match_domain/\w+$}) { + $form{'origurl'} = $firsturl; + } + } if ($form{'ltoken'}) { my %link_info = &Apache::lonnet::tmpget($form{'ltoken'}); $linkprot = $link_info{'linkprot'}; @@ -388,11 +402,10 @@ sub sso_login { $env{'request.deeplink.login'} = $r->uri; } if ($env{'request.deeplink.login'}) { - &Apache::lonnet::appenv({'request.deeplink.login' => $r->uri}); if ($linkprot) { - &Apache::lonnet::appenv({'request.linkprot' => $linkprot}); + $env{'request.linkprot'} = $linkprot; } elsif ($linkkey ne '') { - &Apache::lonnet::appenv({'request.linkkey' => $linkkey}); + $env{'request.linkkey'} = $linkkey; } } $env{'request.sso.login'} = 1; @@ -514,7 +527,7 @@ sub handler { if ($handle eq '') { unless ((($requrl eq '/adm/switchserver') && (!$r->is_initial_req())) || ($requrl =~ m{^/public/$match_domain/$match_courseid/syllabus}) || - ($requrl =~ m{^/adm/help/}) || + ($requrl =~ m{^/adm/help/}) || ($requrl eq '/adm/sso') || ($requrl =~ m{^/res/$match_domain/$match_username/})) { $r->log_reason("Cookie not valid", $r->filename); } @@ -627,7 +640,7 @@ sub handler { if (($found_server) && ($balancer_cookie =~ /^\Q$env{'user.domain'}\E_\Q$env{'user.name'}\E_/)) { $otherserver = $found_server; } - unless ($requrl eq '/adm/switchserver') { + unless ($requrl eq '/adm/switchserver') { $r->set_handlers('PerlResponseHandler'=> [\&Apache::switchserver::handler]); } @@ -789,7 +802,7 @@ sub handler { } } } elsif (($handle =~ /^publicuser_\d+$/) && (&Apache::lonnet::is_portfolio_url($requrl))) { - my $clientip = &Apache::lonnet::get_requestor_ip($r); + my $clientip = &Apache::lonnet::get_requestor_ip($r); if (&Apache::lonnet::allowed('bre',$requrl,undef,undef,$clientip) ne 'F') { $env{'user.error.msg'}="$requrl:bre:1:1:Access Denied"; return HTTP_NOT_ACCEPTABLE; @@ -858,7 +871,7 @@ sub handler { my ($map,$mid,$murl)=&Apache::lonnet::decode_symb($symb); if ($map =~ /\.page$/) { my $mapsymb = &Apache::lonnet::symbread($map); - ($map,$mid,$murl)=&Apache::lonnet::decode_symb($mapsymb); + ($map,$mid,$murl)=&Apache::lonnet::decode_symb($mapsymb); } &Apache::lonnet::symblist($map,$murl => [$murl,$mid], 'last_known' =>[$murl,$mid]);