Skip to content

Commit de938f3

Browse files
committed
Add SRV record management
1 parent f7f46cd commit de938f3

26 files changed

+970
-32
lines changed

.env.example

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ AWS_USE_PATH_STYLE_ENDPOINT=false
6565
VITE_APP_NAME="${APP_NAME}"
6666

6767
CURSEFORGE_API_KEY=""
68+
BUNNYNET_API_KEY=""
6869

6970
# pterodactyl client api key
7071
PTERODACTYL_API_KEY=
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Filament\Resources\SrvRecords\Pages;
6+
7+
use App\Filament\Resources\SrvRecords\SrvRecordResource;
8+
use Filament\Resources\Pages\CreateRecord;
9+
10+
class CreateSrvRecord extends CreateRecord
11+
{
12+
protected static string $resource = SrvRecordResource::class;
13+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Filament\Resources\SrvRecords\Pages;
6+
7+
use App\Filament\Resources\SrvRecords\SrvRecordResource;
8+
use Filament\Actions\DeleteAction;
9+
use Filament\Resources\Pages\EditRecord;
10+
11+
class EditSrvRecord extends EditRecord
12+
{
13+
protected static string $resource = SrvRecordResource::class;
14+
15+
protected function getHeaderActions(): array
16+
{
17+
return [
18+
DeleteAction::make(),
19+
];
20+
}
21+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Filament\Resources\SrvRecords\Pages;
6+
7+
use App\Filament\Resources\SrvRecords\SrvRecordResource;
8+
use Filament\Actions\CreateAction;
9+
use Filament\Resources\Pages\ListRecords;
10+
11+
class ListSrvRecords extends ListRecords
12+
{
13+
protected static string $resource = SrvRecordResource::class;
14+
15+
protected function getHeaderActions(): array
16+
{
17+
return [
18+
CreateAction::make(),
19+
];
20+
}
21+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Filament\Resources\SrvRecords\Schemas;
6+
7+
use Filament\Forms\Components\TextInput;
8+
use Filament\Schemas\Schema;
9+
10+
class SrvRecordForm
11+
{
12+
public static function configure(Schema $schema): Schema
13+
{
14+
return $schema
15+
->components([
16+
TextInput::make('subdomain')
17+
->required(),
18+
TextInput::make('port')
19+
->required()
20+
->minValue(20000)
21+
->maxValue(65535)
22+
->maxLength(5)
23+
->integer(),
24+
]);
25+
}
26+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Filament\Resources\SrvRecords;
6+
7+
use App\Filament\Resources\SrvRecords\Pages\CreateSrvRecord;
8+
use App\Filament\Resources\SrvRecords\Pages\EditSrvRecord;
9+
use App\Filament\Resources\SrvRecords\Pages\ListSrvRecords;
10+
use App\Filament\Resources\SrvRecords\Schemas\SrvRecordForm;
11+
use App\Filament\Resources\SrvRecords\Tables\SrvRecordsTable;
12+
use App\Models\SrvRecord;
13+
use BackedEnum;
14+
use Filament\Resources\Resource;
15+
use Filament\Schemas\Schema;
16+
use Filament\Support\Icons\Heroicon;
17+
use Filament\Tables\Table;
18+
19+
class SrvRecordResource extends Resource
20+
{
21+
protected static ?string $model = SrvRecord::class;
22+
23+
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedLink;
24+
25+
protected static ?string $recordTitleAttribute = 'subdomain';
26+
27+
protected static ?string $modelLabel = 'DNS SRV Record';
28+
29+
public static function form(Schema $schema): Schema
30+
{
31+
return SrvRecordForm::configure($schema);
32+
}
33+
34+
public static function table(Table $table): Table
35+
{
36+
return SrvRecordsTable::configure($table);
37+
}
38+
39+
public static function getRelations(): array
40+
{
41+
return [
42+
//
43+
];
44+
}
45+
46+
public static function getPages(): array
47+
{
48+
return [
49+
'index' => ListSrvRecords::route('/'),
50+
'create' => CreateSrvRecord::route('/create'),
51+
'edit' => EditSrvRecord::route('/{record}/edit'),
52+
];
53+
}
54+
55+
public static function canAccess(): bool
56+
{
57+
return ! empty(config('services.bunnynet.api_key')) && parent::canAccess();
58+
}
59+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Filament\Resources\SrvRecords\Tables;
6+
7+
use Filament\Actions\BulkActionGroup;
8+
use Filament\Actions\DeleteAction;
9+
use Filament\Actions\DeleteBulkAction;
10+
use Filament\Actions\EditAction;
11+
use Filament\Tables\Columns\TextColumn;
12+
use Filament\Tables\Table;
13+
14+
class SrvRecordsTable
15+
{
16+
public static function configure(Table $table): Table
17+
{
18+
return $table
19+
->columns([
20+
TextColumn::make('subdomain')
21+
->searchable(),
22+
TextColumn::make('port')
23+
->numeric()
24+
->sortable(),
25+
TextColumn::make('created_at')
26+
->dateTime()
27+
->sortable()
28+
->toggleable(isToggledHiddenByDefault: true),
29+
TextColumn::make('updated_at')
30+
->dateTime()
31+
->sortable()
32+
->toggleable(isToggledHiddenByDefault: true),
33+
])
34+
->filters([
35+
//
36+
])
37+
->recordActions([
38+
EditAction::make(),
39+
DeleteAction::make(),
40+
])
41+
->toolbarActions([
42+
BulkActionGroup::make([
43+
DeleteBulkAction::make(),
44+
]),
45+
]);
46+
}
47+
}

app/Jobs/CleanupOldReleases.php

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,14 @@
66

77
use App\Enums\ReleaseStatus;
88
use App\Models\Release;
9-
use Illuminate\Bus\Queueable;
109
use Illuminate\Contracts\Queue\ShouldQueue;
11-
use Illuminate\Foundation\Bus\Dispatchable;
12-
use Illuminate\Queue\InteractsWithQueue;
13-
use Illuminate\Queue\SerializesModels;
10+
use Illuminate\Foundation\Queue\Queueable;
1411
use Illuminate\Support\Carbon;
1512
use Illuminate\Support\Facades\Storage;
1613

1714
class CleanupOldReleases implements ShouldQueue
1815
{
19-
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
16+
use Queueable;
2017

2118
public int $timeout = 3600;
2219

app/Jobs/DeleteRemovedFiles.php

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,12 @@
88
use App\Models\OverrideRule;
99
use App\Models\Release;
1010
use App\Services\SftpService;
11-
use Illuminate\Bus\Queueable;
1211
use Illuminate\Contracts\Queue\ShouldQueue;
13-
use Illuminate\Foundation\Bus\Dispatchable;
14-
use Illuminate\Queue\InteractsWithQueue;
15-
use Illuminate\Queue\SerializesModels;
12+
use Illuminate\Foundation\Queue\Queueable;
1613

1714
class DeleteRemovedFiles implements ShouldQueue
1815
{
19-
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
16+
use Queueable;
2017

2118
public int $timeout = 3600;
2219

app/Jobs/DeployRelease.php

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,13 @@
99
use App\Models\User;
1010
use App\Services\AuditService;
1111
use Filament\Notifications\Notification;
12-
use Illuminate\Bus\Queueable;
1312
use Illuminate\Contracts\Queue\ShouldBeUnique;
1413
use Illuminate\Contracts\Queue\ShouldQueue;
15-
use Illuminate\Foundation\Bus\Dispatchable;
16-
use Illuminate\Queue\InteractsWithQueue;
17-
use Illuminate\Queue\SerializesModels;
14+
use Illuminate\Foundation\Queue\Queueable;
1815

1916
class DeployRelease implements ShouldBeUnique, ShouldQueue
2017
{
21-
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
18+
use Queueable;
2219

2320
public int $timeout = 3600;
2421

0 commit comments

Comments
 (0)