2019-04-27 13:57:39 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
|
|
|
|
use Carbon\Carbon;
|
|
|
|
use Illuminate\Console\Command;
|
|
|
|
|
2019-05-06 12:29:29 +00:00
|
|
|
use App\Traits\{GetNode,ParseNodes,ParseZNFPDomain};
|
2019-04-27 13:57:39 +00:00
|
|
|
use App\Classes\FTNPacket;
|
2019-05-06 12:29:29 +00:00
|
|
|
use App\Models\{Echomail,Netmail,Zone};
|
2019-04-27 13:57:39 +00:00
|
|
|
|
|
|
|
class ImportPacket extends Command
|
|
|
|
{
|
2019-05-06 12:29:29 +00:00
|
|
|
use GetNode,ParseNodes,ParseZNFPDomain;
|
2019-04-27 13:57:39 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name and signature of the console command.
|
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
protected $signature = 'import:pkt {file : Packet File}';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The console command description.
|
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
protected $description = 'Import Mail Packet';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Create a new command instance.
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
public function __construct()
|
|
|
|
{
|
|
|
|
parent::__construct();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Execute the console command.
|
|
|
|
*
|
|
|
|
* @return mixed
|
2019-05-06 12:29:29 +00:00
|
|
|
* @throws \Exception
|
2019-04-27 13:57:39 +00:00
|
|
|
*/
|
|
|
|
public function handle()
|
|
|
|
{
|
|
|
|
$pkt = new FTNPacket($this->argument('file'));
|
|
|
|
|
|
|
|
foreach ($pkt->messages as $o)
|
|
|
|
{
|
2019-05-06 12:29:29 +00:00
|
|
|
switch ($o->type())
|
2019-04-27 13:57:39 +00:00
|
|
|
{
|
2019-05-06 12:29:29 +00:00
|
|
|
case 'echomail':
|
|
|
|
$date = Carbon::createFromFormat('d M y H:i:s',$o->date,($o->tzutc >= 0 ? '+' : '').substr_replace($o->tzutc,':',2,0));
|
|
|
|
|
|
|
|
// See if we already have this message.
|
|
|
|
$eo = Echomail::firstOrNew([
|
|
|
|
'date'=>$date,
|
|
|
|
'from_ftn'=>$this->get_node($o->fz,$o->fn,$o->ff,$o->fp)->id,
|
|
|
|
'msgid'=>$o->msgid,
|
|
|
|
]);
|
|
|
|
|
|
|
|
if (md5(utf8_decode($eo->message)) == md5($o->message))
|
|
|
|
{
|
|
|
|
$this->warn(sprintf('Duplicate message: %s@%s with id: %s',$o->from,$o->fqfa,$o->msgid));
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
$eo->pkt_from = $this->get_node($pkt->sz,$pkt->sn,$pkt->sf,$pkt->sp)->id;
|
|
|
|
$eo->pkt_to = $this->get_node($pkt->dz,$pkt->dn,$pkt->df,$pkt->dp)->id;
|
|
|
|
$eo->pkt = $pkt->filename;
|
|
|
|
$eo->pkt_date = $pkt->date;
|
|
|
|
|
|
|
|
$eo->flags = $o->flags;
|
|
|
|
$eo->cost = $o->cost;
|
|
|
|
$eo->from_user = utf8_encode($o->from);
|
|
|
|
$eo->to_user = utf8_encode($o->to);
|
|
|
|
$eo->subject = utf8_encode($o->subject);
|
|
|
|
$eo->tz = $o->tzutc;
|
|
|
|
|
|
|
|
$eo->area = $o->echoarea;
|
|
|
|
$eo->replyid = $o->replyid;
|
|
|
|
$eo->message = utf8_encode($o->message);
|
|
|
|
|
|
|
|
$eo->origin = utf8_encode($o->origin);
|
|
|
|
//$eo->original = (string)$o;
|
|
|
|
|
|
|
|
$eo->save();
|
|
|
|
|
|
|
|
foreach ($o->kludge as $k=>$v)
|
|
|
|
{
|
|
|
|
$eo->kludges()->attach($k,['value'=>json_encode($v)]);
|
|
|
|
}
|
|
|
|
|
|
|
|
foreach ($o->unknown as $v)
|
|
|
|
{
|
|
|
|
$eo->kludges()->attach('UNKNOWN',['value'=>json_encode($v)]);
|
|
|
|
}
|
|
|
|
|
|
|
|
foreach ($o->seenby as $v)
|
|
|
|
{
|
|
|
|
foreach ($this->parse_nodes(Zone::findOrFail($pkt->sz),$v) as $no)
|
|
|
|
{
|
|
|
|
$eo->seenbys()->attach($no->id);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$seq = 0;
|
|
|
|
foreach ($o->path as $v)
|
|
|
|
{
|
|
|
|
foreach ($this->parse_nodes(Zone::findOrFail($pkt->sz),$v) as $no)
|
|
|
|
{
|
|
|
|
$eo->paths()->attach($no->id,['sequence'=>$seq++]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 'netmail':
|
|
|
|
$date = Carbon::createFromFormat('d M y H:i:s',$o->date,($o->tzutc >= 0 ? '+' : '').substr_replace($o->tzutc,':',2,0));
|
|
|
|
|
|
|
|
// See if we already have this message.
|
|
|
|
$no = Netmail::firstOrNew([
|
|
|
|
'date'=>$date,
|
|
|
|
'from_ftn'=>$this->get_node($o->fz,$o->fn,$o->ff,$o->fp)->id,
|
|
|
|
'msgid'=>$o->msgid,
|
|
|
|
]);
|
|
|
|
|
|
|
|
if (md5(utf8_decode($no->message)) == md5($o->message))
|
|
|
|
{
|
|
|
|
$this->warn(sprintf('Duplicate message: %s@%s with id: %s',$o->from,$o->fqfa,$o->msgid));
|
|
|
|
//continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
$no->pkt_from = $this->get_node($pkt->sz,$pkt->sn,$pkt->sf,$pkt->sp)->id;
|
|
|
|
$no->pkt_to = $this->get_node($pkt->dz,$pkt->dn,$pkt->df,$pkt->dp)->id;
|
|
|
|
$no->pkt = $pkt->filename;
|
|
|
|
$no->pkt_date = $pkt->date;
|
|
|
|
|
|
|
|
$no->flags = $o->flags;
|
|
|
|
$no->cost = $o->cost;
|
|
|
|
$no->from_user = utf8_encode($o->from);
|
|
|
|
$no->to_user = utf8_encode($o->to);
|
|
|
|
$no->to_ftn = $this->get_node($o->tz,$o->tn,$o->tf,$o->tp)->id;
|
|
|
|
$no->subject = utf8_encode($o->subject);
|
|
|
|
$no->tz = $o->tzutc;
|
|
|
|
|
|
|
|
$no->replyid = $o->replyid;
|
|
|
|
$no->message = utf8_encode($o->message);
|
|
|
|
|
|
|
|
$no->origin = utf8_encode($o->origin);
|
|
|
|
|
|
|
|
$no->save();
|
|
|
|
|
|
|
|
foreach ($o->kludge as $k=>$v)
|
|
|
|
{
|
|
|
|
$no->kludges()->attach($k,['value'=>json_encode($v)]);
|
|
|
|
}
|
|
|
|
|
|
|
|
foreach ($o->unknown as $v)
|
|
|
|
{
|
|
|
|
$no->kludges()->attach('UNKNOWN',['value'=>json_encode($v)]);
|
|
|
|
}
|
|
|
|
|
|
|
|
$seq = 0;
|
|
|
|
foreach ($o->via as $v)
|
|
|
|
{
|
|
|
|
dump($v);
|
|
|
|
$data = preg_split('/\s/',$v);
|
|
|
|
$ftno = $this->parse_znfp_domain($data[0]);
|
|
|
|
unset($data[0]);
|
|
|
|
|
|
|
|
$no->paths()->attach($ftno->id,['sequence'=>$seq++,'value'=>json_encode($data)]);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
abort(500,'Unknown type: '.$o->type());
|
2019-04-27 13:57:39 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|