--- loncom/interface/lonmsgdisplay.pm 2021/11/30 16:16:14 1.195 +++ loncom/interface/lonmsgdisplay.pm 2022/09/17 23:38:51 1.198 @@ -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.198 2022/09/17 23:38:51 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1351,6 +1351,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'})) { @@ -2800,7 +2820,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 +3264,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 +3536,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);