From a3793f4b46007b754d2004e4fa3e5f59fa334b18 Mon Sep 17 00:00:00 2001 From: xiaomlove Date: Tue, 31 Jan 2023 18:23:20 +0800 Subject: [PATCH] add is_allowed to seed box records --- .../System/SeedBoxRecordResource.php | 12 ++++++- app/Models/SeedBoxRecord.php | 4 ++- ...d_is_allowed_to_seed_box_records_table.php | 32 +++++++++++++++++++ include/globalfunctions.php | 15 +++++++-- resources/lang/en/label.php | 2 ++ resources/lang/zh_CN/label.php | 2 ++ resources/lang/zh_TW/label.php | 2 ++ 7 files changed, 65 insertions(+), 4 deletions(-) create mode 100644 database/migrations/2023_01_31_172522_add_is_allowed_to_seed_box_records_table.php diff --git a/app/Filament/Resources/System/SeedBoxRecordResource.php b/app/Filament/Resources/System/SeedBoxRecordResource.php index 388f5198..b75730ad 100644 --- a/app/Filament/Resources/System/SeedBoxRecordResource.php +++ b/app/Filament/Resources/System/SeedBoxRecordResource.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\System; +use App\Filament\OptionsTrait; use App\Filament\Resources\System\SeedBoxRecordResource\Pages; use App\Filament\Resources\System\SeedBoxRecordResource\RelationManagers; use App\Models\SeedBoxRecord; @@ -19,6 +20,8 @@ use PhpIP\IP; class SeedBoxRecordResource extends Resource { + use OptionsTrait; + protected static ?string $model = SeedBoxRecord::class; protected static ?string $navigationIcon = 'heroicon-o-archive'; @@ -46,6 +49,10 @@ class SeedBoxRecordResource extends Resource Forms\Components\TextInput::make('ip_begin')->label(__('label.seed_box_record.ip_begin')), Forms\Components\TextInput::make('ip_end')->label(__('label.seed_box_record.ip_end')), Forms\Components\TextInput::make('ip')->label(__('label.seed_box_record.ip'))->helperText(__('label.seed_box_record.ip_help')), + Forms\Components\Toggle::make('is_allowed') + ->label(__('label.seed_box_record.is_allowed')) + ->helperText(__('label.seed_box_record.is_allowed_help')) + , Forms\Components\Textarea::make('comment')->label(__('label.comment')), ])->columns(1); } @@ -74,7 +81,8 @@ class SeedBoxRecordResource extends Resource } }) ->formatStateUsing(fn ($record) => $record->ip ?: sprintf('%s ~ %s', $record->ip_begin, $record->ip_end)), - Tables\Columns\TextColumn::make('comment')->label(__('label.comment')), + Tables\Columns\TextColumn::make('comment')->label(__('label.comment'))->searchable(), + Tables\Columns\IconColumn::make('is_allowed')->boolean()->label(__('label.seed_box_record.is_allowed')), Tables\Columns\BadgeColumn::make('status') ->colors([ 'success' => SeedBoxRecord::STATUS_ALLOWED, @@ -96,7 +104,9 @@ class SeedBoxRecordResource extends Resource }) , Tables\Filters\SelectFilter::make('type')->options(SeedBoxRecord::listTypes('text'))->label(__('label.seed_box_record.type')), + Tables\Filters\SelectFilter::make('is_allowed')->options(self::getYesNoOptions())->label(__('label.seed_box_record.is_allowed')), Tables\Filters\SelectFilter::make('status')->options(SeedBoxRecord::listStatus('text'))->label(__('label.seed_box_record.status')), + ]) ->actions([ Tables\Actions\EditAction::make(), diff --git a/app/Models/SeedBoxRecord.php b/app/Models/SeedBoxRecord.php index 0aa2c4ec..a6b08632 100644 --- a/app/Models/SeedBoxRecord.php +++ b/app/Models/SeedBoxRecord.php @@ -6,7 +6,9 @@ use Illuminate\Database\Eloquent\Casts\Attribute; class SeedBoxRecord extends NexusModel { - protected $fillable = ['type', 'uid', 'status', 'operator', 'bandwidth', 'ip', 'ip_begin', 'ip_end', 'ip_begin_numeric', 'ip_end_numeric', 'comment', 'version']; + protected $fillable = ['type', 'uid', 'status', 'operator', 'bandwidth', 'ip', 'ip_begin', 'ip_end', 'ip_begin_numeric', 'ip_end_numeric', + 'comment', 'version', 'is_allowed', + ]; public $timestamps = true; diff --git a/database/migrations/2023_01_31_172522_add_is_allowed_to_seed_box_records_table.php b/database/migrations/2023_01_31_172522_add_is_allowed_to_seed_box_records_table.php new file mode 100644 index 00000000..f166fb77 --- /dev/null +++ b/database/migrations/2023_01_31_172522_add_is_allowed_to_seed_box_records_table.php @@ -0,0 +1,32 @@ +integer('is_allowed')->default(0); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('seed_box_records', function (Blueprint $table) { + $table->dropColumn(['is_allowed']); + }); + } +}; diff --git a/include/globalfunctions.php b/include/globalfunctions.php index 069d7ca9..b9e51e1b 100644 --- a/include/globalfunctions.php +++ b/include/globalfunctions.php @@ -836,8 +836,19 @@ function isIPSeedBox($ip, $uid = null, $withoutCache = false): bool $ipObject = \PhpIP\IP::create($ip); $ipNumeric = $ipObject->numeric(); $ipVersion = $ipObject->getVersion(); + //check allow list first, not consider specific user + $checkSeedBoxAllowedSql = sprintf( + 'select id from seed_box_records where `ip_begin_numeric` <= "%s" and `ip_end_numeric` >= "%s" and `version` = %s and `status` = %s and `is_allowed` = 1 limit 1', + $ipNumeric, $ipNumeric, $ipVersion, \App\Models\SeedBoxRecord::STATUS_ALLOWED + ); + $res = \Nexus\Database\NexusDB::select($checkSeedBoxAllowedSql); + if (!empty($res)) { + \Nexus\Database\NexusDB::cache_put($key, 1, 300); + do_log("$key, get result from database, is_allowed = 1, false"); + return false; + } $checkSeedBoxAdminSql = sprintf( - 'select id from seed_box_records where `ip_begin_numeric` <= "%s" and `ip_end_numeric` >= "%s" and `type` = %s and `version` = %s and `status` = %s limit 1', + 'select id from seed_box_records where `ip_begin_numeric` <= "%s" and `ip_end_numeric` >= "%s" and `type` = %s and `version` = %s and `status` = %s and `is_allowed` = 0 limit 1', $ipNumeric, $ipNumeric, \App\Models\SeedBoxRecord::TYPE_ADMIN, $ipVersion, \App\Models\SeedBoxRecord::STATUS_ALLOWED ); $res = \Nexus\Database\NexusDB::select($checkSeedBoxAdminSql); @@ -848,7 +859,7 @@ function isIPSeedBox($ip, $uid = null, $withoutCache = false): bool } if ($uid !== null) { $checkSeedBoxUserSql = sprintf( - 'select id from seed_box_records where `ip_begin_numeric` <= "%s" and `ip_end_numeric` >= "%s" and `uid` = %s and `type` = %s and `version` = %s and `status` = %s limit 1', + 'select id from seed_box_records where `ip_begin_numeric` <= "%s" and `ip_end_numeric` >= "%s" and `uid` = %s and `type` = %s and `version` = %s and `status` = %s and `is_allowed` = 0 limit 1', $ipNumeric, $ipNumeric, $uid, \App\Models\SeedBoxRecord::TYPE_USER, $ipVersion, \App\Models\SeedBoxRecord::STATUS_ALLOWED ); $res = \Nexus\Database\NexusDB::select($checkSeedBoxUserSql); diff --git a/resources/lang/en/label.php b/resources/lang/en/label.php index 36f90368..0c401070 100644 --- a/resources/lang/en/label.php +++ b/resources/lang/en/label.php @@ -233,6 +233,8 @@ return [ 'ip_end' => 'End IP', 'ip_help' => 'Fill in the begin IP + end IP, or IP (Block), not both', 'status' => 'Status', + 'is_allowed' => 'Is whitelisted', + 'is_allowed_help' => 'IPs in the whitelist are not affected by the SeedBox rule', ], 'menu' => [ 'label' => 'Custom menu', diff --git a/resources/lang/zh_CN/label.php b/resources/lang/zh_CN/label.php index d47e6bc5..d8189242 100644 --- a/resources/lang/zh_CN/label.php +++ b/resources/lang/zh_CN/label.php @@ -239,6 +239,8 @@ return [ 'ip_end' => '结束 IP', 'ip_help' => '填写起始 IP + 结束 IP,或 IP(段),不要同时填写', 'status' => '状态', + 'is_allowed' => '是否白名单', + 'is_allowed_help' => '位于白名单中的 IP 不受 SeedBox 规则影响', ], 'menu' => [ 'label' => '自定义菜单', diff --git a/resources/lang/zh_TW/label.php b/resources/lang/zh_TW/label.php index 63fe67ae..24655659 100644 --- a/resources/lang/zh_TW/label.php +++ b/resources/lang/zh_TW/label.php @@ -233,6 +233,8 @@ return [ 'ip_end' => '結束 IP', 'ip_help' => '填寫起始 IP + 結束 IP,或 IP(段),不要同時填寫', 'status' => '狀態', + 'is_allowed' => '是否白名單', + 'is_allowed_help' => '位於白名單中的 IP 不受 SeedBox 規則影響', ], 'menu' => [ 'label' => '自定義菜單',