--- loncom/auth/migrateuser.pm 2019/06/15 02:50:04 1.44 +++ loncom/auth/migrateuser.pm 2020/10/22 19:23:22 1.48 @@ -1,7 +1,7 @@ # The LearningOnline Network # Starts a user off based of an existing token. # -# $Id: migrateuser.pm,v 1.44 2019/06/15 02:50:04 raeburn Exp $ +# $Id: migrateuser.pm,v 1.48 2020/10/22 19:23:22 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -71,9 +71,6 @@ sub sso_check { $extra_env{'request.sso.reloginserver'} = $data->{'sso.reloginserver'}; } - if (($data->{'balancer'}) && ($data->{'server'}) && ($data->{'balcookie'})) { - $extra_env{'request.balancercookie'} = $data->{'server'}.':'.$data->{'balcookie'}; - } } return \%extra_env; } @@ -115,9 +112,6 @@ sub lti_check { if ($data->{'lti.rosterurl'}) { $lti_env{'request.lti.rosterurl'} = $data->{'lti.rosterurl'}; } - if (($data->{'balancer'}) && ($data->{'server'}) && ($data->{'balcookie'})) { - $lti_env{'request.balancercookie'} = $data->{'server'}.':'.$data->{'balcookie'}; - } } return \%lti_env; } @@ -659,6 +653,27 @@ sub handler { } elsif ((ref($lti_env) eq 'HASH') && (keys(%{$lti_env}))) { $extra_env = $lti_env; } + if (($data{'balancer'}) && ($data{'server'}) && ($data{'balcookie'})) { + if (ref($extra_env) eq 'HASH') { + $extra_env->{'request.balancercookie'} = $data{'server'}.':'.$data{'balcookie'}; + } else { + $extra_env = { 'request.balancercookie' => $data{'server'}.':'.$data{'balcookie'} }; + } + } elsif (($data{'server'}) && ($data{'otherbalcookie'})) { + my ($balancer,$balcookie) = split(/:/,$data{'otherbalcookie'}); + if (defined(&Apache::lonnet::hostname($balancer)) && $balcookie =~ /^[a-f0-9]{32}$/) { + my $baldom = &Apache::lonnet::host_domain($balancer); + if (&Apache::lonnet::shared_institution($baldom)) { + my $cookieid = join('_',$udom,$data{'username'},$balcookie); + &Apache::lonnet::updatebalcookie($cookieid,$balancer,$data{'server'}); + if (ref($extra_env) eq 'HASH') { + $extra_env->{'request.balancercookie'} = $data{'otherbalcookie'}; + } else { + $extra_env = { 'request.balancercookie' => $data{'otherbalcookie'} }; + } + } + } + } if (($data{'conlost'}) && ($data{'server'})) { my @conlosts = split(/,/,$data{'conlost'}); @@ -670,7 +685,7 @@ sub handler { } } - my %form; + my (%form,$cid); if ($data{'symb'} ne '') { $form{'symb'} = $data{'symb'}; } @@ -680,8 +695,13 @@ sub handler { if ($data{'noloadbalance'} ne '') { $form{'noloadbalance'} = $data{'noloadbalance'}; } - - if (!$data{'role'}) { + if ($data{'role'}) { + if ($data{'role'} =~ m{\./($match_domain)/($match_courseid)(?:/\w+|$)}) { + unless (&Apache::lonnet::homeserver($2,$1) eq 'no_host') { + $cid = $1.'_'.$2; + } + } + } else { my $handle = &Apache::lonnet::check_for_valid_session($r); if ($handle) { &Apache::lonnet::transfer_profile_to_env($r->dir_config('lonIDsDir'), @@ -821,14 +841,24 @@ sub handler { } } else { my $desturl = '/adm/roles'; - if ($data{'origurl'} ne '') { - $desturl = $data{'origurl'}; - if ($data{'lti.login'}) { - $desturl = $data{'origurl'}; + if ($data{'lti.login'}) { + if ($data{'lti.selfenrollrole'}) { + $desturl .= '?selectrole=1&'. + &escape($data{'lti.selfenrollrole'}).'=1'; + if ($data{'origurl'} ne '') { + $desturl .= '&orgurl='.$data{'origurl'}; + if ($data{'origurl'} =~ m{/default_\d+\.sequence$}) { + $desturl .= '&navmap=1'; + } + } + } elsif ($data{'origurl'} ne '') { + $desturl = $data{'origurl'}; if ($desturl =~ m{/default_\d+\.sequence$}) { $desturl .= (($desturl =~/\?/)?'&':'?').'navmap=1'; } } + } elsif ($data{'origurl'} ne '') { + $desturl = $data{'origurl'}; if ($data{'linkprot'}) { my ($linkprotector,$linkuri) = split(/:/,$data{'linkprot'},2); if ($linkprotector) { @@ -914,7 +944,7 @@ sub handler { $r->internal_redirect($next_url); } else { &Apache::lonauth::success($r,$data{'username'},$data{'domain'},$home, - $next_url,$extra_env,\%form); + $next_url,$extra_env,\%form,'',$cid); } return OK; }