--- loncom/auth/blockedaccess.pm 2009/02/13 17:20:26 1.3 +++ loncom/auth/blockedaccess.pm 2021/11/30 15:55:40 1.7 @@ -1,7 +1,7 @@ # The LearningOnline Network # Information about blocking status for Portfolio files # -# $Id: blockedaccess.pm,v 1.3 2009/02/13 17:20:26 bisitz Exp $ +# $Id: blockedaccess.pm,v 1.7 2021/11/30 15:55:40 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -29,30 +29,68 @@ package Apache::blockedaccess; use strict; -use Apache::Constants qw(:common :http REDIRECT); +use Apache::Constants qw(:common); use Apache::lonnet; use Apache::loncommon(); use Apache::lonlocal; +use HTML::Entities(); sub handler { my $r = shift; - my $origurl = $r->uri; - my ($type,$udom,$uname,$file_name,$group) = - &Apache::lonnet::parse_portfolio_url($origurl); &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; return OK if $r->header_only; &Apache::lonlocal::get_language_handle($r); - my ($blocked,$blocktext) = - &Apache::loncommon::blocking_status('port',$uname,$udom); + my $ver_origurl = $r->uri; + my $origurl = &Apache::lonnet::deversion($r->uri); + my ($blocked,$blocktext,$clientip); + $clientip = &Apache::lonnet::get_requestor_ip($r); + + if (&Apache::lonnet::is_portfolio_url($origurl)) { + my ($type,$udom,$uname,$file_name,$group) = + &Apache::lonnet::parse_portfolio_url($origurl); + ($blocked,$blocktext) = + &Apache::loncommon::blocking_status('port',$clientip,$uname,$udom); + } else { + if ($env{'request.course.id'}) { + my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; + my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + my $symb = $env{'request.symb'}; + my $url = $origurl; + # If no symb, and url is on not map, check for referrer + unless (($symb) || &Apache::lonnet::is_on_map($url) || ($origurl eq '/adm/blockedaccess')) { + my $refuri = $env{'httpref.'.$origurl} || $env{'httpref.'.$ver_origurl}; + if ($refuri) { + $url = $refuri; + } + } + ($blocked,$blocktext) = + &Apache::loncommon::blocking_status('docs',$clientip,$cnum,$cdom,$url,1,$symb,'blockedaccess'); + } + } if ($blocked) { $r->print(&Apache::loncommon::start_page('Access Temporarily Blocked')); $r->print($blocktext); + } elsif ($origurl eq '/adm/blockedaccess') { + $r->print(&Apache::loncommon::start_page('Access Blocking Information')); + $r->print('

'.&mt('Could not determine which page had access blocked.').'

'); } else { - my $server = &Apache::lonnet::absolute_url(); - $r->header_out(Location => $server.$origurl); - return REDIRECT; + $r->print(&Apache::loncommon::start_page('Access Blocking Information')); + my $link; + if ($origurl ne '') { + my $showurl = &Apache::lonenc::check_encrypt($origurl); + $link = &Apache::lonnet::absolute_url().$showurl; + if ($r->args ne '') { + $link .= '?'.$r->args; + } + } + $r->print('

'. + &mt('The page you are trying to reach was reported as having access blocked, but the reason is not available.'). + '

'); + if ($link) { + $r->print('

&').'">'.&mt('Try again?').'

'); + } } $r->print(&Apache::loncommon::end_page()); return OK;