--- loncom/auth/lonauth.pm 2022/06/18 02:10:18 1.174
+++ loncom/auth/lonauth.pm 2023/06/02 01:20:26 1.179
@@ -1,7 +1,7 @@
# The LearningOnline Network
# User Authentication Module
#
-# $Id: lonauth.pm,v 1.174 2022/06/18 02:10:18 raeburn Exp $
+# $Id: lonauth.pm,v 1.179 2023/06/02 01:20:26 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -47,7 +47,7 @@ use CGI::Cookie();
# ------------------------------------------------------------ Successful login
sub success {
my ($r, $username, $domain, $authhost, $lowerurl, $extra_env,
- $form,$skipcritical,$cid,$expirepub) = @_;
+ $form,$skipcritical,$cid,$expirepub,$write_to_opener) = @_;
# ------------------------------------------------------------ Get cookie ready
my $cookie =
@@ -147,6 +147,10 @@ sub success {
$destination .= 'selectrole=1&'.$newrole.'=1';
}
}
+ } elsif (defined($form->{display})) {
+ if ($destination =~ m{^/adm/email($|\?)}) {
+ $destination .= ($destination =~ /\?/) ? '&' : '?' .'display='.&escape($form->{display});
+ }
}
if (defined($form->{symb})) {
my $destsymb = $form->{symb};
@@ -179,11 +183,21 @@ sub success {
$destination .= 'source=login';
}
+ my $brcrum = [{'href' => '',
+ 'text' => 'Successful Login'},];
+ my $args = {'no_inline_link' => 1,
+ 'bread_crumbs' => $brcrum,};
if (($env{'request.deeplink.login'} eq $lowerurl) &&
(($env{'request.linkprot'}) || ($env{'request.linkkey'} ne ''))) {
my %info;
if ($env{'request.linkprot'}) {
$info{'linkprot'} = $env{'request.linkprot'};
+ foreach my $item ('linkprotuser','linkprotexit','linkprotpbid','linkprotpburl') {
+ if ($form->{$item}) {
+ $info{$item} = $form->{$item};
+ }
+ }
+ $args = {'only_body' => 1,};
} elsif ($env{'request.linkkey'} ne '') {
$info{'linkkey'} = $env{'request.linkkey'};
}
@@ -200,9 +214,6 @@ sub success {
$windowname .= 'lti';
}
my $windowinfo = Apache::lonhtmlcommon::scripttag('self.name="'.$windowname.'";');
- my $brcrum = [{'href' => '',
- 'text' => 'Successful Login'},];
- my $args = {'bread_crumbs' => $brcrum,};
unless ((defined($form->{role})) || (defined($form->{symb}))) {
my $update=$env{'user.update.time'};
if (!$update) {
@@ -273,21 +284,22 @@ ENDJS
}
$start_page=&Apache::loncommon::start_page('',$js,$args);
} else {
- $args->{'redirect'} = [0,$destination];
+ $args->{'redirect'} = [0,$destination,'',$write_to_opener];
$start_page=&Apache::loncommon::start_page('Successful Login',
$js,$args);
-
- my %lt=&Apache::lonlocal::texthash(
- 'wel' => 'Welcome',
- 'pro' => 'Login problems?',
+ unless ($env{'request.linkprot'}) {
+ 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'}.'
';
+ $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'}.'
';
+ }
}
- }
+ }
$end_page = &Apache::loncommon::end_page();
$r->print(< $form->{'linkprot'},
);
- if ($form->{linkprotuser} ne '') {
- $info{'linkprotuser'} = $form->{linkprotuser};
+ foreach my $item ('linkprotuser','linkprotexit','linkprotpbid','linkprotpburl') {
+ if ($form->{$item} ne '') {
+ $info{$item} = $form->{$item};
+ }
}
my $ltoken = &Apache::lonnet::tmpput(\%info,
$r->dir_config('lonHostID'),'retry');
@@ -809,11 +823,21 @@ sub handler {
}
if ($form{'linkprot'}) {
$env{'request.linkprot'} = $form{'linkprot'};
+ foreach my $item ('linkprotuser','linkprotexit','linkprotpbid','linkprotpburl') {
+ if ($form{$item}) {
+ $env{'request.'.$item} = $form{$item};
+ }
+ }
} elsif ($form{'linkkey'} ne '') {
$env{'request.linkkey'} = $form{'linkkey'};
}
if ($form{'firsturl'} =~ m{^/tiny/$match_domain/\w+$}) {
&set_deeplink_login(%form);
+ } elsif ($firsturl eq '/adm/email') {
+ if ($form{'display'} && ($form{'mailrecip'} eq "$form{'uname'}:$form{'udom'}")) {
+ $env{'request.display'} = $form{'display'};
+ $env{'request.mailrecip'} = $form{'mailrecip'};
+ }
}
$r->internal_redirect($switchto);
} else {
@@ -840,11 +864,21 @@ sub handler {
}
if ($form{'linkprot'}) {
$env{'request.linkprot'} = $form{'linkprot'};
+ foreach my $item ('linkprotuser','linkprotexit','linkprotpbid','linkprotpburl') {
+ if ($form{$item}) {
+ $env{'request.'.$item} = $form{$item};
+ }
+ }
} elsif ($form{'linkkey'} ne '') {
$env{'request.linkkey'} = $form{'linkkey'};
}
if ($form{'firsturl'} =~ m{^/tiny/$match_domain/\w+$}) {
&set_deeplink_login(%form);
+ } elsif ($firsturl eq '/adm/email') {
+ if ($form{'display'} && ($form{'mailrecip'} eq "$form{'uname'}:$form{'udom'}")) {
+ $env{'request.display'} = $form{'display'};
+ $env{'request.mailrecip'} = $form{'mailrecip'};
+ }
}
$r->internal_redirect($switchto);
} else {
@@ -884,6 +918,11 @@ sub handler {
}
if ($form{'firsturl'} =~ m{^/tiny/$match_domain/\w+$}) {
&set_deeplink_login(%form);
+ } elsif ($firsturl eq '/adm/email') {
+ if ($form{'display'} && ($form{'mailrecip'} eq "$form{'uname'}:$form{'udom'}")) {
+ $env{'request.display'} = $form{'display'};
+ $env{'request.mailrecip'} = $form{'mailrecip'};
+ }
}
$r->internal_redirect('/adm/switchserver?otherserver='.$unloaded.'&origurl='.$firsturl);
return OK;
@@ -903,6 +942,14 @@ sub handler {
$form{$item} = $sessiondata{$item};
}
}
+ if ($sessiondata{'origurl'} eq '/adm/email') {
+ if (($sessiondata{'display'}) && ($sessiondata{'mailrecip'})) {
+ if (&unescape($sessiondata{'mailrecip'}) eq "$form{'uname'}:$form{'udom'}") {
+ $form{'display'} = &unescape($sessiondata{'display'});
+ $form{'mailrecip'} = &unescape($sessiondata{'mailrecip'});
+ }
+ }
+ }
}
}
if ($form{'linkprot'}) {
@@ -923,6 +970,15 @@ sub handler {
} else {
$extra_env = {'request.linkprot' => $form{'linkprot'}};
}
+ if ($form{'linkprotexit'}) {
+ $extra_env->{'request.linkprotexit'} = $form{'linkprotexit'};
+ }
+ if ($form{'linkprotpbid'}) {
+ $extra_env->{'request.linkprotpbid'} = $form{'linkprotpbid'};
+ }
+ if ($form{'linkprotpburl'}) {
+ $extra_env->{'request.linkprotpburl'} = $form{'linkprotpburl'};
+ }
} elsif ($form{'linkkey'} ne '') {
if (ref($extra_env) eq 'HASH') {
%{$extra_env} = ( %{$extra_env}, 'request.linkkey' => $form{'linkkey'} );
@@ -1011,7 +1067,7 @@ sub set_retry_token {
my ($form,$lonhost,$querystr) = @_;
if (ref($form) eq 'HASH') {
my ($firsturl,$token,$extras,@names);
- @names = ('role','symb','linkprotuser','linkprot','linkkey','iptoken');
+ @names = ('role','symb','linkprotuser','linkprotexit','linkprot','linkkey','iptoken','linkprotpbid','linkprotpburl');
foreach my $name (@names) {
if ($form->{$name} ne '') {
$extras .= '&'.$name.'='.&escape($form->{$name});
@@ -1098,6 +1154,11 @@ sub check_can_host {
$form);
if ($form->{'firsturl'} =~ m{^/tiny/$match_domain/\w+$}) {
$env{'request.deeplink.login'} = $form->{'firsturl'};
+ } elsif ($form->{'firsturl'} eq '/adm/email') {
+ if ($form->{'display'} && ($form->{'mailrecip'} eq $form->{'uname'}.':'.$form->{'udom'})) {
+ $env{'request.display'} = $form->{'mailrecip'};
+ $env{'request.mailrecip'} = $form->{'mailrecip'};
+ }
}
if ($form->{'linkprot'}) {
$env{'request.linkprot'} = $form->{'linkprot'};