Change our $casts array to a casts() function for our updated laravel, fix incoming TICs to not export to our system

This commit is contained in:
Deon George 2025-04-20 22:19:05 +10:00
parent e2cd09ac98
commit 8edc45fbd5
18 changed files with 151 additions and 98 deletions

View File

@ -9,10 +9,9 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\QueryException; use Illuminate\Database\QueryException;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use App\Classes\FTN\{Message,Packet}; use App\Classes\FTN\Packet;
use App\Exceptions\InvalidFTNException; use App\Exceptions\InvalidFTNException;
use App\Traits\{QueryCacheableConfig,ScopeActive}; use App\Traits\{QueryCacheableConfig,ScopeActive};

View File

@ -6,7 +6,10 @@ use Illuminate\Database\Eloquent\Relations\Pivot;
class AddressEchoarea extends Pivot class AddressEchoarea extends Pivot
{ {
protected $casts = [ protected function casts(): array
'subscribed' => 'datetime:Y-m-d H:i', {
]; return [
'subscribed' => 'datetime:Y-m-d H:i',
];
}
} }

View File

@ -28,9 +28,12 @@ class Domain extends Model
private const CACHE_TIME = 3600; private const CACHE_TIME = 3600;
private const STATS_MONTHS = 6; private const STATS_MONTHS = 6;
protected $casts = [ protected function casts(): array
'homepage' => CompressedStringOrNull::class, {
]; return [
'homepage' => CompressedStringOrNull::class,
];
}
/* SCOPES */ /* SCOPES */

View File

