Process packet seenby/path/via lines when saving echomail/netmail
This commit is contained in:
@@ -8,18 +8,20 @@ use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Foundation\Bus\Dispatchable;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Notification;
|
||||
|
||||
use App\Classes\FTN\Message;
|
||||
use App\Models\{Address,Echoarea,Echomail,Netmail,Setup,User};
|
||||
use App\Notifications\Netmails\{EchoareaNotExist,EchoareaNotSubscribed,EchoareaNoWrite,NetmailForward,Reject};
|
||||
use App\Traits\ParseAddresses;
|
||||
|
||||
class MessageProcess implements ShouldQueue
|
||||
{
|
||||
private const LOGKEY = 'JMP';
|
||||
|
||||
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||
use Dispatchable,InteractsWithQueue,Queueable,SerializesModels,ParseAddresses;
|
||||
|
||||
private Address $sender;
|
||||
private Message $msg;
|
||||
@@ -125,7 +127,7 @@ class MessageProcess implements ShouldQueue
|
||||
|
||||
$o->set_pkt = $this->packet;
|
||||
$o->set_sender = $this->sender;
|
||||
$o->set_path = $this->msg->pathaddress;
|
||||
$o->set_path = $this->msg->via;
|
||||
$o->set_recvtime = $this->recvtime;
|
||||
// Strip any local/transit flags
|
||||
$o->flags &= ~(Message::FLAG_LOCAL|Message::FLAG_INTRANSIT);
|
||||
@@ -245,11 +247,13 @@ class MessageProcess implements ShouldQueue
|
||||
Log::debug(sprintf('%s:- Processing echomail [%s] in [%s].',self::LOGKEY,$this->msg->msgid,$this->msg->echoarea));
|
||||
|
||||
if (! $this->pktsrc->zone->domain->zones->pluck('zone_id')->contains($this->msg->fboss_o->zone->zone_id)) {
|
||||
Log::alert(sprintf('%s:! The message [%s] is from a different zone [%d] than the packet sender [%d]',
|
||||
Log::alert(sprintf('%s:! The message [%s] is from a different zone [%d] than the packet sender [%d] - not importing',
|
||||
self::LOGKEY,
|
||||
$this->msg->msgid,
|
||||
$this->msg->fboss_o->zone->zone_id,
|
||||
$this->pktsrc->zone->zone_id));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Check for duplicate messages
|
||||
@@ -257,7 +261,8 @@ class MessageProcess implements ShouldQueue
|
||||
if ($this->msg->msgid) {
|
||||
$o = Echomail::where('msgid',$this->msg->msgid)
|
||||
->where('fftn_id',($x=$this->msg->fboss_o) ? $x->id : NULL)
|
||||
->where('datetime','>',Carbon::now()->subYears(3))
|
||||
->where('datetime','>=',$this->msg->date->subYears(3))
|
||||
->where('datetime','<=',$this->msg->date)
|
||||
->single();
|
||||
|
||||
Log::debug(sprintf('%s:- Checking for duplicate from host id [%d].',self::LOGKEY,($x=$this->msg->fboss_o) ? $x->id : NULL));
|
||||
@@ -276,12 +281,32 @@ class MessageProcess implements ShouldQueue
|
||||
|
||||
$o->save();
|
||||
|
||||
// If the path is empty, then its probably because of the previous bug, we'll replace it.
|
||||
// @todo This duplicate message may have gone via a different path, be nice to record it.
|
||||
//$o->path()->sync($o->path->pluck('id')->merge($this->msg->pathaddress)->toArray());
|
||||
// If we didnt get the path on the original message, we'll override it
|
||||
if (! $o->path->count()) {
|
||||
$dummy = collect();
|
||||
$path = $this->parseAddresses('path',$this->msg->path,$this->pktsrc->zone,$dummy);
|
||||
|
||||
$ppoid = NULL;
|
||||
foreach ($path as $aoid) {
|
||||
|
||||
$po = DB::select('INSERT INTO echomail_path (echomail_id,address_id,parent_id) VALUES (?,?,?) RETURNING id',[
|
||||
$o->id,
|
||||
$aoid,
|
||||
$ppoid,
|
||||
]);
|
||||
|
||||
$ppoid = $po[0]->id;
|
||||
}
|
||||
}
|
||||
|
||||
// @todo if we have an export for any of the seenby addresses, remove it
|
||||
// @todo add received packet details
|
||||
$o->seenby()->sync($o->seenby->pluck('id')->merge($this->msg->seenaddress)->filter()->toArray());
|
||||
$seenby = $this->parseAddresses('seenby',$this->msg->seenby,$this->pktsrc->zone,$o->rogue_seenby);
|
||||
$x = $o->seenby()->syncWithoutDetaching($seenby);
|
||||
|
||||
// In case our rogue_seenby changed
|
||||
if ($o->getDirty())
|
||||
$o->save();
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -305,7 +330,7 @@ class MessageProcess implements ShouldQueue
|
||||
// @todo Can the sender create it if it doesnt exist?
|
||||
// Can the system send messages to this area?
|
||||
if (! $ea->sec_write || ($this->pktsrc->security < $ea->sec_write)) {
|
||||
Log::alert(sprintf('%s:! FTN [%s] is not allowed to post [%s] to [%s].',self::LOGKEY,$this->pktsrc,$this->msg->msgid,$ea->name));
|
||||
Log::alert(sprintf('%s:! FTN [%s] is not allowed to post [%s] to [%s].',self::LOGKEY,$this->pktsrc->ftn,$this->msg->msgid,$ea->name));
|
||||
if (! $this->msg->rescanned->count())
|
||||
Notification::route('netmail',$this->pktsrc)->notify(new EchoareaNoWrite($this->msg));
|
||||
|
||||
@@ -314,7 +339,7 @@ class MessageProcess implements ShouldQueue
|
||||
|
||||
// If the node is not subscribed
|
||||
if ($this->pktsrc->echoareas->search(function($item) use ($ea) { return $item->id === $ea->id; }) === FALSE) {
|
||||
Log::alert(sprintf('%s:! FTN [%s] is not subscribed to [%s] for [%s].',self::LOGKEY,$this->pktsrc,$ea->name,$this->msg->msgid));
|
||||
Log::alert(sprintf('%s:! FTN [%s] is not subscribed to [%s] for [%s].',self::LOGKEY,$this->pktsrc->ftn,$ea->name,$this->msg->msgid));
|
||||
|
||||
if (! $this->msg->rescanned->count())
|
||||
Notification::route('netmail',$this->pktsrc)->notify(new EchoareaNotSubscribed($this->msg));
|
||||
@@ -338,9 +363,8 @@ class MessageProcess implements ShouldQueue
|
||||
$o->msg = $this->msg->message_src."\r";
|
||||
$o->msg_src = $this->msg->message_src;
|
||||
$o->msg_crc = md5($this->msg->message);
|
||||
$o->rogue_seenby = $this->msg->rogue_seenby;
|
||||
$o->set_path = $this->msg->pathaddress;
|
||||
$o->set_seenby = $this->msg->seenaddress;
|
||||
$o->set_path = $this->msg->path;
|
||||
$o->set_seenby = $this->msg->seenby;
|
||||
$o->set_recvtime = $this->recvtime;
|
||||
// Record receiving packet and sender
|
||||
$o->set_pkt = $this->packet;
|
||||
|
@@ -59,7 +59,7 @@ class PacketProcess implements ShouldQueue
|
||||
$processed = FALSE;
|
||||
|
||||
foreach ($f as $packet) {
|
||||
$pkt = Packet::process($packet,Arr::get(stream_get_meta_data($packet),'uri'),$f->itemSize(),$this->ao->system);
|
||||
$pkt = Packet::process($packet,Arr::get(stream_get_meta_data($packet),'uri'),$f->itemSize(),$this->ao->zone->domain);
|
||||
|
||||
// Check the messages are from the uplink
|
||||
if ($this->ao->system->addresses->search(function($item) use ($pkt) { return $item->id === $pkt->fftn_o->id; }) === FALSE) {
|
||||
|
Reference in New Issue
Block a user