--- loncom/auth/lonauth.pm 2018/12/26 20:10:21 1.156 +++ loncom/auth/lonauth.pm 2019/01/27 16:02:43 1.157 @@ -1,7 +1,7 @@ # The LearningOnline Network # User Authentication Module # -# $Id: lonauth.pm,v 1.156 2018/12/26 20:10:21 raeburn Exp $ +# $Id: lonauth.pm,v 1.157 2019/01/27 16:02:43 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -302,6 +302,13 @@ sub failed { my $firsturl = &Apache::loncommon::cleanup_html($form->{firsturl}); if ($firsturl ne '') { $retry .= (($retry=~/\?/)?'&':'?').'firsturl='.$firsturl; + if ($firsturl =~ m{^/tiny/$match_domain/\w+$}) { + unless (exists($form->{linkprot})) { + if (exists($form->{linkkey})) { + $retry .= 'linkkey='.$form->{linkkey}; + } + } + } } } if (exists($form->{linkprot})) { @@ -374,6 +381,9 @@ sub handler { my $dest = '/adm/roles'; if ($env{'form.firsturl'} ne '') { $dest = $env{'form.firsturl'}; + if ($env{'form.firsturl'} =~ m{^/tiny/$match_domain/\w+$}) { + &Apache::lonnet::appenv({'request.deeplink.login' => $env{'form.firsturl'}}); + } } $r->print( $start_page @@ -445,7 +455,7 @@ sub handler { return OK; } - my ($key,$firsturl,$rolestr,$symbstr,$iptokenstr,$linkprotstr)=split(/&/,$tmpinfo); + my ($key,$firsturl,$rolestr,$symbstr,$iptokenstr,$linkstr)=split(/&/,$tmpinfo); if ($rolestr) { $rolestr = &unescape($rolestr); } @@ -455,8 +465,8 @@ sub handler { if ($iptokenstr) { $iptokenstr = &unescape($iptokenstr); } - if ($linkprotstr) { - $linkprotstr = &unescape($linkprotstr); + if ($linkstr) { + $linkstr = &unescape($linkstr); } if ($firsturl =~ m{^/tiny/$match_domain/\w+$}) { $form{'firsturl'} = $firsturl; @@ -470,8 +480,10 @@ sub handler { if ($iptokenstr =~ /^iptoken=/) { (undef,$form{'iptoken'}) = split('=',$iptokenstr); } - if ($linkprotstr =~ /^linkprot=/) { - (undef,$form{'linkprot'}) = split('=',$linkprotstr); + if ($linkstr =~ /^linkprot=/) { + (undef,$form{'linkprot'}) = split('=',$linkstr); + } elsif ($linkstr =~ /^linkkey=/) { + (undef,$form{'linkkey'}) = split('=',$linkstr); } my $upass = $ENV{HTTPS} ? $form{'upass0'} @@ -655,6 +667,11 @@ sub handler { } if ($form{'linkprot'}) { $env{'request.linkprot'} = $form{'linkprot'}; + } elsif ($form{'firsturl'} =~ m{^/tiny/$match_domain/\w+$}) { + if ($form{'linkkey'}) { + $env{'request.linkkey'} = $form{'linkkey'}; + } + $env{'request.deeplink.login'} = $form{'firsturl'}; } $r->internal_redirect($switchto); } else { @@ -679,6 +696,12 @@ sub handler { } if ($form{'linkprot'}) { $env{'request.linkprot'} = $form{'linkprot'}; + } elsif ($form{'firsturl'} =~ m{^/tiny/$match_domain/\w+$}) { + if ($form{'linkkey'}) { + $env{'request.linkkey'} = $form{'linkkey'}; + } + $env{'request.deeplink.login'} = $form{'firsturl'}; + } $r->internal_redirect($switchto); } else { @@ -711,6 +734,11 @@ sub handler { undef,\%form); if ($form{'linkprot'}) { $env{'request.linkprot'} = $form{'linkprot'}; + } elsif ($form{'firsturl'} =~ m{^/tiny/$match_domain/\w+$}) { + if ($form{'linkkey'}) { + $env{'request.linkkey'} = $form{'linkkey'}; + } + $env{'request.deeplink.login'} = $form{'firsturl'}; } $r->internal_redirect('/adm/switchserver?otherserver='.$unloaded.'&origurl='.$firsturl); return OK; @@ -726,6 +754,14 @@ sub handler { $extra_env = {'user.linkprotector' => $linkprotector, 'user.linkproturi' => $uri,}; } + } elsif ($form{'firsturl'} =~ m{^/tiny/$match_domain/\w+$}) { + if ($form{'linkkey'}) { + $extra_env = {'user.deeplinkkey' => $form{'linkkey'}, + 'user.keyedlinkuri' => $form{'firsturl'}, + 'request.deeplink.login' => $form{'firsturl'}}; + } else { + $extra_env = {'request.deeplink.login' => $form{'firsturl'}}; + } } &success($r,$form{'uname'},$form{'udom'},$authhost,$firsturl,$extra_env, \%form); @@ -793,6 +829,11 @@ sub check_can_host { $form); if ($form->{'linkprot'}) { $env{'request.linkprot'} = $form->{'linkprot'}; + } elsif ($form->{'firsturl'} =~ m{^/tiny/$match_domain/\w+$}) { + if ($form->{'linkkey'}) { + $env{'request.linkkey'} = $form->{'linkkey'}; + } + $env{'request.deeplink.login'} = $form->{'firsturl'}; } my ($otherserver) = &Apache::lonnet::choose_server($udom); $r->internal_redirect('/adm/switchserver?otherserver='.$otherserver);