Compare commits

..

1 Commits

Author SHA1 Message Date
Lance Pioch
c25a0c200c fix: handle invalid svg icon in generic-oidc provider gracefully
When an invalid SVG icon name is configured for a generic-oidc provider,
the login page crashes with a SvgNotFound exception making the dashboard
inaccessible. Validate the icon via the injected IconFactory before
passing it to Filament and fall back to null if not found.

Fixes #2210
2026-02-11 11:29:58 -05:00
16 changed files with 219 additions and 239 deletions

View File

@@ -26,7 +26,7 @@ jobs:
strategy:
fail-fast: true
matrix:
php: [8.3, 8.4, 8.5]
php: [8.2, 8.3, 8.4, 8.5]
env:
DB_CONNECTION: sqlite
DB_DATABASE: testing.sqlite
@@ -79,8 +79,8 @@ jobs:
strategy:
fail-fast: true
matrix:
php: [8.5]
database: ["mysql:8.4", "mysql:9.6"]
php: [8.2, 8.3, 8.4, 8.5]
database: ["mysql:8"]
services:
database:
image: ${{ matrix.database }}
@@ -147,8 +147,8 @@ jobs:
strategy:
fail-fast: true
matrix:
php: [8.5]
database: ["mariadb:10.11", "mariadb:11.4"]
php: [8.2, 8.3, 8.4, 8.5]
database: ["mariadb:10.6", "mariadb:10.11", "mariadb:11.4"]
services:
database:
image: ${{ matrix.database }}
@@ -215,8 +215,8 @@ jobs:
strategy:
fail-fast: true
matrix:
php: [8.5]
database: ["postgres:17", "postgres:18"]
php: [8.2, 8.3, 8.4, 8.5]
database: ["postgres:14"]
services:
database:
image: ${{ matrix.database }}

View File

@@ -86,7 +86,8 @@ RUN mkdir -p /pelican-data/storage /pelican-data/plugins /var/run/supervisord \
# Allow www-data write permissions where necessary
&& chown -R www-data: /pelican-data .env ./storage ./plugins ./bootstrap/cache /var/run/supervisord /var/www/html/public/storage \
&& chmod -R 770 /pelican-data ./storage ./bootstrap/cache /var/run/supervisord \
&& chown -R www-data: /usr/local/etc/php/ /usr/local/etc/php-fpm.d/ /var/www/html/composer.json /var/www/html/composer.lock
&& chown -R www-data: /usr/local/etc/php/ /usr/local/etc/php-fpm.d/
# Configure Supervisor
COPY docker/supervisord.conf /etc/supervisord.conf
COPY docker/Caddyfile /etc/caddy/Caddyfile

View File

@@ -91,7 +91,7 @@ RUN mkdir -p /pelican-data/storage /pelican-data/plugins /var/run/supervisord \
# Allow www-data write permissions where necessary
&& chown -R www-data: /pelican-data .env ./storage ./plugins ./bootstrap/cache /var/run/supervisord /var/www/html/public/storage \
&& chmod -R 770 /pelican-data ./storage ./bootstrap/cache /var/run/supervisord \
&& chown -R www-data: /usr/local/etc/php/ /usr/local/etc/php-fpm.d/ /var/www/html/composer.json /var/www/html/composer.lock
&& chown -R www-data: /usr/local/etc/php/ /usr/local/etc/php-fpm.d/
# Configure Supervisor
COPY docker/supervisord.conf /etc/supervisord.conf

View File