@ -11,12 +11,15 @@ class Dynamic extends Model
{ {
use SoftDeletes; use SoftDeletes;
protected $casts = [ protected function casts(): array
'arguments' => CollectionOrNull::class, {
'next_at' => 'datetime:Y-m-d H:i:s', return [
'start_date' => 'datetime:Y-m-d', 'arguments' => CollectionOrNull::class,
'start_time' => 'datetime:H:i:s', 'next_at' => 'datetime:Y-m-d H:i:s',
]; 'start_date' => 'datetime:Y-m-d',
'start_time' => 'datetime:H:i:s',
];
}
/* RELATIONS */ /* RELATIONS */

View File

@ -45,10 +45,13 @@ class Echoarea extends Model
private const CACHE_TIME = 3600; private const CACHE_TIME = 3600;
protected $casts = [ protected function casts(): array
'first_message' => 'datetime:Y-m-d H:i:s', {
'last_message' => 'datetime:Y-m-d H:i:s', return [
]; 'first_message' => 'datetime:Y-m-d H:i:s',
'last_message' => 'datetime:Y-m-d H:i:s',
];
}
/* RELATIONS */ /* RELATIONS */

View File

@ -34,17 +34,20 @@ final class Echomail extends Model implements Packet
// When generating a packet for this echomail, the packet recipient is our tftn // When generating a packet for this echomail, the packet recipient is our tftn
public Address $tftn; public Address $tftn;
protected $casts = [ protected function casts(): array
'to' => UTF8StringOrNull::class, {
'from' => UTF8StringOrNull::class, return [
'subject' => UTF8StringOrNull::class, 'to' => UTF8StringOrNull::class,
'datetime' => 'datetime:Y-m-d H:i:s', 'from' => UTF8StringOrNull::class,
'kludges' => CollectionOrNull::class, 'subject' => UTF8StringOrNull::class,
'msg' => CompressedStringOrNull::class, 'datetime' => 'datetime:Y-m-d H:i:s',
'msg_src' => CompressedStringOrNull::class, 'kludges' => CollectionOrNull::class,
'rogue_seenby' => CollectionOrNull::class, 'msg' => CompressedStringOrNull::class,
'rogue_path' => CollectionOrNull::class, // @deprecated? 'msg_src' => CompressedStringOrNull::class,
]; 'rogue_seenby' => CollectionOrNull::class,
'rogue_path' => CollectionOrNull::class, // @deprecated?
];
}
public function __get($key) public function __get($key)
{ {
@ -258,7 +261,7 @@ final class Echomail extends Model implements Packet
$exportto = $model $exportto = $model
->echoarea ->echoarea
->addresses ->addresses
->filter(function($item) use ($model) { return $model->echoarea->can_read($item->security); }) ->filter(fn($item)=>$model->echoarea->can_read($item->security))
->pluck('id') ->pluck('id')
->diff(our_address($model->fftn->zone->domain,FALSE)->pluck('id')) ->diff(our_address($model->fftn->zone->domain,FALSE)->pluck('id'))
->diff($seenby); ->diff($seenby);

View File

@ -25,15 +25,18 @@ class File extends Model
public Collection $set_seenby; public Collection $set_seenby;
public string $src_file = ''; public string $src_file = '';
protected $casts = [ protected function casts(): array
'kludges' => CollectionOrNull::class, {
'datetime' => 'datetime:Y-m-d H:i:s', return [
'desc' => CompressedStringOrNull::class, 'kludges' => CollectionOrNull::class,
'ldesc' => CompressedStringOrNull::class, 'datetime' => 'datetime:Y-m-d H:i:s',
'rogue_seenby' => CollectionOrNull::class, 'desc' => CompressedStringOrNull::class,
'rogue_path' => CollectionOrNull::class, 'ldesc' => CompressedStringOrNull::class,
'size' => 'int', 'rogue_seenby' => CollectionOrNull::class,
]; 'rogue_path' => CollectionOrNull::class,
'size' => 'int',
];
}
public static function boot() public static function boot()
{ {
@ -146,18 +149,21 @@ class File extends Model
$rogue->push($sb); $rogue->push($sb);
} }
$model->rogue_seenby = $rogue; if (count($rogue)) {
$model->rogue_seenby = $rogue;
$model->save();
}
$model->seenby()->sync($seenby); $model->seenby()->sync($seenby);
$model->save();
// See if we need to export this file. // See if we need to export this file.
if ($model->filearea->sec_read) { if ($model->filearea->sec_read) {
$exportto = $model $exportto = $model
->filearea ->filearea
->addresses ->addresses
->filter(function($item) use ($model) { return $model->filearea->can_read($item->security); }) ->filter(fn($item)=>$model->filearea->can_read($item->security))
->pluck('id') ->pluck('id')
->diff(our_address($model->fftn->zone->domain,FALSE)->pluck('id'))
->diff($seenby); ->diff($seenby);
if ($exportto->count()) { if ($exportto->count()) {

View File

@ -11,10 +11,13 @@ class Filearea extends Model
{ {
use SoftDeletes,ScopeActive,AreaSecurity; use SoftDeletes,ScopeActive,AreaSecurity;
protected $casts = [ protected function casts(): array
'first_file' => 'datetime:Y-m-d H:i:s', {
'last_file' => 'datetime:Y-m-d H:i:s', return [
]; 'first_file' => 'datetime:Y-m-d H:i:s',
'last_file' => 'datetime:Y-m-d H:i:s',
];
}
protected $fillable = [ protected $fillable = [
'name', 'name',

View File

@ -7,20 +7,23 @@ use Illuminate\Support\Facades\Config;
class Job extends Model class Job extends Model
{ {
public $timestamps = false; public $timestamps = false;
protected $casts = [ protected function casts(): array
'payload' => 'array', {
'reserved_at' => 'datetime', return [
'available_at' => 'datetime', 'payload' => 'array',
'created_at' => 'datetime', 'reserved_at' => 'datetime',
]; 'available_at' => 'datetime',
'created_at' => 'datetime',
];
}
public function __construct(array $attributes = []) public function __construct(array $attributes=[])
{ {
parent::__construct($attributes); parent::__construct($attributes);
$this->table = Config::get('queue.connections.' . (Config::get('queue.default', 'database')) . '.table', 'jobs'); $this->table = Config::get('queue.connections.' . (Config::get('queue.default', 'database')) . '.table', 'jobs');
} }
public function getDisplayNameAttribute() public function getDisplayNameAttribute()
{ {
@ -66,4 +69,4 @@ class Job extends Model
{ {
return unserialize($this->payload['data']['command']); return unserialize($this->payload['data']['command']);
} }
} }

View File

@ -34,16 +34,19 @@ final class Netmail extends Model implements Packet
'Via' => 'set_path', 'Via' => 'set_path',
]; ];
protected $casts = [ protected function casts(): array
'to' => UTF8StringOrNull::class, {
'from' => UTF8StringOrNull::class, return [
'subject' => UTF8StringOrNull::class, 'to' => UTF8StringOrNull::class,
'datetime' => 'datetime:Y-m-d H:i:s', 'from' => UTF8StringOrNull::class,
'kludges' => CollectionOrNull::class, 'subject' => UTF8StringOrNull::class,
'msg' => CompressedStringOrNull::class, 'datetime' => 'datetime:Y-m-d H:i:s',
'msg_src' => CompressedStringOrNull::class, 'kludges' => CollectionOrNull::class,
'sent_at' => 'datetime:Y-m-d H:i:s', 'msg' => CompressedStringOrNull::class,
]; 'msg_src' => CompressedStringOrNull::class,
'sent_at' => 'datetime:Y-m-d H:i:s',
];
}
public function __get($key) public function __get($key)
{ {

View File

@ -9,9 +9,12 @@ class Nodelist extends Model
{ {
use SoftDeletes; use SoftDeletes;
protected $casts = [ protected function casts(): array
'date' => 'datetime:Y-m-d H:i:s' {
]; return [
'date' => 'datetime:Y-m-d H:i:s'
];
}
protected $fillable = ['date','domain_id']; protected $fillable = ['date','domain_id'];

View File

@ -12,9 +12,12 @@ class Origin extends Model
public const UPDATED_AT = NULL; public const UPDATED_AT = NULL;
protected $casts = [ protected function casts(): array
'value' => UTF8StringOrNull::class, {
]; return [
'value' => UTF8StringOrNull::class,
];
}
public function complete(Address $o): string public function complete(Address $o): string
{ {

View File

@ -6,7 +6,10 @@ use Illuminate\Database\Eloquent\Relations\Pivot;
class ViaPivot extends Pivot class ViaPivot extends Pivot
{ {
protected $casts = [ protected function casts(): array
'datetime' => 'datetime', {
]; return [
} 'datetime' => 'datetime',
];
}
}

View File

@ -35,10 +35,13 @@ class Setup extends Model
public const MAX_BATCH_FILES = 5; public const MAX_BATCH_FILES = 5;
public const MAX_MSGS_PKT = 50; public const MAX_MSGS_PKT = 50;
protected $casts = [ protected function casts(): array
'options' => 'array', {
'servers' => 'array', return [
]; 'options' => 'array',
'servers' => 'array',
];
}
/** /**
* @throws \Exception * @throws \Exception

View File

@ -17,9 +17,12 @@ class System extends Model
public const default = 'Discovered System'; public const default = 'Discovered System';
protected $casts = [ protected function casts(): array
'last_session' => 'datetime:Y-m-d H:i:s' {
]; return [
'last_session' => 'datetime:Y-m-d H:i:s'
];
}
/* STATIC */ /* STATIC */

View File

@ -12,9 +12,12 @@ class Tagline extends Model
public const UPDATED_AT = NULL; public const UPDATED_AT = NULL;
protected $casts = [ protected function casts(): array
'value' => UTF8StringOrNull::class, {
]; return [
'value' => UTF8StringOrNull::class,
];
}
public function complete(): string public function complete(): string
{ {

View File

@ -12,9 +12,12 @@ class Tearline extends Model
public const UPDATED_AT = NULL; public const UPDATED_AT = NULL;
protected $casts = [ protected function casts(): array
'value' => UTF8StringOrNull::class, {
]; return [
'value' => UTF8StringOrNull::class,
];
}
public function complete(): string public function complete(): string
{ {

View File

@ -53,13 +53,16 @@ class User extends Authenticatable implements MustVerifyEmail
/** /**
* The attributes that should be cast to native types. * The attributes that should be cast to native types.
* *
* @var array * @return array
*/ */
protected $casts = [ protected function casts(): array
'email_verified_at' => 'datetime', {
'last_on' => 'datetime:Y-m-d H:i:s', return [
'passkey' => 'json', 'email_verified_at' => 'datetime',
]; 'last_on' => 'datetime:Y-m-d H:i:s',
'passkey' => 'json',
];
}
/* RELATIONS */ /* RELATIONS */