version 1.14.2.1, 2021/12/12 20:56:36
|
version 1.15, 2022/06/18 02:10:18
|
Line 155 In the case of redirection a query strin
|
Line 155 In the case of redirection a query strin
|
which will contain either (a) the originally requested URL, |
which will contain either (a) the originally requested URL, |
if not /adm/sso (or lonOtherAuthenUrl URL), and |
if not /adm/sso (or lonOtherAuthenUrl URL), and |
any existing query string in the original request, or |
any existing query string in the original request, or |
(b) if redirect is to /adm/login to support dual SSO and |
(b) if original request was for /tiny/domain/uniqueID, |
|
or if redirect is to /adm/login to support dual SSO and |
non-SSO, a query string which contains sso=tokenID, where the |
non-SSO, a query string which contains sso=tokenID, where the |
token contains information for deep-linking to course/resource. |
token contains information for deep-linking to course/resource. |
|
|
Line 192 Output: 1
|
Line 193 Output: 1
|
$querystring - query string to append to URL |
$querystring - query string to append to URL |
when redirecting. |
when redirecting. |
|
|
If role and/or symb are present in the original query string: |
If any of the following items are present in the original query string: |
then they will be stored in the token file on the server, |
role, symb, and linkkey, then they will be stored in the token file |
for access later to support deep-linking. |
on the server, for access later to support deep-linking. If the ltoken |
|
item is available, from successful launch from an LTI Consumer where |
|
LON-CAPA is the LTI Provider, but not configured to accept user |
|
information, and the destination is a deep-link URL /tiny/domain/uniqueiD, |
|
then the LTI number, type (c or d), and tiny URL will be saved as the |
|
linkprot item in a token file. |
|
|
=back |
=back |
|
|
Line 239 sub handler {
|
Line 245 sub handler {
|
} |
} |
} else { |
} else { |
my $uri = $r->uri; |
my $uri = $r->uri; |
if ($r->args ne '') { |
if ($uri =~ m{^/tiny/$match_domain/\w+$}) { |
$dest .= (($dest=~/\?/)?'&':'?').$r->args; |
my $querystring = &set_token($r,$lonhost); |
} |
if ($querystring ne '') { |
unless (($uri eq '/adm/roles') || ($uri eq '/adm/logout')) { |
$dest .= '?'.$querystring; |
unless ($r->args =~ /origurl=/) { |
} |
$dest.=(($dest=~/\?/)?'&':'?').'origurl='.$uri; |
} else { |
|
if ($r->args ne '') { |
|
$dest .= (($dest=~/\?/)?'&':'?').$r->args; |
|
} |
|
unless (($uri eq '/adm/roles') || ($uri eq '/adm/logout')) { |
|
unless ($r->args =~ /origurl=/) { |
|
$dest.=(($dest=~/\?/)?'&':'?').'origurl='.$uri; |
|
} |
} |
} |
} |
} |
} |
} |
Line 258 sub handler {
|
Line 271 sub handler {
|
sub set_token { |
sub set_token { |
my ($r,$lonhost) = @_; |
my ($r,$lonhost) = @_; |
my ($firsturl,$querystring,$ssotoken,@names,%token); |
my ($firsturl,$querystring,$ssotoken,@names,%token); |
@names = ('role','symb'); |
@names = ('role','symb','ltoken','linkkey'); |
map { $token{$_} = 1; } @names; |
map { $token{$_} = 1; } @names; |
unless (($r->uri eq '/adm/roles') || ($r->uri eq '/adm/logout')) { |
unless (($r->uri eq '/adm/roles') || ($r->uri eq '/adm/logout')) { |
$firsturl = $r->uri; |
$firsturl = $r->uri; |
Line 266 sub set_token {
|
Line 279 sub set_token {
|
if ($r->args ne '') { |
if ($r->args ne '') { |
&Apache::loncommon::get_unprocessed_cgi($r->args); |
&Apache::loncommon::get_unprocessed_cgi($r->args); |
} |
} |
|
if ($r->uri =~ m{^/tiny/$match_domain/\w+$}) { |
|
if ($env{'form.ttoken'}) { |
|
my %info = &Apache::lonnet::tmpget($env{'form.ttoken'}); |
|
&Apache::lonnet::tmpdel($env{'form.ttoken'}); |
|
if ($info{'ltoken'}) { |
|
$env{'form.ltoken'} = $info{'ltoken'}; |
|
} elsif ($info{'linkkey'} ne '') { |
|
$env{'form.linkkey'} = $info{'linkkey'}; |
|
} |
|
} else { |
|
unless (($env{'form.ltoken'}) || ($env{'form.linkkey'})) { |
|
&Apache::lonacc::get_posted_cgi($r,['linkkey']); |
|
} |
|
} |
|
unless (($r->is_initial_req()) || ($env{'form.ltoken'}) || |
|
($env{'form.linkkey'})) { |
|
return; |
|
} |
|
} |
my $extras; |
my $extras; |
foreach my $name (@names) { |
foreach my $name (@names) { |
if ($env{'form.'.$name} ne '') { |
if ($env{'form.'.$name} ne '') { |
$extras .= '&'.$name.'='.&escape($env{'form.'.$name}); |
if ($name eq 'ltoken') { |
|
my %info = &Apache::lonnet::tmpget($env{'form.ltoken'}); |
|
&Apache::lonnet::tmpdel($env{'form.ltoken'}); |
|
if ($info{'linkprot'}) { |
|
$extras .= '&linkprot='.&escape($info{'linkprot'}); |
|
if ($info{'linkprotuser'} ne '') { |
|
$extras .= '&linkprotuser='.&escape($info{'linkprotuser'}); |
|
} |
|
last; |
|
} |
|
} else { |
|
$extras .= '&'.$name.'='.&escape($env{'form.'.$name}); |
|
} |
} |
} |
} |
} |
if (($firsturl ne '') || ($extras ne '')) { |
if (($firsturl ne '') || ($extras ne '')) { |
Line 282 sub set_token {
|
Line 326 sub set_token {
|
foreach my $key (sort(keys(%env))) { |
foreach my $key (sort(keys(%env))) { |
if ($key =~ /^form\.(.+)$/) { |
if ($key =~ /^form\.(.+)$/) { |
my $name = $1; |
my $name = $1; |
next if ($token{$name}); |
next if (($token{$name}) || ($name eq 'ttoken')); |
$querystring .= '&'.$name.'='.$env{$key}; |
$querystring .= '&'.$name.'='.$env{$key}; |
} |
} |
} |
} |