@@ -13,6 +13,8 @@ use App\Traits\Filament\CanCustomizeHeaderActions;
use App\Traits\Filament\CanCustomizeHeaderWidgets;
use App\Traits\Filament\CanCustomizeTabs;
use BackedEnum;
use BladeUI\Icons\Exceptions\SvgNotFound;
use BladeUI\Icons\Factory as IconFactory;
use Exception;
use Filament\Actions\Action;
use Filament\Actions\ActionGroup;
@@ -68,6 +70,8 @@ class Settings extends Page implements HasSchemas
protected CaptchaService $captchaService;
protected IconFactory $iconFactory;
/** @var array<mixed>|null */
public ?array $data = [];
@@ -76,11 +80,12 @@ class Settings extends Page implements HasSchemas
$this->form->fill();
}
public function boot(OAuthService $oauthService, AvatarService $avatarService, CaptchaService $captchaService): void
public function boot(OAuthService $oauthService, AvatarService $avatarService, CaptchaService $captchaService, IconFactory $iconFactory): void
{
$this->oauthService = $oauthService;
$this->avatarService = $avatarService;
$this->captchaService = $captchaService;
$this->iconFactory = $iconFactory;
}
public static function canAccess(): bool
@@ -565,9 +570,18 @@ class Settings extends Page implements HasSchemas
foreach ($oauthSchemas as $schema) {
$key = $schema->getConfigKey();
$icon = $schema->getIcon();
if (is_string($icon)) {
try {
$this->iconFactory->svg($icon);
} catch (SvgNotFound) {
$icon = null;
}
}
$formFields[] = Section::make($schema->getName())
->columns(5)
->icon($schema->getIcon() ?? TablerIcon::BrandOauth)
->icon($icon ?? TablerIcon::BrandOauth)
->collapsed(fn () => !$schema->isEnabled())
->collapsible()
->schema([

View File

@@ -8,7 +8,6 @@ use App\Services\Databases\Hosts\HostCreationService;
use App\Traits\Filament\CanCustomizeHeaderActions;
use App\Traits\Filament\CanCustomizeHeaderWidgets;
use Exception;
use Filament\Actions\Action;
use Filament\Forms\Components\Hidden;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
@@ -46,17 +45,6 @@ class CreateDatabaseHost extends CreateRecord
$this->service = $service;
}
protected function getCreateFormAction(): Action
{
$hasFormWrapper = $this->hasFormWrapper();
return Action::make('exclude_create')
->label(trans('filament-panels::resources/pages/create-record.form.actions.create.label'))
->submit($hasFormWrapper ? $this->getSubmitFormLivewireMethodName() : null)
->action($hasFormWrapper ? null : $this->getSubmitFormLivewireMethodName())
->keyBindings(['mod+s']);
}
/** @return Step[]
* @throws Exception
*/

View File

@@ -91,10 +91,7 @@ class AllocationsRelationManager extends RelationManager
->icon(TablerIcon::WorldPlus)
->schema(fn () => [
Select::make('allocation_ip')
->options(fn (Get $get) => collect($this->getOwnerRecord()->ipAddresses())
->when($get('allocation_ip'), fn ($ips, $current) => $ips->push($current))
->unique()
->mapWithKeys(fn (string $ip) => [$ip => $ip]))
->options(fn () => collect($this->getOwnerRecord()->ipAddresses())->mapWithKeys(fn (string $ip) => [$ip => $ip]))
->label(trans('admin/node.ip_address'))
->inlineLabel()
->ip()
@@ -109,18 +106,6 @@ class AllocationsRelationManager extends RelationManager
cache()->forget("nodes.{$this->getOwnerRecord()->id}.ips");
})
)
->suffixAction(
Action::make('custom_ip')
->icon(TablerIcon::Keyboard)
->tooltip(trans('admin/node.custom_ip'))
->schema([
TextInput::make('custom_ip')
->label(trans('admin/node.ip_address'))
->ip()
->required(),
])
->action(fn (array $data, Set $set) => $set('allocation_ip', $data['custom_ip']))
)
->required(),
TextInput::make('allocation_alias')
->label(trans('admin/node.table.alias'))

View File

@@ -251,10 +251,7 @@ class CreateServer extends CreateRecord
return [
Select::make('allocation_ip')
->options(fn (Get $get) => collect(Node::find($getPage('node_id'))?->ipAddresses())
->when($get('allocation_ip'), fn ($ips, $current) => $ips->push($current))
->unique()
->mapWithKeys(fn (string $ip) => [$ip => $ip]))
->options(fn () => collect(Node::find($get('node_id'))?->ipAddresses())->mapWithKeys(fn (string $ip) => [$ip => $ip]))
->label(trans('admin/server.ip_address'))->inlineLabel()
->helperText(trans('admin/server.ip_address_helper'))
->afterStateUpdated(fn (Set $set) => $set('allocation_ports', []))
@@ -269,18 +266,6 @@ class CreateServer extends CreateRecord
cache()->forget("nodes.{$get('node_id')}.ips");
})
)
->suffixAction(
Action::make('custom_ip')
->icon(TablerIcon::Keyboard)
->tooltip(trans('admin/node.custom_ip'))
->schema([
TextInput::make('custom_ip')
->label(trans('admin/node.ip_address'))
->ip()
->required(),
])
->action(fn (array $data, Set $set) => $set('allocation_ip', $data['custom_ip']))
)
->required(),
TextInput::make('allocation_alias')
->label(trans('admin/server.alias'))->inlineLabel()

View File

@@ -113,10 +113,7 @@ class AllocationsRelationManager extends RelationManager
->createAnother(false)
->schema(fn () => [
Select::make('allocation_ip')
->options(fn (Get $get) => collect($this->getOwnerRecord()->node->ipAddresses())
->when($get('allocation_ip'), fn ($ips, $current) => $ips->push($current))
->unique()
->mapWithKeys(fn (string $ip) => [$ip => $ip]))
->options(fn () => collect($this->getOwnerRecord()->node->ipAddresses())->mapWithKeys(fn (string $ip) => [$ip => $ip]))
->label(trans('admin/server.ip_address'))
->inlineLabel()
->ip()
@@ -129,18 +126,6 @@ class AllocationsRelationManager extends RelationManager
cache()->forget("nodes.{$this->getOwnerRecord()->node->id}.ips");
})
)
->suffixAction(
Action::make('custom_ip')
->icon(TablerIcon::Keyboard)
->tooltip(trans('admin/node.custom_ip'))
->schema([
TextInput::make('custom_ip')
->label(trans('admin/node.ip_address'))
->ip()
->required(),
])
->action(fn (array $data, Set $set) => $set('allocation_ip', $data['custom_ip']))
)
->afterStateUpdated(fn (Set $set) => $set('allocation_ports', []))
->required(),
TextInput::make('allocation_alias')

View File

@@ -142,7 +142,7 @@ class UserResource extends Resource
])
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make('exclude_bulk_delete'),
DeleteBulkAction::make(),
]),
CreateAction::make()
->hiddenLabel()

View File

@@ -4,6 +4,8 @@ namespace App\Filament\Pages\Auth;
use App\Extensions\Captcha\CaptchaService;
use App\Extensions\OAuth\OAuthService;
use BladeUI\Icons\Exceptions\SvgNotFound;
use BladeUI\Icons\Factory as IconFactory;
use Filament\Actions\Action;
use Filament\Auth\Pages\Login as BaseLogin;
use Filament\Forms\Components\TextInput;
@@ -19,10 +21,13 @@ class Login extends BaseLogin
protected CaptchaService $captchaService;
public function boot(OAuthService $oauthService, CaptchaService $captchaService): void
protected IconFactory $iconFactory;
public function boot(OAuthService $oauthService, CaptchaService $captchaService, IconFactory $iconFactory): void
{
$this->oauthService = $oauthService;
$this->captchaService = $captchaService;
$this->iconFactory = $iconFactory;
}
public function form(Schema $schema): Schema
@@ -87,9 +92,18 @@ class Login extends BaseLogin
$color = $schema->getHexColor();
$color = is_string($color) ? Color::hex($color) : null;
$icon = $schema->getIcon();
if (is_string($icon)) {
try {
$this->iconFactory->svg($icon);
} catch (SvgNotFound) {
$icon = null;
}
}
$actions[] = Action::make("oauth_$id")
->label($schema->getName())
->icon($schema->getIcon())
->icon($icon)
->color($color)
->url(route('auth.oauth.redirect', ['driver' => $id], false));
}

