--- loncom/interface/lonmsgdisplay.pm 2021/11/30 16:16:14 1.195 +++ loncom/interface/lonmsgdisplay.pm 2023/09/13 12:18:13 1.199 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines for messaging display # -# $Id: lonmsgdisplay.pm,v 1.195 2021/11/30 16:16:14 raeburn Exp $ +# $Id: lonmsgdisplay.pm,v 1.199 2023/09/13 12:18:13 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -111,6 +111,7 @@ use Apache::loncommunicate; use Apache::lonfeedback; use Apache::lonrss(); use Apache::lonselstudent(); +use Apache::lonenc(); use lib '/home/httpd/lib/perl/'; use LONCAPA qw(:DEFAULT :match); @@ -1351,6 +1352,26 @@ sub blocked_in_folder { sub compout { my ($r,$forwarding,$replying,$broadcast,$replycrit,$folder,$dismode, $multiforward)=@_; + my $clientip = &Apache::lonnet::get_requestor_ip($r); + my %setters; + my ($startblock,$endblock,$triggerblock,$by_ip,$blockdom) = + &Apache::loncommon::blockcheck(\%setters,'com',$clientip); + if ($by_ip) { + my $showdom = &Apache::lonnet::domain($blockdom); + if ($showdom eq '') { + $showdom = $blockdom; + } + $r->print(&Apache::loncommon::start_page('Messages')); + $r->print(&Apache::lonhtmlcommon::breadcrumbs('Send and display messages')); + $r->print('

'. + &mt('Sending of LON-CAPA messages is blocked for your current IP address: [_1].',$clientip).'

'. + ''); + return; + } my $suffix=&Apache::lonmsg::foldersuffix($folder); my ($cdom,$cnum,$group,$refarg); if (exists($env{'form.group'})) { @@ -2682,9 +2703,10 @@ sub displayresource { && (&Apache::lonnet::allowed('vgr',$content{'courseid'}))) { my $symb; if (defined($content{'symb'})) { - $symb = $content{'symb'}; - } else { - $symb=&Apache::lonnet::symbread($content{'baseurl'}); + $symb = &Apache::lonenc::check_decrypt($content{'symb'}); + } elsif (defined($content{'baseurl'})) { + $symb = + &Apache::lonnet::symbread(&Apache::lonenc::check_decrypt($content{'baseurl'})); } # Could not get a symb, give up unless ($symb) { return $content{'citation'}; } @@ -2800,7 +2822,14 @@ sub sendoffmail { $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; } - if ($env{'form.send'}) { + my $clientip = &Apache::lonnet::get_requestor_ip($r); + my %setters; + my ($startblock,$endblock,$triggerblock,$by_ip,$blockdom) = + &Apache::loncommon::blockcheck(\%setters,'com',$clientip); + if ($by_ip) { + &printheader($r,'','Sending messages blocked from your location.'); + return 'blocked'; + } elsif ($env{'form.send'}) { if (!$env{'form.multiforward'}) { if ($group eq '') { &printheader($r,'','Messages being sent.'); @@ -3237,9 +3266,24 @@ sub handler { 'sendreply','compose','sendmail','critical','recname','recdom', 'recordftf','sortedby','folder','startdis','interdis', 'showcommentbaseurl','dismode','group','subject','text','ref', - 'msgstatus']); + 'msgstatus','btoken']); $sqs='&sortedby='.$env{'form.sortedby'}; +# ----------- Check if access was from balancer to server with existing session + + if ($env{'form.btoken'}) { + my %info = &Apache::lonnet::tmpget($env{'form.btoken'}); + &Apache::lonnet::tmpdel($env{'form.btoken'}); + delete($env{'form.btoken'}); + unless ($env{'form.display'}) { + if (($info{'display'}) && ($info{'mailrecip'})) { + if (&unescape($info{'mailrecip'}) eq $env{'user.name'}.':'.$env{'user.domain'}) { + $env{'form.display'} = &unescape($info{'display'}); + } + } + } + } + # ------------------------------------------------------ They checked for email &Apache::lonnet::put('email_status',{'recnewemail'=>0}); @@ -3494,8 +3538,12 @@ sub handler { my $count = keys(%forwardfail); my $message = &Apache::lonhtmlcommon::confirm_success(&mt('Could not forward [quant,_1,message].',$count),1); foreach my $key (keys(%forwardfail)) { - $message .= '
'.&mt('Could not deliver forwarded message.').' '. - &mt('The recipient addresses may need to be corrected').' ('.$forwardfail{$key}.')'; + $message .= '
'.&mt('Could not deliver forwarded message.').' '; + if ($forwardfail{$key} eq 'blocked') { + $message .= &mt('Sending messages is blocked from your IP address'); + } else { + $message .= &mt('The recipient addresses may need to be corrected').' ('.$forwardfail{$key}.')'; + } } $message = &Apache::loncommon::confirmwrapper($message); $r->print($message);