View File

@@ -27,6 +27,7 @@ use BackedEnum;
use Filament\Actions\Action;
use Filament\Actions\ActionGroup;
use Filament\Actions\CreateAction;
use Filament\Actions\DeleteAction;
use Filament\Facades\Filament;
use Filament\Forms\Components\Checkbox;
use Filament\Forms\Components\Textarea;
@@ -127,7 +128,7 @@ class BackupResource extends Resource
])
->recordActions([
ActionGroup::make([
Action::make('exclude_rename')
Action::make('rename')
->icon(TablerIcon::Pencil)
->authorize(fn () => user()?->can(SubuserPermission::BackupDelete, $server))
->label(trans('server/backup.actions.rename.title'))
@@ -157,14 +158,14 @@ class BackupResource extends Resource
->send();
})
->visible(fn (Backup $backup) => $backup->status === BackupStatus::Successful),
Action::make('exclude_lock')
Action::make('lock')
->iconSize(IconSize::Large)
->icon(fn (Backup $backup) => !$backup->is_locked ? TablerIcon::Lock : TablerIcon::LockOpen)
->authorize(fn () => user()?->can(SubuserPermission::BackupDelete, $server))
->label(fn (Backup $backup) => !$backup->is_locked ? trans('server/backup.actions.lock.lock') : trans('server/backup.actions.lock.unlock'))
->action(fn (BackupController $backupController, Backup $backup, Request $request) => $backupController->toggleLock($request, $server, $backup))
->visible(fn (Backup $backup) => $backup->status === BackupStatus::Successful),
Action::make('exclude_download')
Action::make('download')
->label(trans('server/backup.actions.download'))
->iconSize(IconSize::Large)
->color('primary')
@@ -172,7 +173,7 @@ class BackupResource extends Resource
->authorize(fn () => user()?->can(SubuserPermission::BackupDownload, $server))
->url(fn (DownloadLinkService $downloadLinkService, Backup $backup, Request $request) => $downloadLinkService->handle($backup, $request->user()), true)
->visible(fn (Backup $backup) => $backup->status === BackupStatus::Successful),
Action::make('exclude_restore')
Action::make('restore')
->label(trans('server/backup.actions.restore.title'))
->iconSize(IconSize::Large)
->color('success')
@@ -225,12 +226,7 @@ class BackupResource extends Resource
->send();
})
->visible(fn (Backup $backup) => $backup->status === BackupStatus::Successful),
Action::make('exclude_delete')
->icon(TablerIcon::Trash)
->color('danger')
->requiresConfirmation()
->authorize(fn () => user()?->can(SubuserPermission::BackupDelete, $server))
->label(trans('filament-actions::delete.single.label'))
DeleteAction::make('delete')
->iconSize(IconSize::Large)
->disabled(fn (Backup $backup) => $backup->is_locked && $backup->status !== BackupStatus::Failed)
->modalDescription(fn (Backup $backup) => trans('server/backup.actions.delete.description', ['backup' => $backup->name]))

View File

@@ -123,6 +123,18 @@ class SubuserResource extends Resource
),
])
->recordActions([
DeleteAction::make()
->label(trans('server/user.delete'))
->hidden(fn (Subuser $subuser) => user()?->id === $subuser->user->id)
->successNotificationTitle(null)
->action(function (Subuser $subuser, SubuserDeletionService $subuserDeletionService) use ($server) {
$subuserDeletionService->handle($subuser, $server);
Notification::make()
->title(trans('server/user.notification_delete'))
->success()
->send();
}),
EditAction::make()
->label(trans('server/user.edit'))
->hidden(fn (Subuser $subuser) => user()?->id === $subuser->user->id)
@@ -202,19 +214,6 @@ class SubuserResource extends Resource
return $data;
}),
DeleteAction::make()
->label(trans('server/user.delete'))
->hidden(fn (Subuser $subuser) => user()?->id === $subuser->user->id)
->authorize(fn () => user()?->can(SubuserPermission::UserDelete, $server))
->successNotificationTitle(null)
->action(function (Subuser $subuser, SubuserDeletionService $subuserDeletionService) use ($server) {
$subuserDeletionService->handle($subuser, $server);
Notification::make()
->title(trans('server/user.notification_delete'))
->success()
->send();
}),
])
->toolbarActions([
CreateAction::make('invite')

View File

@@ -15,7 +15,7 @@
"filament/filament": "^4.5",
"gboquizosanchez/filament-log-viewer": "^2.1",
"guzzlehttp/guzzle": "^7.10",
"laravel/framework": "^12.51",
"laravel/framework": "^12.49",
"laravel/helpers": "^1.8",
"laravel/sanctum": "^4.2",
"laravel/socialite": "^5.24",

280
composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "784a5e04d3c28e0dba289d45a239075e",
"content-hash": "15f89930db77693b2d692dbadf22fb9f",
"packages": [
{
"name": "anourvalar/eloquent-serialize",
@@ -128,16 +128,16 @@
},
{
"name": "aws/aws-sdk-php",
"version": "3.369.31",
"version": "3.369.29",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
"reference": "c7bf53dfb09bea3ebfd19b89213625aa134dcc71"
"reference": "068195b2980cf5cf4ade2515850d461186db3310"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/c7bf53dfb09bea3ebfd19b89213625aa134dcc71",
"reference": "c7bf53dfb09bea3ebfd19b89213625aa134dcc71",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/068195b2980cf5cf4ade2515850d461186db3310",
"reference": "068195b2980cf5cf4ade2515850d461186db3310",
"shasum": ""
},
"require": {
@@ -219,9 +219,9 @@
"support": {
"forum": "https://github.com/aws/aws-sdk-php/discussions",
"issues": "https://github.com/aws/aws-sdk-php/issues",
"source": "https://github.com/aws/aws-sdk-php/tree/3.369.31"
"source": "https://github.com/aws/aws-sdk-php/tree/3.369.29"
},
"time": "2026-02-10T19:13:30+00:00"
"time": "2026-02-06T19:08:50+00:00"
},
{
"name": "blade-ui-kit/blade-heroicons",
@@ -375,16 +375,16 @@
},
{
"name": "brick/math",
"version": "0.14.8",
"version": "0.14.7",
"source": {
"type": "git",
"url": "https://github.com/brick/math.git",
"reference": "63422359a44b7f06cae63c3b429b59e8efcc0629"
"reference": "07ff363b16ef8aca9692bba3be9e73fe63f34e50"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/brick/math/zipball/63422359a44b7f06cae63c3b429b59e8efcc0629",
"reference": "63422359a44b7f06cae63c3b429b59e8efcc0629",
"url": "https://api.github.com/repos/brick/math/zipball/07ff363b16ef8aca9692bba3be9e73fe63f34e50",
"reference": "07ff363b16ef8aca9692bba3be9e73fe63f34e50",
"shasum": ""
},
"require": {
@@ -423,7 +423,7 @@
],
"support": {
"issues": "https://github.com/brick/math/issues",
"source": "https://github.com/brick/math/tree/0.14.8"
"source": "https://github.com/brick/math/tree/0.14.7"
},
"funding": [
{
@@ -431,7 +431,7 @@
"type": "github"
}
],
"time": "2026-02-10T14:33:43+00:00"
"time": "2026-02-07T10:57:35+00:00"
},
{
"name": "calebporzio/sushi",
@@ -1323,16 +1323,16 @@
},
{
"name": "filament/actions",
"version": "v4.7.1",
"version": "v4.7.0",
"source": {
"type": "git",
"url": "https://github.com/filamentphp/actions.git",
"reference": "8e51f01af732d50e1d52843011bbdeceb2e0b249"
"reference": "fff2f4db8fa8c4f9142eda762f2db099bd65a44f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/filamentphp/actions/zipball/8e51f01af732d50e1d52843011bbdeceb2e0b249",
"reference": "8e51f01af732d50e1d52843011bbdeceb2e0b249",
"url": "https://api.github.com/repos/filamentphp/actions/zipball/fff2f4db8fa8c4f9142eda762f2db099bd65a44f",
"reference": "fff2f4db8fa8c4f9142eda762f2db099bd65a44f",
"shasum": ""
},
"require": {
@@ -1368,20 +1368,20 @@
"issues": "https://github.com/filamentphp/filament/issues",
"source": "https://github.com/filamentphp/filament"
},
"time": "2026-02-10T13:13:35+00:00"
"time": "2026-02-04T16:09:51+00:00"
},
{
"name": "filament/filament",
"version": "v4.7.1",
"version": "v4.7.0",
"source": {
"type": "git",
"url": "https://github.com/filamentphp/panels.git",
"reference": "ff56a6958f3a14fd34198c68f6fbe98bb567e6ca"
"reference": "b9dcd1dc287d6affea1f678fb9128227486eb4a7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/filamentphp/panels/zipball/ff56a6958f3a14fd34198c68f6fbe98bb567e6ca",
"reference": "ff56a6958f3a14fd34198c68f6fbe98bb567e6ca",
"url": "https://api.github.com/repos/filamentphp/panels/zipball/b9dcd1dc287d6affea1f678fb9128227486eb4a7",
"reference": "b9dcd1dc287d6affea1f678fb9128227486eb4a7",
"shasum": ""
},
"require": {
@@ -1425,20 +1425,20 @@
"issues": "https://github.com/filamentphp/filament/issues",
"source": "https://github.com/filamentphp/filament"
},
"time": "2026-02-10T13:11:29+00:00"
"time": "2026-02-04T16:15:24+00:00"
},
{
"name": "filament/forms",
"version": "v4.7.1",
"version": "v4.7.0",
"source": {
"type": "git",
"url": "https://github.com/filamentphp/forms.git",
"reference": "351b6fbf8abd015cc157aef2463df86c1ccf252a"
"reference": "3839d9c939a5d8583f2e059fc549cdfd55b86d51"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/filamentphp/forms/zipball/351b6fbf8abd015cc157aef2463df86c1ccf252a",
"reference": "351b6fbf8abd015cc157aef2463df86c1ccf252a",
"url": "https://api.github.com/repos/filamentphp/forms/zipball/3839d9c939a5d8583f2e059fc549cdfd55b86d51",
"reference": "3839d9c939a5d8583f2e059fc549cdfd55b86d51",
"shasum": ""
},
"require": {
@@ -1475,20 +1475,20 @@
"issues": "https://github.com/filamentphp/filament/issues",
"source": "https://github.com/filamentphp/filament"
},
"time": "2026-02-10T13:13:01+00:00"
"time": "2026-02-04T16:14:02+00:00"
},
{
"name": "filament/infolists",
"version": "v4.7.1",
"version": "v4.7.0",
"source": {
"type": "git",
"url": "https://github.com/filamentphp/infolists.git",
"reference": "6e0fc7ebc96cafe3bac4df0c1b8a9c1e2b129318"
"reference": "03228d5cf9310598712299d49ac38b75d61d7c1c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/filamentphp/infolists/zipball/6e0fc7ebc96cafe3bac4df0c1b8a9c1e2b129318",
"reference": "6e0fc7ebc96cafe3bac4df0c1b8a9c1e2b129318",
"url": "https://api.github.com/repos/filamentphp/infolists/zipball/03228d5cf9310598712299d49ac38b75d61d7c1c",
"reference": "03228d5cf9310598712299d49ac38b75d61d7c1c",
"shasum": ""
},
"require": {
@@ -1520,11 +1520,11 @@
"issues": "https://github.com/filamentphp/filament/issues",
"source": "https://github.com/filamentphp/filament"
},
"time": "2026-02-10T13:12:24+00:00"
"time": "2026-01-29T21:00:53+00:00"
},
{
"name": "filament/notifications",
"version": "v4.7.1",
"version": "v4.7.0",
"source": {
"type": "git",
"url": "https://github.com/filamentphp/notifications.git",
@@ -1571,7 +1571,7 @@
},
{
"name": "filament/query-builder",
"version": "v4.7.1",
"version": "v4.7.0",
"source": {
"type": "git",
"url": "https://github.com/filamentphp/query-builder.git",
@@ -1617,7 +1617,7 @@
},
{
"name": "filament/schemas",
"version": "v4.7.1",
"version": "v4.7.0",
"source": {
"type": "git",
"url": "https://github.com/filamentphp/schemas.git",
@@ -1662,16 +1662,16 @@
},
{
"name": "filament/support",
"version": "v4.7.1",
"version": "v4.7.0",
"source": {
"type": "git",
"url": "https://github.com/filamentphp/support.git",
"reference": "40eb45db0d6b00229f5731b5ea465baee082fa5d"
"reference": "bed43ce30c778ff8cfbfb69498c34da79fa473b2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/filamentphp/support/zipball/40eb45db0d6b00229f5731b5ea465baee082fa5d",
"reference": "40eb45db0d6b00229f5731b5ea465baee082fa5d",
"url": "https://api.github.com/repos/filamentphp/support/zipball/bed43ce30c778ff8cfbfb69498c34da79fa473b2",
"reference": "bed43ce30c778ff8cfbfb69498c34da79fa473b2",
"shasum": ""
},
"require": {
@@ -1716,20 +1716,20 @@
"issues": "https://github.com/filamentphp/filament/issues",
"source": "https://github.com/filamentphp/filament"
},
"time": "2026-02-10T13:13:39+00:00"
"time": "2026-02-04T16:09:55+00:00"
},
{
"name": "filament/tables",
"version": "v4.7.1",
"version": "v4.7.0",
"source": {
"type": "git",
"url": "https://github.com/filamentphp/tables.git",
"reference": "dae5fe85bd504ea12287d5b9b20ff6976aa1a40a"
"reference": "6c637ffe6b03ccd2f9960a83ac979b9bda9649e3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/filamentphp/tables/zipball/dae5fe85bd504ea12287d5b9b20ff6976aa1a40a",
"reference": "dae5fe85bd504ea12287d5b9b20ff6976aa1a40a",
"url": "https://api.github.com/repos/filamentphp/tables/zipball/6c637ffe6b03ccd2f9960a83ac979b9bda9649e3",
"reference": "6c637ffe6b03ccd2f9960a83ac979b9bda9649e3",
"shasum": ""
},
"require": {
@@ -1762,20 +1762,20 @@
"issues": "https://github.com/filamentphp/filament/issues",
"source": "https://github.com/filamentphp/filament"
},
"time": "2026-02-10T13:12:07+00:00"
"time": "2026-02-04T16:14:21+00:00"
},
{
"name": "filament/widgets",
"version": "v4.7.1",
"version": "v4.7.0",
"source": {
"type": "git",
"url": "https://github.com/filamentphp/widgets.git",
"reference": "bbe126e5e4e7f8073be19d22ec8f8bd298f40529"
"reference": "eaeeffe0ca8b8a3bdc416b03dd216a3e5333986b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/filamentphp/widgets/zipball/bbe126e5e4e7f8073be19d22ec8f8bd298f40529",
"reference": "bbe126e5e4e7f8073be19d22ec8f8bd298f40529",
"url": "https://api.github.com/repos/filamentphp/widgets/zipball/eaeeffe0ca8b8a3bdc416b03dd216a3e5333986b",
"reference": "eaeeffe0ca8b8a3bdc416b03dd216a3e5333986b",
"shasum": ""
},
"require": {
@@ -1806,7 +1806,7 @@
"issues": "https://github.com/filamentphp/filament/issues",
"source": "https://github.com/filamentphp/filament"
},
"time": "2026-02-10T13:13:04+00:00"
"time": "2026-02-04T16:10:11+00:00"
},
{
"name": "firebase/php-jwt",
@@ -2544,16 +2544,16 @@
},
{
"name": "laravel/framework",
"version": "v12.51.0",
"version": "v12.49.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
"reference": "ce4de3feb211e47c4f959d309ccf8a2733b1bc16"
"reference": "4bde4530545111d8bdd1de6f545fa8824039fcb5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/ce4de3feb211e47c4f959d309ccf8a2733b1bc16",
"reference": "ce4de3feb211e47c4f959d309ccf8a2733b1bc16",
"url": "https://api.github.com/repos/laravel/framework/zipball/4bde4530545111d8bdd1de6f545fa8824039fcb5",
"reference": "4bde4530545111d8bdd1de6f545fa8824039fcb5",
"shasum": ""
},
"require": {
@@ -2762,7 +2762,7 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2026-02-10T18:20:19+00:00"
"time": "2026-01-28T03:40:49+00:00"
},
{
"name": "laravel/helpers",
@@ -2823,16 +2823,16 @@
},
{
"name": "laravel/prompts",
"version": "v0.3.13",
"version": "v0.3.12",
"source": {
"type": "git",
"url": "https://github.com/laravel/prompts.git",
"reference": "ed8c466571b37e977532fb2fd3c272c784d7050d"
"reference": "4861ded9003b7f8a158176a0b7666f74ee761be8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/prompts/zipball/ed8c466571b37e977532fb2fd3c272c784d7050d",
"reference": "ed8c466571b37e977532fb2fd3c272c784d7050d",
"url": "https://api.github.com/repos/laravel/prompts/zipball/4861ded9003b7f8a158176a0b7666f74ee761be8",
"reference": "4861ded9003b7f8a158176a0b7666f74ee761be8",
"shasum": ""
},
"require": {
@@ -2876,36 +2876,36 @@
"description": "Add beautiful and user-friendly forms to your command-line applications.",
"support": {
"issues": "https://github.com/laravel/prompts/issues",
"source": "https://github.com/laravel/prompts/tree/v0.3.13"
"source": "https://github.com/laravel/prompts/tree/v0.3.12"
},
"time": "2026-02-06T12:17:10+00:00"
"time": "2026-02-03T06:57:26+00:00"
},
{
"name": "laravel/sanctum",
"version": "v4.3.1",
"version": "v4.3.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/sanctum.git",
"reference": "e3b85d6e36ad00e5db2d1dcc27c81ffdf15cbf76"
"reference": "c978c82b2b8ab685468a7ca35224497d541b775a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/sanctum/zipball/e3b85d6e36ad00e5db2d1dcc27c81ffdf15cbf76",
"reference": "e3b85d6e36ad00e5db2d1dcc27c81ffdf15cbf76",
"url": "https://api.github.com/repos/laravel/sanctum/zipball/c978c82b2b8ab685468a7ca35224497d541b775a",
"reference": "c978c82b2b8ab685468a7ca35224497d541b775a",
"shasum": ""
},
"require": {
"ext-json": "*",
"illuminate/console": "^11.0|^12.0|^13.0",
"illuminate/contracts": "^11.0|^12.0|^13.0",
"illuminate/database": "^11.0|^12.0|^13.0",
"illuminate/support": "^11.0|^12.0|^13.0",
"illuminate/console": "^11.0|^12.0",
"illuminate/contracts": "^11.0|^12.0",
"illuminate/database": "^11.0|^12.0",
"illuminate/support": "^11.0|^12.0",
"php": "^8.2",
"symfony/console": "^7.0|^8.0"
"symfony/console": "^7.0"
},
"require-dev": {
"mockery/mockery": "^1.6",
"orchestra/testbench": "^9.15|^10.8|^11.0",
"orchestra/testbench": "^9.15|^10.8",
"phpstan/phpstan": "^1.10"
},
"type": "library",
@@ -2941,7 +2941,7 @@
"issues": "https://github.com/laravel/sanctum/issues",
"source": "https://github.com/laravel/sanctum"
},
"time": "2026-02-07T17:19:31+00:00"
"time": "2026-01-22T22:27:01+00:00"
},
{
"name": "laravel/serializable-closure",
@@ -3078,16 +3078,16 @@
},
{
"name": "laravel/tinker",
"version": "v2.11.1",
"version": "v2.11.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/tinker.git",
"reference": "c9f80cc835649b5c1842898fb043f8cc098dd741"
"reference": "3d34b97c9a1747a81a3fde90482c092bd8b66468"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/tinker/zipball/c9f80cc835649b5c1842898fb043f8cc098dd741",
"reference": "c9f80cc835649b5c1842898fb043f8cc098dd741",
"url": "https://api.github.com/repos/laravel/tinker/zipball/3d34b97c9a1747a81a3fde90482c092bd8b66468",
"reference": "3d34b97c9a1747a81a3fde90482c092bd8b66468",
"shasum": ""
},
"require": {
@@ -3138,9 +3138,9 @@
],
"support": {
"issues": "https://github.com/laravel/tinker/issues",
"source": "https://github.com/laravel/tinker/tree/v2.11.1"
"source": "https://github.com/laravel/tinker/tree/v2.11.0"
},
"time": "2026-02-06T14:12:35+00:00"
"time": "2025-12-19T19:16:45+00:00"
},
{
"name": "laravel/ui",
@@ -4263,16 +4263,16 @@
},
{
"name": "livewire/livewire",
"version": "v3.7.10",
"version": "v3.7.9",
"source": {
"type": "git",
"url": "https://github.com/livewire/livewire.git",
"reference": "0dc679eb4c8b4470cb12522b5927ef08ca2358bb"
"reference": "112b27e41e87e89d828a96e37b257aff2a058c7a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/livewire/livewire/zipball/0dc679eb4c8b4470cb12522b5927ef08ca2358bb",
"reference": "0dc679eb4c8b4470cb12522b5927ef08ca2358bb",
"url": "https://api.github.com/repos/livewire/livewire/zipball/112b27e41e87e89d828a96e37b257aff2a058c7a",
"reference": "112b27e41e87e89d828a96e37b257aff2a058c7a",
"shasum": ""
},
"require": {
@@ -4327,7 +4327,7 @@
"description": "A front-end framework for Laravel.",
"support": {
"issues": "https://github.com/livewire/livewire/issues",
"source": "https://github.com/livewire/livewire/tree/v3.7.10"
"source": "https://github.com/livewire/livewire/tree/v3.7.9"
},
"funding": [
{
@@ -4335,7 +4335,7 @@
"type": "github"
}
],
"time": "2026-02-09T22:49:33+00:00"
"time": "2026-02-05T23:27:27+00:00"
},
{
"name": "masterminds/html5",
@@ -4740,16 +4740,16 @@
},
{
"name": "nette/php-generator",
"version": "v4.2.1",
"version": "v4.2.0",
"source": {
"type": "git",
"url": "https://github.com/nette/php-generator.git",
"reference": "52aff4d9b12f20ca9f3e31a559b646d2fd21dd61"
"reference": "4707546a1f11badd72f5d82af4f8a6bc64bd56ac"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nette/php-generator/zipball/52aff4d9b12f20ca9f3e31a559b646d2fd21dd61",
"reference": "52aff4d9b12f20ca9f3e31a559b646d2fd21dd61",
"url": "https://api.github.com/repos/nette/php-generator/zipball/4707546a1f11badd72f5d82af4f8a6bc64bd56ac",
"reference": "4707546a1f11badd72f5d82af4f8a6bc64bd56ac",
"shasum": ""
},
"require": {
@@ -4758,9 +4758,9 @@
},
"require-dev": {
"jetbrains/phpstorm-attributes": "^1.2",
"nette/tester": "^2.6",
"nette/tester": "^2.4",
"nikic/php-parser": "^5.0",
"phpstan/phpstan": "^2.0@stable",
"phpstan/phpstan-nette": "^2.0@stable",
"tracy/tracy": "^2.8"
},
"suggest": {
@@ -4806,22 +4806,22 @@
],
"support": {
"issues": "https://github.com/nette/php-generator/issues",
"source": "https://github.com/nette/php-generator/tree/v4.2.1"
"source": "https://github.com/nette/php-generator/tree/v4.2.0"
},
"time": "2026-02-09T05:43:31+00:00"
"time": "2025-08-06T18:24:31+00:00"
},
{
"name": "nette/schema",
"version": "v1.3.4",
"version": "v1.3.3",
"source": {
"type": "git",
"url": "https://github.com/nette/schema.git",
"reference": "086497a2f34b82fede9b5a41cc8e131d087cd8f7"
"reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nette/schema/zipball/086497a2f34b82fede9b5a41cc8e131d087cd8f7",
"reference": "086497a2f34b82fede9b5a41cc8e131d087cd8f7",
"url": "https://api.github.com/repos/nette/schema/zipball/2befc2f42d7c715fd9d95efc31b1081e5d765004",
"reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004",
"shasum": ""
},
"require": {
@@ -4829,8 +4829,8 @@
"php": "8.1 - 8.5"
},
"require-dev": {
"nette/tester": "^2.6",
"phpstan/phpstan": "^2.0@stable",
"nette/tester": "^2.5.2",
"phpstan/phpstan-nette": "^2.0@stable",
"tracy/tracy": "^2.8"
},
"type": "library",
@@ -4871,9 +4871,9 @@
],
"support": {
"issues": "https://github.com/nette/schema/issues",
"source": "https://github.com/nette/schema/tree/v1.3.4"
"source": "https://github.com/nette/schema/tree/v1.3.3"
},
"time": "2026-02-08T02:54:00+00:00"
"time": "2025-10-30T22:57:59+00:00"
},
{
"name": "nette/utils",
@@ -7657,16 +7657,16 @@
},
{
"name": "spatie/laravel-health",
"version": "1.36.0",
"version": "1.35.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-health.git",
"reference": "e2a84e886cb38ab0a53f136e4554c64e0480e634"
"reference": "40c1b0688a8fa4a4fde13f883982e6b3a9d00a8c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/spatie/laravel-health/zipball/e2a84e886cb38ab0a53f136e4554c64e0480e634",
"reference": "e2a84e886cb38ab0a53f136e4554c64e0480e634",
"url": "https://api.github.com/repos/spatie/laravel-health/zipball/40c1b0688a8fa4a4fde13f883982e6b3a9d00a8c",
"reference": "40c1b0688a8fa4a4fde13f883982e6b3a9d00a8c",
"shasum": ""
},
"require": {
@@ -7698,7 +7698,7 @@
"phpstan/phpstan-phpunit": "^1.1.1",
"phpunit/phpunit": "^9.5.21|^9.5.10|^10.5|^11.0|^12.0",
"spatie/laravel-ray": "^1.30",
"spatie/pest-plugin-snapshots": "^1.1|^2.3|^3.0",
"spatie/pest-plugin-snapshots": "^1.1|^2.1|^3.0",
"spatie/pest-plugin-test-time": "^1.1.1|^1.1|^2.0|^3.0",
"spatie/test-time": "^1.3|^2.0"
},
@@ -7738,7 +7738,7 @@
"spatie"
],
"support": {
"source": "https://github.com/spatie/laravel-health/tree/1.36.0"
"source": "https://github.com/spatie/laravel-health/tree/1.35.0"
},
"funding": [
{
@@ -7746,7 +7746,7 @@
"type": "github"
}
],
"time": "2026-02-09T15:38:27+00:00"
"time": "2026-02-01T08:13:12+00:00"
},
{
"name": "spatie/laravel-package-tools",
@@ -7811,16 +7811,16 @@
},
{
"name": "spatie/laravel-permission",
"version": "6.24.1",
"version": "6.24.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-permission.git",
"reference": "eefc9d17eba80d023d6bff313f882cb2bcd691a3"
"reference": "76adb1fc8d07c16a0721c35c4cc330b7a12598d7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/spatie/laravel-permission/zipball/eefc9d17eba80d023d6bff313f882cb2bcd691a3",
"reference": "eefc9d17eba80d023d6bff313f882cb2bcd691a3",
"url": "https://api.github.com/repos/spatie/laravel-permission/zipball/76adb1fc8d07c16a0721c35c4cc330b7a12598d7",
"reference": "76adb1fc8d07c16a0721c35c4cc330b7a12598d7",
"shasum": ""
},
"require": {
@@ -7882,7 +7882,7 @@
],
"support": {
"issues": "https://github.com/spatie/laravel-permission/issues",
"source": "https://github.com/spatie/laravel-permission/tree/6.24.1"
"source": "https://github.com/spatie/laravel-permission/tree/6.24.0"
},
"funding": [
{
@@ -7890,7 +7890,7 @@
"type": "github"
}
],
"time": "2026-02-09T21:10:03+00:00"
"time": "2025-12-13T21:45:21+00:00"
},
{
"name": "spatie/laravel-query-builder",
@@ -12451,16 +12451,16 @@
},
{
"name": "laravel/pail",
"version": "v1.2.6",
"version": "v1.2.5",
"source": {
"type": "git",
"url": "https://github.com/laravel/pail.git",
"reference": "aa71a01c309e7f66bc2ec4fb1a59291b82eb4abf"
"reference": "fdb73f5eacf03db576c710d5a00101ba185f2254"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/pail/zipball/aa71a01c309e7f66bc2ec4fb1a59291b82eb4abf",
"reference": "aa71a01c309e7f66bc2ec4fb1a59291b82eb4abf",
"url": "https://api.github.com/repos/laravel/pail/zipball/fdb73f5eacf03db576c710d5a00101ba185f2254",
"reference": "fdb73f5eacf03db576c710d5a00101ba185f2254",
"shasum": ""
},
"require": {
@@ -12527,20 +12527,20 @@
"issues": "https://github.com/laravel/pail/issues",
"source": "https://github.com/laravel/pail"
},
"time": "2026-02-09T13:44:54+00:00"
"time": "2026-02-04T15:10:32+00:00"
},
{
"name": "laravel/pint",
"version": "v1.27.1",
"version": "v1.27.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/pint.git",
"reference": "54cca2de13790570c7b6f0f94f37896bee4abcb5"
"reference": "c67b4195b75491e4dfc6b00b1c78b68d86f54c90"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/pint/zipball/54cca2de13790570c7b6f0f94f37896bee4abcb5",
"reference": "54cca2de13790570c7b6f0f94f37896bee4abcb5",
"url": "https://api.github.com/repos/laravel/pint/zipball/c67b4195b75491e4dfc6b00b1c78b68d86f54c90",
"reference": "c67b4195b75491e4dfc6b00b1c78b68d86f54c90",
"shasum": ""
},
"require": {
@@ -12551,13 +12551,13 @@
"php": "^8.2.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.93.1",
"illuminate/view": "^12.51.0",
"larastan/larastan": "^3.9.2",
"laravel-zero/framework": "^12.0.5",
"friendsofphp/php-cs-fixer": "^3.92.4",
"illuminate/view": "^12.44.0",
"larastan/larastan": "^3.8.1",
"laravel-zero/framework": "^12.0.4",
"mockery/mockery": "^1.6.12",
"nunomaduro/termwind": "^2.3.3",
"pestphp/pest": "^3.8.5"
"pestphp/pest": "^3.8.4"
},
"bin": [
"builds/pint"
@@ -12594,32 +12594,32 @@
"issues": "https://github.com/laravel/pint/issues",
"source": "https://github.com/laravel/pint"
},
"time": "2026-02-10T20:00:20+00:00"
"time": "2026-01-05T16:49:17+00:00"
},
{
"name": "laravel/sail",
"version": "v1.53.0",
"version": "v1.52.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/sail.git",
"reference": "e340eaa2bea9b99192570c48ed837155dbf24fbb"
"reference": "64ac7d8abb2dbcf2b76e61289451bae79066b0b3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/sail/zipball/e340eaa2bea9b99192570c48ed837155dbf24fbb",
"reference": "e340eaa2bea9b99192570c48ed837155dbf24fbb",
"url": "https://api.github.com/repos/laravel/sail/zipball/64ac7d8abb2dbcf2b76e61289451bae79066b0b3",
"reference": "64ac7d8abb2dbcf2b76e61289451bae79066b0b3",
"shasum": ""
},
"require": {
"illuminate/console": "^9.52.16|^10.0|^11.0|^12.0|^13.0",
"illuminate/contracts": "^9.52.16|^10.0|^11.0|^12.0|^13.0",
"illuminate/support": "^9.52.16|^10.0|^11.0|^12.0|^13.0",
"illuminate/console": "^9.52.16|^10.0|^11.0|^12.0",
"illuminate/contracts": "^9.52.16|^10.0|^11.0|^12.0",
"illuminate/support": "^9.52.16|^10.0|^11.0|^12.0",
"php": "^8.0",
"symfony/console": "^6.0|^7.0|^8.0",
"symfony/yaml": "^6.0|^7.0|^8.0"
"symfony/console": "^6.0|^7.0",
"symfony/yaml": "^6.0|^7.0"
},
"require-dev": {
"orchestra/testbench": "^7.0|^8.0|^9.0|^10.0|^11.0",
"orchestra/testbench": "^7.0|^8.0|^9.0|^10.0",
"phpstan/phpstan": "^2.0"
},
"bin": [
@@ -12657,7 +12657,7 @@
"issues": "https://github.com/laravel/sail/issues",
"source": "https://github.com/laravel/sail"
},
"time": "2026-02-06T12:16:02+00:00"
"time": "2026-01-01T02:46:03+00:00"
},
{
"name": "mockery/mockery",

View File

@@ -39,7 +39,6 @@ return [
'ip_help' => 'Usually your machine\'s public IP unless you are port forwarding.',
'alias_help' => 'Optional display name to help you remember what these are.',
'refresh' => 'Refresh',
'custom_ip' => 'Enter Custom IP',
'domain' => 'Domain Name',
'ssl_ip' => 'You cannot connect to an IP Address over SSL',
'error' => 'This is the domain name that points to your node\'s IP Address. If you\'ve already set up this, you can verify it by checking the next field!',

View File

@@ -1,4 +1,18 @@
<x-filament-panels::page>
@once
<style>
.fi-ta-header-ctn {
position: sticky;
top: 0;
z-index: 1;
border-top-left-radius: 15px;
border-top-right-radius: 15px;
-webkit-backdrop-filter: blur(8px);
backdrop-filter: blur(8px);
}
</style>
@endonce
<div
x-data="
{