diff --git a/composer.lock b/composer.lock index 534fb2fdffb..e82aefebc43 100644 --- a/composer.lock +++ b/composer.lock @@ -129,16 +129,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.336.0", + "version": "3.336.6", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "5a62003bf183e32da038056a4b9077c27224e034" + "reference": "0a99dab427f0a1c082775301141aeac3558691ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/5a62003bf183e32da038056a4b9077c27224e034", - "reference": "5a62003bf183e32da038056a4b9077c27224e034", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/0a99dab427f0a1c082775301141aeac3558691ad", + "reference": "0a99dab427f0a1c082775301141aeac3558691ad", "shasum": "" }, "require": { @@ -221,9 +221,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.336.0" + "source": "https://github.com/aws/aws-sdk-php/tree/3.336.6" }, - "time": "2024-12-18T19:04:32+00:00" + "time": "2024-12-28T04:16:13+00:00" }, { "name": "blade-ui-kit/blade-heroicons", @@ -1246,16 +1246,16 @@ }, { "name": "egulias/email-validator", - "version": "4.0.2", + "version": "4.0.3", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e" + "reference": "b115554301161fa21467629f1e1391c1936de517" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ebaaf5be6c0286928352e054f2d5125608e5405e", - "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/b115554301161fa21467629f1e1391c1936de517", + "reference": "b115554301161fa21467629f1e1391c1936de517", "shasum": "" }, "require": { @@ -1301,7 +1301,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/4.0.2" + "source": "https://github.com/egulias/EmailValidator/tree/4.0.3" }, "funding": [ { @@ -1309,7 +1309,7 @@ "type": "github" } ], - "time": "2023-10-06T06:47:41+00:00" + "time": "2024-12-27T00:36:43+00:00" }, { "name": "fakerphp/faker", @@ -1441,7 +1441,7 @@ "dist": { "type": "path", "url": "packages/support", - "reference": "062b61f90a7cf253eb29e904ecf47da611c0383e" + "reference": "aeee9e896b390fa0a9298bd12ef24656f444b530" }, "require": { "blade-ui-kit/blade-heroicons": "^2.5", @@ -1450,6 +1450,7 @@ "illuminate/support": "^10.45|^11.0", "illuminate/view": "^10.45|^11.0", "kirschbaum-development/eloquent-power-joins": "^3.0|^4.0", + "league/uri-components": "^7.0", "livewire/livewire": "^3.5", "nette/php-generator": "^4.0", "php": "^8.1", @@ -3533,6 +3534,88 @@ ], "time": "2024-12-08T08:40:02+00:00" }, + { + "name": "league/uri-components", + "version": "7.5.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-components.git", + "reference": "4aabf0e2f2f9421ffcacab35be33e4fb5e63c44f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-components/zipball/4aabf0e2f2f9421ffcacab35be33e4fb5e63c44f", + "reference": "4aabf0e2f2f9421ffcacab35be33e4fb5e63c44f", + "shasum": "" + }, + "require": { + "league/uri": "^7.5", + "php": "^8.1" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-fileinfo": "to create Data URI from file contennts", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "ext-mbstring": "to use the sorting algorithm of URLSearchParams", + "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", + "php-64bit": "to improve IPV4 host parsing", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "URI components manipulation library", + "homepage": "http://uri.thephpleague.com", + "keywords": [ + "authority", + "components", + "fragment", + "host", + "middleware", + "modifier", + "path", + "port", + "query", + "rfc3986", + "scheme", + "uri", + "url", + "userinfo" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri-components/tree/7.5.1" + }, + "funding": [ + { + "url": "https://github.com/nyamsprod", + "type": "github" + } + ], + "time": "2024-12-08T08:40:02+00:00" + }, { "name": "league/uri-interfaces", "version": "7.5.0", @@ -3619,16 +3702,16 @@ }, { "name": "livewire/livewire", - "version": "v3.5.17", + "version": "v3.5.18", "source": { "type": "git", "url": "https://github.com/livewire/livewire.git", - "reference": "7bbf80d93db9b866776bf957ca6229364bca8d87" + "reference": "62f0fa6b340a467c25baa590a567d9a134b357da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/livewire/livewire/zipball/7bbf80d93db9b866776bf957ca6229364bca8d87", - "reference": "7bbf80d93db9b866776bf957ca6229364bca8d87", + "url": "https://api.github.com/repos/livewire/livewire/zipball/62f0fa6b340a467c25baa590a567d9a134b357da", + "reference": "62f0fa6b340a467c25baa590a567d9a134b357da", "shasum": "" }, "require": { @@ -3683,7 +3766,7 @@ "description": "A front-end framework for Laravel.", "support": { "issues": "https://github.com/livewire/livewire/issues", - "source": "https://github.com/livewire/livewire/tree/v3.5.17" + "source": "https://github.com/livewire/livewire/tree/v3.5.18" }, "funding": [ { @@ -3691,7 +3774,7 @@ "type": "github" } ], - "time": "2024-12-06T13:41:21+00:00" + "time": "2024-12-23T15:05:02+00:00" }, { "name": "maennchen/zipstream-php", @@ -4151,16 +4234,16 @@ }, { "name": "nesbot/carbon", - "version": "3.8.2", + "version": "3.8.4", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "e1268cdbc486d97ce23fef2c666dc3c6b6de9947" + "reference": "129700ed449b1f02d70272d2ac802357c8c30c58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/e1268cdbc486d97ce23fef2c666dc3c6b6de9947", - "reference": "e1268cdbc486d97ce23fef2c666dc3c6b6de9947", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/129700ed449b1f02d70272d2ac802357c8c30c58", + "reference": "129700ed449b1f02d70272d2ac802357c8c30c58", "shasum": "" }, "require": { @@ -4192,10 +4275,6 @@ ], "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.x-dev", - "dev-2.x": "2.x-dev" - }, "laravel": { "providers": [ "Carbon\\Laravel\\ServiceProvider" @@ -4205,6 +4284,10 @@ "includes": [ "extension.neon" ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-master": "3.x-dev" } }, "autoload": { @@ -4253,7 +4336,7 @@ "type": "tidelift" } ], - "time": "2024-11-07T17:46:48+00:00" + "time": "2024-12-27T09:25:35+00:00" }, { "name": "nette/php-generator", @@ -4949,16 +5032,16 @@ }, { "name": "orchestra/testbench", - "version": "v9.8.0", + "version": "v9.9.0", "source": { "type": "git", "url": "https://github.com/orchestral/testbench.git", - "reference": "88e90042d7428c646ece8acf4a69e7621369f14d" + "reference": "2f3e8c687ca5c0bd4d8bc91c4448983d046ba32b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench/zipball/88e90042d7428c646ece8acf4a69e7621369f14d", - "reference": "88e90042d7428c646ece8acf4a69e7621369f14d", + "url": "https://api.github.com/repos/orchestral/testbench/zipball/2f3e8c687ca5c0bd4d8bc91c4448983d046ba32b", + "reference": "2f3e8c687ca5c0bd4d8bc91c4448983d046ba32b", "shasum": "" }, "require": { @@ -4966,8 +5049,8 @@ "fakerphp/faker": "^1.23", "laravel/framework": "^11.35.0", "mockery/mockery": "^1.6.10", - "orchestra/testbench-core": "^9.8", - "orchestra/workbench": "^9.11", + "orchestra/testbench-core": "^9.9.0", + "orchestra/workbench": "^9.13.0", "php": "^8.2", "phpunit/phpunit": "^10.5.35 || ^11.3.6", "symfony/process": "^7.0.3", @@ -4998,22 +5081,22 @@ ], "support": { "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench/tree/v9.8.0" + "source": "https://github.com/orchestral/testbench/tree/v9.9.0" }, - "time": "2024-12-16T00:12:23+00:00" + "time": "2024-12-25T23:40:19+00:00" }, { "name": "orchestra/testbench-core", - "version": "v9.8.2", + "version": "v9.9.0", "source": { "type": "git", "url": "https://github.com/orchestral/testbench-core.git", - "reference": "d4889bfe8e7dc95212dfd8b7f9a5e471fe397136" + "reference": "b605631fa3c779e51bc45d78013a979ddeb0d9fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/d4889bfe8e7dc95212dfd8b7f9a5e471fe397136", - "reference": "d4889bfe8e7dc95212dfd8b7f9a5e471fe397136", + "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/b605631fa3c779e51bc45d78013a979ddeb0d9fe", + "reference": "b605631fa3c779e51bc45d78013a979ddeb0d9fe", "shasum": "" }, "require": { @@ -5093,20 +5176,20 @@ "issues": "https://github.com/orchestral/testbench/issues", "source": "https://github.com/orchestral/testbench-core" }, - "time": "2024-12-19T00:12:23+00:00" + "time": "2024-12-24T01:10:06+00:00" }, { "name": "orchestra/workbench", - "version": "v9.11.2", + "version": "v9.13.0", "source": { "type": "git", "url": "https://github.com/orchestral/workbench.git", - "reference": "0394a8a41dcaec5c7da6281c93db87b97d791552" + "reference": "9c9a42060735bfb49b1298c39dba392f936de372" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/workbench/zipball/0394a8a41dcaec5c7da6281c93db87b97d791552", - "reference": "0394a8a41dcaec5c7da6281c93db87b97d791552", + "url": "https://api.github.com/repos/orchestral/workbench/zipball/9c9a42060735bfb49b1298c39dba392f936de372", + "reference": "9c9a42060735bfb49b1298c39dba392f936de372", "shasum": "" }, "require": { @@ -5117,7 +5200,7 @@ "laravel/tinker": "^2.9", "nunomaduro/collision": "^8.0", "orchestra/canvas": "^9.1", - "orchestra/testbench-core": "^9.8.2", + "orchestra/testbench-core": "^9.9.0", "php": "^8.2", "symfony/polyfill-php83": "^1.31", "symfony/polyfill-php84": "^1.31", @@ -5159,9 +5242,9 @@ ], "support": { "issues": "https://github.com/orchestral/workbench/issues", - "source": "https://github.com/orchestral/workbench/tree/v9.11.2" + "source": "https://github.com/orchestral/workbench/tree/v9.13.0" }, - "time": "2024-12-19T00:55:41+00:00" + "time": "2024-12-24T11:40:02+00:00" }, { "name": "paragonie/constant_time_encoding", @@ -8590,16 +8673,16 @@ }, { "name": "spatie/color", - "version": "1.6.2", + "version": "1.6.3", "source": { "type": "git", "url": "https://github.com/spatie/color.git", - "reference": "b4fac074a9e5999dcca12cbfab0f7c73e2684d6d" + "reference": "45c4354ffa7e65f05c502b009834ecac7928daa3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/color/zipball/b4fac074a9e5999dcca12cbfab0f7c73e2684d6d", - "reference": "b4fac074a9e5999dcca12cbfab0f7c73e2684d6d", + "url": "https://api.github.com/repos/spatie/color/zipball/45c4354ffa7e65f05c502b009834ecac7928daa3", + "reference": "45c4354ffa7e65f05c502b009834ecac7928daa3", "shasum": "" }, "require": { @@ -8637,7 +8720,7 @@ ], "support": { "issues": "https://github.com/spatie/color/issues", - "source": "https://github.com/spatie/color/tree/1.6.2" + "source": "https://github.com/spatie/color/tree/1.6.3" }, "funding": [ { @@ -8645,20 +8728,20 @@ "type": "github" } ], - "time": "2024-12-09T16:20:38+00:00" + "time": "2024-12-23T11:00:34+00:00" }, { "name": "spatie/eloquent-sortable", - "version": "4.4.0", + "version": "4.4.1", "source": { "type": "git", "url": "https://github.com/spatie/eloquent-sortable.git", - "reference": "7a460c775d29741f42744bac52f993cb5b84be0f" + "reference": "2448c25a2c4b588bc0e0b9820f8bbd110a2afd73" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/eloquent-sortable/zipball/7a460c775d29741f42744bac52f993cb5b84be0f", - "reference": "7a460c775d29741f42744bac52f993cb5b84be0f", + "url": "https://api.github.com/repos/spatie/eloquent-sortable/zipball/2448c25a2c4b588bc0e0b9820f8bbd110a2afd73", + "reference": "2448c25a2c4b588bc0e0b9820f8bbd110a2afd73", "shasum": "" }, "require": { @@ -8707,7 +8790,7 @@ ], "support": { "issues": "https://github.com/spatie/eloquent-sortable/issues", - "source": "https://github.com/spatie/eloquent-sortable/tree/4.4.0" + "source": "https://github.com/spatie/eloquent-sortable/tree/4.4.1" }, "funding": [ { @@ -8719,7 +8802,7 @@ "type": "github" } ], - "time": "2024-06-04T11:09:54+00:00" + "time": "2024-12-23T09:54:53+00:00" }, { "name": "spatie/image", @@ -10025,12 +10108,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -10248,12 +10331,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -11751,12 +11834,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -12073,12 +12156,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -12518,31 +12601,33 @@ }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "v2.2.7", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb" + "reference": "0d72ac1c00084279c1816675284073c5a337c20d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/83ee6f38df0a63106a9e4536e3060458b74ccedb", - "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0d72ac1c00084279c1816675284073c5a337c20d", + "reference": "0d72ac1c00084279c1816675284073c5a337c20d", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", - "php": "^5.5 || ^7.0 || ^8.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" + "php": "^7.4 || ^8.0", + "symfony/css-selector": "^5.4 || ^6.0 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^8.5.21 || ^9.5.10" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -12565,9 +12650,9 @@ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", "support": { "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.2.7" + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.3.0" }, - "time": "2023-12-08T13:03:43+00:00" + "time": "2024-12-21T16:25:41+00:00" }, { "name": "vlucas/phpdotenv", diff --git a/packages/actions/src/Imports/ImportColumn.php b/packages/actions/src/Imports/ImportColumn.php index a493f2425ee..578b23e5abb 100644 --- a/packages/actions/src/Imports/ImportColumn.php +++ b/packages/actions/src/Imports/ImportColumn.php @@ -118,7 +118,7 @@ public function getSelect(): Select ->label($this->getLabel()) ->placeholder(__('filament-actions::import.modal.form.columns.placeholder')) ->required($this->isMappingRequired()) - ->helperText($this->helperText); + ->belowContent($this->helperText); } public function name(string $name): static diff --git a/packages/forms/resources/lang/pl/validation.php b/packages/forms/resources/lang/pl/validation.php index 4e06b46dbc6..2b4a6b503d8 100644 --- a/packages/forms/resources/lang/pl/validation.php +++ b/packages/forms/resources/lang/pl/validation.php @@ -4,7 +4,7 @@ 'distinct' => [ 'must_be_selected' => 'Przynajmniej jedno pole :attribute musi być zaznaczone.', - 'only_one_must_be_selected' => 'Tylko jedno pole :attribute musi być zaznaczone.' + 'only_one_must_be_selected' => 'Tylko jedno pole :attribute musi być zaznaczone.', ], ]; diff --git a/packages/panels/docs/07-users.md b/packages/panels/docs/07-users.md index ca9366fa376..0873a63853b 100644 --- a/packages/panels/docs/07-users.md +++ b/packages/panels/docs/07-users.md @@ -203,9 +203,9 @@ In this example, we will customize the profile page. We need to create a new PHP namespace App\Filament\Pages\Auth; -use Filament\Forms\Components\TextInput; -use Filament\Pages\Auth\EditProfile as BaseEditProfile; -use Filament\Schemas\Schema; +use Filament\Auth\Pages\EditProfile as BaseEditProfile; +use Filament\Forms\Components\TextInput +;use Filament\Schemas\Schema; class EditProfile extends BaseEditProfile { diff --git a/packages/panels/resources/lang/am/pages/auth/edit-profile.php b/packages/panels/resources/lang/am/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/am/pages/auth/edit-profile.php rename to packages/panels/resources/lang/am/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/am/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/am/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/am/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/am/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/am/pages/auth/login.php b/packages/panels/resources/lang/am/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/am/pages/auth/login.php rename to packages/panels/resources/lang/am/auth/pages/login.php diff --git a/packages/panels/resources/lang/am/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/am/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/am/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/am/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/am/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/am/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/am/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/am/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/am/pages/auth/register.php b/packages/panels/resources/lang/am/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/am/pages/auth/register.php rename to packages/panels/resources/lang/am/auth/pages/register.php diff --git a/packages/panels/resources/lang/ar/pages/auth/edit-profile.php b/packages/panels/resources/lang/ar/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/ar/pages/auth/edit-profile.php rename to packages/panels/resources/lang/ar/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/ar/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/ar/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/ar/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/ar/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/ar/pages/auth/login.php b/packages/panels/resources/lang/ar/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/ar/pages/auth/login.php rename to packages/panels/resources/lang/ar/auth/pages/login.php diff --git a/packages/panels/resources/lang/ar/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/ar/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/ar/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/ar/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/ar/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/ar/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/ar/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/ar/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/ar/pages/auth/register.php b/packages/panels/resources/lang/ar/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/ar/pages/auth/register.php rename to packages/panels/resources/lang/ar/auth/pages/register.php diff --git a/packages/panels/resources/lang/az/pages/auth/edit-profile.php b/packages/panels/resources/lang/az/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/az/pages/auth/edit-profile.php rename to packages/panels/resources/lang/az/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/az/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/az/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/az/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/az/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/az/pages/auth/login.php b/packages/panels/resources/lang/az/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/az/pages/auth/login.php rename to packages/panels/resources/lang/az/auth/pages/login.php diff --git a/packages/panels/resources/lang/az/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/az/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/az/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/az/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/az/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/az/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/az/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/az/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/az/pages/auth/register.php b/packages/panels/resources/lang/az/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/az/pages/auth/register.php rename to packages/panels/resources/lang/az/auth/pages/register.php diff --git a/packages/panels/resources/lang/bg/pages/auth/edit-profile.php b/packages/panels/resources/lang/bg/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/bg/pages/auth/edit-profile.php rename to packages/panels/resources/lang/bg/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/bg/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/bg/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/bg/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/bg/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/bg/pages/auth/login.php b/packages/panels/resources/lang/bg/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/bg/pages/auth/login.php rename to packages/panels/resources/lang/bg/auth/pages/login.php diff --git a/packages/panels/resources/lang/bg/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/bg/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/bg/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/bg/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/bg/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/bg/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/bg/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/bg/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/bg/pages/auth/register.php b/packages/panels/resources/lang/bg/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/bg/pages/auth/register.php rename to packages/panels/resources/lang/bg/auth/pages/register.php diff --git a/packages/panels/resources/lang/bn/pages/auth/login.php b/packages/panels/resources/lang/bn/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/bn/pages/auth/login.php rename to packages/panels/resources/lang/bn/auth/pages/login.php diff --git a/packages/panels/resources/lang/bs/pages/auth/login.php b/packages/panels/resources/lang/bs/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/bs/pages/auth/login.php rename to packages/panels/resources/lang/bs/auth/pages/login.php diff --git a/packages/panels/resources/lang/ca/pages/auth/edit-profile.php b/packages/panels/resources/lang/ca/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/ca/pages/auth/edit-profile.php rename to packages/panels/resources/lang/ca/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/ca/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/ca/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/ca/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/ca/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/ca/pages/auth/login.php b/packages/panels/resources/lang/ca/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/ca/pages/auth/login.php rename to packages/panels/resources/lang/ca/auth/pages/login.php diff --git a/packages/panels/resources/lang/ca/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/ca/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/ca/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/ca/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/ca/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/ca/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/ca/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/ca/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/ca/pages/auth/register.php b/packages/panels/resources/lang/ca/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/ca/pages/auth/register.php rename to packages/panels/resources/lang/ca/auth/pages/register.php diff --git a/packages/panels/resources/lang/ckb/pages/auth/edit-profile.php b/packages/panels/resources/lang/ckb/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/ckb/pages/auth/edit-profile.php rename to packages/panels/resources/lang/ckb/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/ckb/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/ckb/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/ckb/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/ckb/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/ckb/pages/auth/login.php b/packages/panels/resources/lang/ckb/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/ckb/pages/auth/login.php rename to packages/panels/resources/lang/ckb/auth/pages/login.php diff --git a/packages/panels/resources/lang/ckb/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/ckb/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/ckb/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/ckb/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/ckb/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/ckb/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/ckb/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/ckb/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/ckb/pages/auth/register.php b/packages/panels/resources/lang/ckb/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/ckb/pages/auth/register.php rename to packages/panels/resources/lang/ckb/auth/pages/register.php diff --git a/packages/panels/resources/lang/cs/pages/auth/edit-profile.php b/packages/panels/resources/lang/cs/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/cs/pages/auth/edit-profile.php rename to packages/panels/resources/lang/cs/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/cs/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/cs/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/cs/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/cs/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/cs/pages/auth/login.php b/packages/panels/resources/lang/cs/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/cs/pages/auth/login.php rename to packages/panels/resources/lang/cs/auth/pages/login.php diff --git a/packages/panels/resources/lang/cs/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/cs/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/cs/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/cs/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/cs/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/cs/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/cs/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/cs/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/cs/pages/auth/register.php b/packages/panels/resources/lang/cs/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/cs/pages/auth/register.php rename to packages/panels/resources/lang/cs/auth/pages/register.php diff --git a/packages/panels/resources/lang/da/pages/auth/edit-profile.php b/packages/panels/resources/lang/da/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/da/pages/auth/edit-profile.php rename to packages/panels/resources/lang/da/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/da/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/da/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/da/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/da/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/da/pages/auth/login.php b/packages/panels/resources/lang/da/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/da/pages/auth/login.php rename to packages/panels/resources/lang/da/auth/pages/login.php diff --git a/packages/panels/resources/lang/da/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/da/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/da/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/da/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/da/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/da/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/da/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/da/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/da/pages/auth/register.php b/packages/panels/resources/lang/da/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/da/pages/auth/register.php rename to packages/panels/resources/lang/da/auth/pages/register.php diff --git a/packages/panels/resources/lang/de/pages/auth/edit-profile.php b/packages/panels/resources/lang/de/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/de/pages/auth/edit-profile.php rename to packages/panels/resources/lang/de/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/de/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/de/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/de/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/de/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/de/pages/auth/login.php b/packages/panels/resources/lang/de/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/de/pages/auth/login.php rename to packages/panels/resources/lang/de/auth/pages/login.php diff --git a/packages/panels/resources/lang/de/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/de/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/de/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/de/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/de/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/de/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/de/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/de/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/de/pages/auth/register.php b/packages/panels/resources/lang/de/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/de/pages/auth/register.php rename to packages/panels/resources/lang/de/auth/pages/register.php diff --git a/packages/panels/resources/lang/el/pages/auth/edit-profile.php b/packages/panels/resources/lang/el/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/el/pages/auth/edit-profile.php rename to packages/panels/resources/lang/el/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/el/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/el/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/el/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/el/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/el/pages/auth/login.php b/packages/panels/resources/lang/el/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/el/pages/auth/login.php rename to packages/panels/resources/lang/el/auth/pages/login.php diff --git a/packages/panels/resources/lang/el/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/el/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/el/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/el/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/el/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/el/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/el/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/el/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/el/pages/auth/register.php b/packages/panels/resources/lang/el/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/el/pages/auth/register.php rename to packages/panels/resources/lang/el/auth/pages/register.php diff --git a/packages/panels/resources/lang/en/auth/http/controllers/block-email-change-verification-controller.php b/packages/panels/resources/lang/en/auth/http/controllers/block-email-change-verification-controller.php new file mode 100644 index 00000000000..c75991d50e2 --- /dev/null +++ b/packages/panels/resources/lang/en/auth/http/controllers/block-email-change-verification-controller.php @@ -0,0 +1,19 @@ + [ + + 'blocked' => [ + 'title' => 'Email address change blocked', + 'body' => 'You have successfully blocked an email address change attempt to :email. If you did not make the original request, please contact us immediately.', + ], + + 'failed' => [ + 'title' => 'Failed to block email address change', + 'body' => 'Unfortunately, you were unable to prevent the email address from being changed to :email, since it was already verified before you blocked it. If you did not make the original request, please contact us immediately.', + ], + + ], + +]; diff --git a/packages/panels/resources/lang/en/auth/http/controllers/email-change-verification-controller.php b/packages/panels/resources/lang/en/auth/http/controllers/email-change-verification-controller.php new file mode 100644 index 00000000000..7d62db3dc7b --- /dev/null +++ b/packages/panels/resources/lang/en/auth/http/controllers/email-change-verification-controller.php @@ -0,0 +1,14 @@ + [ + + 'verified' => [ + 'title' => 'Email address changed', + 'body' => 'Your email address has been successfully changed to :email.', + ], + + ], + +]; diff --git a/packages/panels/resources/lang/en/multi-factor-authentication/email-code/actions/remove.php b/packages/panels/resources/lang/en/auth/multi-factor/email-code/actions/remove.php similarity index 100% rename from packages/panels/resources/lang/en/multi-factor-authentication/email-code/actions/remove.php rename to packages/panels/resources/lang/en/auth/multi-factor/email-code/actions/remove.php diff --git a/packages/panels/resources/lang/en/multi-factor-authentication/email-code/actions/set-up.php b/packages/panels/resources/lang/en/auth/multi-factor/email-code/actions/set-up.php similarity index 100% rename from packages/panels/resources/lang/en/multi-factor-authentication/email-code/actions/set-up.php rename to packages/panels/resources/lang/en/auth/multi-factor/email-code/actions/set-up.php diff --git a/packages/panels/resources/lang/en/multi-factor-authentication/email-code/notifications/verify-email-code-authentication.php b/packages/panels/resources/lang/en/auth/multi-factor/email-code/notifications/verify-email-code-authentication.php similarity index 100% rename from packages/panels/resources/lang/en/multi-factor-authentication/email-code/notifications/verify-email-code-authentication.php rename to packages/panels/resources/lang/en/auth/multi-factor/email-code/notifications/verify-email-code-authentication.php diff --git a/packages/panels/resources/lang/en/multi-factor-authentication/email-code/provider.php b/packages/panels/resources/lang/en/auth/multi-factor/email-code/provider.php similarity index 96% rename from packages/panels/resources/lang/en/multi-factor-authentication/email-code/provider.php rename to packages/panels/resources/lang/en/auth/multi-factor/email-code/provider.php index 97e0f6dfe39..a4a551a9111 100644 --- a/packages/panels/resources/lang/en/multi-factor-authentication/email-code/provider.php +++ b/packages/panels/resources/lang/en/auth/multi-factor/email-code/provider.php @@ -2,7 +2,7 @@ return [ - 'management_form' => [ + 'management_schema' => [ 'actions' => [ 'label' => 'Email code authentication', diff --git a/packages/panels/resources/lang/en/multi-factor-authentication/google-two-factor/actions/regenerate-recovery-codes.php b/packages/panels/resources/lang/en/auth/multi-factor/google-two-factor/actions/regenerate-recovery-codes.php similarity index 99% rename from packages/panels/resources/lang/en/multi-factor-authentication/google-two-factor/actions/regenerate-recovery-codes.php rename to packages/panels/resources/lang/en/auth/multi-factor/google-two-factor/actions/regenerate-recovery-codes.php index 219905b4792..f068e7b8e1f 100644 --- a/packages/panels/resources/lang/en/multi-factor-authentication/google-two-factor/actions/regenerate-recovery-codes.php +++ b/packages/panels/resources/lang/en/auth/multi-factor/google-two-factor/actions/regenerate-recovery-codes.php @@ -49,9 +49,7 @@ 'notifications' => [ 'regenerated' => [ - 'title' => 'New two-factor app authentication recovery codes have been generated', - ], ], diff --git a/packages/panels/resources/lang/en/multi-factor-authentication/google-two-factor/actions/remove.php b/packages/panels/resources/lang/en/auth/multi-factor/google-two-factor/actions/remove.php similarity index 100% rename from packages/panels/resources/lang/en/multi-factor-authentication/google-two-factor/actions/remove.php rename to packages/panels/resources/lang/en/auth/multi-factor/google-two-factor/actions/remove.php diff --git a/packages/panels/resources/lang/en/multi-factor-authentication/google-two-factor/actions/set-up.php b/packages/panels/resources/lang/en/auth/multi-factor/google-two-factor/actions/set-up.php similarity index 100% rename from packages/panels/resources/lang/en/multi-factor-authentication/google-two-factor/actions/set-up.php rename to packages/panels/resources/lang/en/auth/multi-factor/google-two-factor/actions/set-up.php diff --git a/packages/panels/resources/lang/en/multi-factor-authentication/google-two-factor/provider.php b/packages/panels/resources/lang/en/auth/multi-factor/google-two-factor/provider.php similarity index 96% rename from packages/panels/resources/lang/en/multi-factor-authentication/google-two-factor/provider.php rename to packages/panels/resources/lang/en/auth/multi-factor/google-two-factor/provider.php index 75103abdaa7..08682ea3606 100644 --- a/packages/panels/resources/lang/en/multi-factor-authentication/google-two-factor/provider.php +++ b/packages/panels/resources/lang/en/auth/multi-factor/google-two-factor/provider.php @@ -2,7 +2,7 @@ return [ - 'management_form' => [ + 'management_schema' => [ 'actions' => [ 'label' => 'Two factor authentication app', diff --git a/packages/panels/resources/lang/en/multi-factor-authentication/recovery-codes-modal-content.php b/packages/panels/resources/lang/en/auth/multi-factor/recovery-codes-modal-content.php similarity index 100% rename from packages/panels/resources/lang/en/multi-factor-authentication/recovery-codes-modal-content.php rename to packages/panels/resources/lang/en/auth/multi-factor/recovery-codes-modal-content.php diff --git a/packages/panels/resources/lang/en/auth/notifications/notice-of-email-change-request.php b/packages/panels/resources/lang/en/auth/notifications/notice-of-email-change-request.php new file mode 100644 index 00000000000..a12c516bcde --- /dev/null +++ b/packages/panels/resources/lang/en/auth/notifications/notice-of-email-change-request.php @@ -0,0 +1,16 @@ + 'Your email address is being changed', + + 'lines' => [ + 'We received a request to change the email address associated with your account. Your password was used to confirm this change.', + 'Once verified, the new email address on your account will be: :email.', + 'You can block the change before it is verified by clicking the button below.', + 'If you did not make this request, please contact us immediately.', + ], + + 'action' => 'Block Email Change', + +]; diff --git a/packages/panels/resources/lang/en/pages/auth/edit-profile.php b/packages/panels/resources/lang/en/auth/pages/edit-profile.php similarity index 60% rename from packages/panels/resources/lang/en/pages/auth/edit-profile.php rename to packages/panels/resources/lang/en/auth/pages/edit-profile.php index 58c56ae58a0..c4a2f161d5e 100644 --- a/packages/panels/resources/lang/en/pages/auth/edit-profile.php +++ b/packages/panels/resources/lang/en/auth/pages/edit-profile.php @@ -16,14 +16,18 @@ 'password' => [ 'label' => 'New password', + 'validation_attribute' => 'password', ], 'password_confirmation' => [ 'label' => 'Confirm new password', + 'validation_attribute' => 'password confirmation', ], 'current_password' => [ 'label' => 'Current password', + 'below_content' => 'For security, please confirm your password to continue.', + 'validation_attribute' => 'current password', ], 'actions' => [ @@ -38,6 +42,11 @@ 'notifications' => [ + 'email_change_verification_sent' => [ + 'title' => 'Email address change request sent', + 'body' => 'A request to change your email address has been sent to :email. Please check your email to verify the change.', + ], + 'saved' => [ 'title' => 'Saved', ], diff --git a/packages/panels/resources/lang/en/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/en/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/en/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/en/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/en/pages/auth/login.php b/packages/panels/resources/lang/en/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/en/pages/auth/login.php rename to packages/panels/resources/lang/en/auth/pages/login.php diff --git a/packages/panels/resources/lang/en/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/en/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/en/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/en/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/en/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/en/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/en/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/en/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/en/pages/auth/register.php b/packages/panels/resources/lang/en/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/en/pages/auth/register.php rename to packages/panels/resources/lang/en/auth/pages/register.php diff --git a/packages/panels/resources/lang/es/pages/auth/edit-profile.php b/packages/panels/resources/lang/es/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/es/pages/auth/edit-profile.php rename to packages/panels/resources/lang/es/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/es/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/es/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/es/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/es/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/es/pages/auth/login.php b/packages/panels/resources/lang/es/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/es/pages/auth/login.php rename to packages/panels/resources/lang/es/auth/pages/login.php diff --git a/packages/panels/resources/lang/es/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/es/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/es/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/es/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/es/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/es/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/es/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/es/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/es/pages/auth/register.php b/packages/panels/resources/lang/es/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/es/pages/auth/register.php rename to packages/panels/resources/lang/es/auth/pages/register.php diff --git a/packages/panels/resources/lang/fa/pages/auth/edit-profile.php b/packages/panels/resources/lang/fa/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/fa/pages/auth/edit-profile.php rename to packages/panels/resources/lang/fa/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/fa/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/fa/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/fa/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/fa/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/fa/pages/auth/login.php b/packages/panels/resources/lang/fa/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/fa/pages/auth/login.php rename to packages/panels/resources/lang/fa/auth/pages/login.php diff --git a/packages/panels/resources/lang/fa/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/fa/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/fa/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/fa/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/fa/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/fa/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/fa/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/fa/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/fa/pages/auth/register.php b/packages/panels/resources/lang/fa/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/fa/pages/auth/register.php rename to packages/panels/resources/lang/fa/auth/pages/register.php diff --git a/packages/panels/resources/lang/fi/pages/auth/edit-profile.php b/packages/panels/resources/lang/fi/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/fi/pages/auth/edit-profile.php rename to packages/panels/resources/lang/fi/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/fi/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/fi/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/fi/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/fi/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/fi/pages/auth/login.php b/packages/panels/resources/lang/fi/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/fi/pages/auth/login.php rename to packages/panels/resources/lang/fi/auth/pages/login.php diff --git a/packages/panels/resources/lang/fi/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/fi/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/fi/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/fi/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/fi/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/fi/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/fi/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/fi/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/fi/pages/auth/register.php b/packages/panels/resources/lang/fi/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/fi/pages/auth/register.php rename to packages/panels/resources/lang/fi/auth/pages/register.php diff --git a/packages/panels/resources/lang/fr/pages/auth/edit-profile.php b/packages/panels/resources/lang/fr/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/fr/pages/auth/edit-profile.php rename to packages/panels/resources/lang/fr/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/fr/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/fr/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/fr/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/fr/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/fr/pages/auth/login.php b/packages/panels/resources/lang/fr/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/fr/pages/auth/login.php rename to packages/panels/resources/lang/fr/auth/pages/login.php diff --git a/packages/panels/resources/lang/fr/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/fr/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/fr/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/fr/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/fr/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/fr/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/fr/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/fr/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/fr/pages/auth/register.php b/packages/panels/resources/lang/fr/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/fr/pages/auth/register.php rename to packages/panels/resources/lang/fr/auth/pages/register.php diff --git a/packages/panels/resources/lang/he/pages/auth/edit-profile.php b/packages/panels/resources/lang/he/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/he/pages/auth/edit-profile.php rename to packages/panels/resources/lang/he/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/he/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/he/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/he/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/he/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/he/pages/auth/login.php b/packages/panels/resources/lang/he/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/he/pages/auth/login.php rename to packages/panels/resources/lang/he/auth/pages/login.php diff --git a/packages/panels/resources/lang/he/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/he/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/he/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/he/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/he/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/he/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/he/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/he/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/he/pages/auth/register.php b/packages/panels/resources/lang/he/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/he/pages/auth/register.php rename to packages/panels/resources/lang/he/auth/pages/register.php diff --git a/packages/panels/resources/lang/hi/pages/auth/login.php b/packages/panels/resources/lang/hi/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/hi/pages/auth/login.php rename to packages/panels/resources/lang/hi/auth/pages/login.php diff --git a/packages/panels/resources/lang/hr/pages/auth/edit-profile.php b/packages/panels/resources/lang/hr/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/hr/pages/auth/edit-profile.php rename to packages/panels/resources/lang/hr/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/hr/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/hr/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/hr/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/hr/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/hr/pages/auth/login.php b/packages/panels/resources/lang/hr/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/hr/pages/auth/login.php rename to packages/panels/resources/lang/hr/auth/pages/login.php diff --git a/packages/panels/resources/lang/hr/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/hr/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/hr/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/hr/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/hr/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/hr/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/hr/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/hr/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/hr/pages/auth/register.php b/packages/panels/resources/lang/hr/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/hr/pages/auth/register.php rename to packages/panels/resources/lang/hr/auth/pages/register.php diff --git a/packages/panels/resources/lang/hu/pages/auth/edit-profile.php b/packages/panels/resources/lang/hu/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/hu/pages/auth/edit-profile.php rename to packages/panels/resources/lang/hu/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/hu/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/hu/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/hu/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/hu/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/hu/pages/auth/login.php b/packages/panels/resources/lang/hu/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/hu/pages/auth/login.php rename to packages/panels/resources/lang/hu/auth/pages/login.php diff --git a/packages/panels/resources/lang/hu/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/hu/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/hu/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/hu/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/hu/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/hu/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/hu/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/hu/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/hu/pages/auth/register.php b/packages/panels/resources/lang/hu/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/hu/pages/auth/register.php rename to packages/panels/resources/lang/hu/auth/pages/register.php diff --git a/packages/panels/resources/lang/hy/pages/auth/login.php b/packages/panels/resources/lang/hy/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/hy/pages/auth/login.php rename to packages/panels/resources/lang/hy/auth/pages/login.php diff --git a/packages/panels/resources/lang/id/pages/auth/edit-profile.php b/packages/panels/resources/lang/id/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/id/pages/auth/edit-profile.php rename to packages/panels/resources/lang/id/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/id/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/id/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/id/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/id/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/id/pages/auth/login.php b/packages/panels/resources/lang/id/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/id/pages/auth/login.php rename to packages/panels/resources/lang/id/auth/pages/login.php diff --git a/packages/panels/resources/lang/id/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/id/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/id/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/id/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/id/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/id/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/id/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/id/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/id/pages/auth/register.php b/packages/panels/resources/lang/id/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/id/pages/auth/register.php rename to packages/panels/resources/lang/id/auth/pages/register.php diff --git a/packages/panels/resources/lang/it/pages/auth/edit-profile.php b/packages/panels/resources/lang/it/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/it/pages/auth/edit-profile.php rename to packages/panels/resources/lang/it/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/it/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/it/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/it/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/it/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/it/pages/auth/login.php b/packages/panels/resources/lang/it/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/it/pages/auth/login.php rename to packages/panels/resources/lang/it/auth/pages/login.php diff --git a/packages/panels/resources/lang/it/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/it/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/it/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/it/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/it/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/it/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/it/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/it/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/it/pages/auth/register.php b/packages/panels/resources/lang/it/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/it/pages/auth/register.php rename to packages/panels/resources/lang/it/auth/pages/register.php diff --git a/packages/panels/resources/lang/ja/pages/auth/edit-profile.php b/packages/panels/resources/lang/ja/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/ja/pages/auth/edit-profile.php rename to packages/panels/resources/lang/ja/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/ja/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/ja/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/ja/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/ja/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/ja/pages/auth/login.php b/packages/panels/resources/lang/ja/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/ja/pages/auth/login.php rename to packages/panels/resources/lang/ja/auth/pages/login.php diff --git a/packages/panels/resources/lang/ja/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/ja/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/ja/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/ja/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/ja/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/ja/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/ja/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/ja/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/ja/pages/auth/register.php b/packages/panels/resources/lang/ja/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/ja/pages/auth/register.php rename to packages/panels/resources/lang/ja/auth/pages/register.php diff --git a/packages/panels/resources/lang/ka/pages/auth/edit-profile.php b/packages/panels/resources/lang/ka/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/ka/pages/auth/edit-profile.php rename to packages/panels/resources/lang/ka/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/ka/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/ka/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/ka/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/ka/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/ka/pages/auth/login.php b/packages/panels/resources/lang/ka/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/ka/pages/auth/login.php rename to packages/panels/resources/lang/ka/auth/pages/login.php diff --git a/packages/panels/resources/lang/ka/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/ka/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/ka/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/ka/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/ka/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/ka/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/ka/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/ka/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/ka/pages/auth/register.php b/packages/panels/resources/lang/ka/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/ka/pages/auth/register.php rename to packages/panels/resources/lang/ka/auth/pages/register.php diff --git a/packages/panels/resources/lang/km/pages/auth/edit-profile.php b/packages/panels/resources/lang/km/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/km/pages/auth/edit-profile.php rename to packages/panels/resources/lang/km/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/km/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/km/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/km/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/km/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/km/pages/auth/login.php b/packages/panels/resources/lang/km/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/km/pages/auth/login.php rename to packages/panels/resources/lang/km/auth/pages/login.php diff --git a/packages/panels/resources/lang/km/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/km/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/km/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/km/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/km/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/km/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/km/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/km/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/km/pages/auth/register.php b/packages/panels/resources/lang/km/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/km/pages/auth/register.php rename to packages/panels/resources/lang/km/auth/pages/register.php diff --git a/packages/panels/resources/lang/ko/pages/auth/edit-profile.php b/packages/panels/resources/lang/ko/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/ko/pages/auth/edit-profile.php rename to packages/panels/resources/lang/ko/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/ko/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/ko/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/ko/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/ko/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/ko/pages/auth/login.php b/packages/panels/resources/lang/ko/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/ko/pages/auth/login.php rename to packages/panels/resources/lang/ko/auth/pages/login.php diff --git a/packages/panels/resources/lang/ko/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/ko/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/ko/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/ko/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/ko/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/ko/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/ko/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/ko/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/ko/pages/auth/register.php b/packages/panels/resources/lang/ko/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/ko/pages/auth/register.php rename to packages/panels/resources/lang/ko/auth/pages/register.php diff --git a/packages/panels/resources/lang/ku/pages/auth/edit-profile.php b/packages/panels/resources/lang/ku/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/ku/pages/auth/edit-profile.php rename to packages/panels/resources/lang/ku/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/ku/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/ku/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/ku/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/ku/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/ku/pages/auth/login.php b/packages/panels/resources/lang/ku/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/ku/pages/auth/login.php rename to packages/panels/resources/lang/ku/auth/pages/login.php diff --git a/packages/panels/resources/lang/ku/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/ku/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/ku/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/ku/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/ku/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/ku/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/ku/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/ku/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/ku/pages/auth/register.php b/packages/panels/resources/lang/ku/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/ku/pages/auth/register.php rename to packages/panels/resources/lang/ku/auth/pages/register.php diff --git a/packages/panels/resources/lang/lt/pages/auth/edit-profile.php b/packages/panels/resources/lang/lt/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/lt/pages/auth/edit-profile.php rename to packages/panels/resources/lang/lt/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/lt/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/lt/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/lt/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/lt/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/lt/pages/auth/login.php b/packages/panels/resources/lang/lt/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/lt/pages/auth/login.php rename to packages/panels/resources/lang/lt/auth/pages/login.php diff --git a/packages/panels/resources/lang/lt/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/lt/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/lt/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/lt/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/lt/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/lt/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/lt/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/lt/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/lt/pages/auth/register.php b/packages/panels/resources/lang/lt/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/lt/pages/auth/register.php rename to packages/panels/resources/lang/lt/auth/pages/register.php diff --git a/packages/panels/resources/lang/lv/pages/auth/edit-profile.php b/packages/panels/resources/lang/lv/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/lv/pages/auth/edit-profile.php rename to packages/panels/resources/lang/lv/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/lv/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/lv/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/lv/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/lv/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/lv/pages/auth/login.php b/packages/panels/resources/lang/lv/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/lv/pages/auth/login.php rename to packages/panels/resources/lang/lv/auth/pages/login.php diff --git a/packages/panels/resources/lang/lv/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/lv/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/lv/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/lv/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/lv/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/lv/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/lv/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/lv/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/lv/pages/auth/register.php b/packages/panels/resources/lang/lv/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/lv/pages/auth/register.php rename to packages/panels/resources/lang/lv/auth/pages/register.php diff --git a/packages/panels/resources/lang/mn/pages/auth/edit-profile.php b/packages/panels/resources/lang/mn/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/mn/pages/auth/edit-profile.php rename to packages/panels/resources/lang/mn/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/mn/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/mn/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/mn/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/mn/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/mn/pages/auth/login.php b/packages/panels/resources/lang/mn/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/mn/pages/auth/login.php rename to packages/panels/resources/lang/mn/auth/pages/login.php diff --git a/packages/panels/resources/lang/mn/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/mn/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/mn/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/mn/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/mn/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/mn/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/mn/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/mn/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/mn/pages/auth/register.php b/packages/panels/resources/lang/mn/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/mn/pages/auth/register.php rename to packages/panels/resources/lang/mn/auth/pages/register.php diff --git a/packages/panels/resources/lang/ms/pages/auth/edit-profile.php b/packages/panels/resources/lang/ms/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/ms/pages/auth/edit-profile.php rename to packages/panels/resources/lang/ms/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/ms/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/ms/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/ms/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/ms/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/ms/pages/auth/login.php b/packages/panels/resources/lang/ms/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/ms/pages/auth/login.php rename to packages/panels/resources/lang/ms/auth/pages/login.php diff --git a/packages/panels/resources/lang/ms/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/ms/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/ms/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/ms/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/ms/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/ms/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/ms/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/ms/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/ms/pages/auth/register.php b/packages/panels/resources/lang/ms/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/ms/pages/auth/register.php rename to packages/panels/resources/lang/ms/auth/pages/register.php diff --git a/packages/panels/resources/lang/my/pages/auth/login.php b/packages/panels/resources/lang/my/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/my/pages/auth/login.php rename to packages/panels/resources/lang/my/auth/pages/login.php diff --git a/packages/panels/resources/lang/nb/pages/auth/edit-profile.php b/packages/panels/resources/lang/nb/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/nb/pages/auth/edit-profile.php rename to packages/panels/resources/lang/nb/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/nb/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/nb/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/nb/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/nb/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/nb/pages/auth/login.php b/packages/panels/resources/lang/nb/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/nb/pages/auth/login.php rename to packages/panels/resources/lang/nb/auth/pages/login.php diff --git a/packages/panels/resources/lang/nb/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/nb/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/nb/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/nb/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/nb/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/nb/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/nb/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/nb/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/nb/pages/auth/register.php b/packages/panels/resources/lang/nb/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/nb/pages/auth/register.php rename to packages/panels/resources/lang/nb/auth/pages/register.php diff --git a/packages/panels/resources/lang/ne/pages/auth/edit-profile.php b/packages/panels/resources/lang/ne/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/ne/pages/auth/edit-profile.php rename to packages/panels/resources/lang/ne/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/ne/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/ne/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/ne/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/ne/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/ne/pages/auth/login.php b/packages/panels/resources/lang/ne/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/ne/pages/auth/login.php rename to packages/panels/resources/lang/ne/auth/pages/login.php diff --git a/packages/panels/resources/lang/ne/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/ne/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/ne/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/ne/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/ne/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/ne/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/ne/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/ne/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/ne/pages/auth/register.php b/packages/panels/resources/lang/ne/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/ne/pages/auth/register.php rename to packages/panels/resources/lang/ne/auth/pages/register.php diff --git a/packages/panels/resources/lang/nl/pages/auth/edit-profile.php b/packages/panels/resources/lang/nl/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/nl/pages/auth/edit-profile.php rename to packages/panels/resources/lang/nl/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/nl/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/nl/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/nl/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/nl/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/nl/pages/auth/login.php b/packages/panels/resources/lang/nl/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/nl/pages/auth/login.php rename to packages/panels/resources/lang/nl/auth/pages/login.php diff --git a/packages/panels/resources/lang/nl/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/nl/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/nl/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/nl/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/nl/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/nl/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/nl/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/nl/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/nl/pages/auth/register.php b/packages/panels/resources/lang/nl/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/nl/pages/auth/register.php rename to packages/panels/resources/lang/nl/auth/pages/register.php diff --git a/packages/panels/resources/lang/pl/pages/auth/edit-profile.php b/packages/panels/resources/lang/pl/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/pl/pages/auth/edit-profile.php rename to packages/panels/resources/lang/pl/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/pl/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/pl/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/pl/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/pl/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/pl/pages/auth/login.php b/packages/panels/resources/lang/pl/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/pl/pages/auth/login.php rename to packages/panels/resources/lang/pl/auth/pages/login.php diff --git a/packages/panels/resources/lang/pl/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/pl/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/pl/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/pl/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/pl/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/pl/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/pl/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/pl/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/pl/pages/auth/register.php b/packages/panels/resources/lang/pl/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/pl/pages/auth/register.php rename to packages/panels/resources/lang/pl/auth/pages/register.php diff --git a/packages/panels/resources/lang/pt/pages/auth/edit-profile.php b/packages/panels/resources/lang/pt/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/pt/pages/auth/edit-profile.php rename to packages/panels/resources/lang/pt/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/pt/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/pt/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/pt/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/pt/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/pt/pages/auth/login.php b/packages/panels/resources/lang/pt/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/pt/pages/auth/login.php rename to packages/panels/resources/lang/pt/auth/pages/login.php diff --git a/packages/panels/resources/lang/pt/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/pt/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/pt/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/pt/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/pt/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/pt/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/pt/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/pt/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/pt/pages/auth/register.php b/packages/panels/resources/lang/pt/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/pt/pages/auth/register.php rename to packages/panels/resources/lang/pt/auth/pages/register.php diff --git a/packages/panels/resources/lang/pt_BR/pages/auth/edit-profile.php b/packages/panels/resources/lang/pt_BR/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/pt_BR/pages/auth/edit-profile.php rename to packages/panels/resources/lang/pt_BR/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/pt_BR/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/pt_BR/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/pt_BR/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/pt_BR/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/pt_BR/pages/auth/login.php b/packages/panels/resources/lang/pt_BR/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/pt_BR/pages/auth/login.php rename to packages/panels/resources/lang/pt_BR/auth/pages/login.php diff --git a/packages/panels/resources/lang/pt_BR/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/pt_BR/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/pt_BR/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/pt_BR/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/pt_BR/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/pt_BR/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/pt_BR/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/pt_BR/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/pt_BR/pages/auth/register.php b/packages/panels/resources/lang/pt_BR/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/pt_BR/pages/auth/register.php rename to packages/panels/resources/lang/pt_BR/auth/pages/register.php diff --git a/packages/panels/resources/lang/ro/pages/auth/edit-profile.php b/packages/panels/resources/lang/ro/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/ro/pages/auth/edit-profile.php rename to packages/panels/resources/lang/ro/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/ro/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/ro/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/ro/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/ro/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/ro/pages/auth/login.php b/packages/panels/resources/lang/ro/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/ro/pages/auth/login.php rename to packages/panels/resources/lang/ro/auth/pages/login.php diff --git a/packages/panels/resources/lang/ro/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/ro/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/ro/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/ro/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/ro/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/ro/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/ro/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/ro/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/ro/pages/auth/register.php b/packages/panels/resources/lang/ro/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/ro/pages/auth/register.php rename to packages/panels/resources/lang/ro/auth/pages/register.php diff --git a/packages/panels/resources/lang/ru/pages/auth/edit-profile.php b/packages/panels/resources/lang/ru/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/ru/pages/auth/edit-profile.php rename to packages/panels/resources/lang/ru/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/ru/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/ru/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/ru/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/ru/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/ru/pages/auth/login.php b/packages/panels/resources/lang/ru/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/ru/pages/auth/login.php rename to packages/panels/resources/lang/ru/auth/pages/login.php diff --git a/packages/panels/resources/lang/ru/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/ru/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/ru/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/ru/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/ru/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/ru/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/ru/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/ru/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/ru/pages/auth/register.php b/packages/panels/resources/lang/ru/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/ru/pages/auth/register.php rename to packages/panels/resources/lang/ru/auth/pages/register.php diff --git a/packages/panels/resources/lang/sk/pages/auth/edit-profile.php b/packages/panels/resources/lang/sk/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/sk/pages/auth/edit-profile.php rename to packages/panels/resources/lang/sk/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/sk/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/sk/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/sk/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/sk/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/sk/pages/auth/login.php b/packages/panels/resources/lang/sk/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/sk/pages/auth/login.php rename to packages/panels/resources/lang/sk/auth/pages/login.php diff --git a/packages/panels/resources/lang/sk/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/sk/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/sk/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/sk/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/sk/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/sk/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/sk/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/sk/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/sk/pages/auth/register.php b/packages/panels/resources/lang/sk/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/sk/pages/auth/register.php rename to packages/panels/resources/lang/sk/auth/pages/register.php diff --git a/packages/panels/resources/lang/sl/pages/auth/edit-profile.php b/packages/panels/resources/lang/sl/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/sl/pages/auth/edit-profile.php rename to packages/panels/resources/lang/sl/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/sl/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/sl/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/sl/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/sl/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/sl/pages/auth/login.php b/packages/panels/resources/lang/sl/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/sl/pages/auth/login.php rename to packages/panels/resources/lang/sl/auth/pages/login.php diff --git a/packages/panels/resources/lang/sl/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/sl/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/sl/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/sl/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/sl/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/sl/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/sl/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/sl/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/sl/pages/auth/register.php b/packages/panels/resources/lang/sl/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/sl/pages/auth/register.php rename to packages/panels/resources/lang/sl/auth/pages/register.php diff --git a/packages/panels/resources/lang/sq/pages/auth/edit-profile.php b/packages/panels/resources/lang/sq/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/sq/pages/auth/edit-profile.php rename to packages/panels/resources/lang/sq/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/sq/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/sq/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/sq/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/sq/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/sq/pages/auth/login.php b/packages/panels/resources/lang/sq/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/sq/pages/auth/login.php rename to packages/panels/resources/lang/sq/auth/pages/login.php diff --git a/packages/panels/resources/lang/sq/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/sq/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/sq/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/sq/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/sq/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/sq/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/sq/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/sq/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/sq/pages/auth/register.php b/packages/panels/resources/lang/sq/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/sq/pages/auth/register.php rename to packages/panels/resources/lang/sq/auth/pages/register.php diff --git a/packages/panels/resources/lang/sv/pages/auth/edit-profile.php b/packages/panels/resources/lang/sv/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/sv/pages/auth/edit-profile.php rename to packages/panels/resources/lang/sv/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/sv/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/sv/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/sv/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/sv/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/sv/pages/auth/login.php b/packages/panels/resources/lang/sv/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/sv/pages/auth/login.php rename to packages/panels/resources/lang/sv/auth/pages/login.php diff --git a/packages/panels/resources/lang/sv/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/sv/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/sv/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/sv/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/sv/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/sv/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/sv/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/sv/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/sv/pages/auth/register.php b/packages/panels/resources/lang/sv/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/sv/pages/auth/register.php rename to packages/panels/resources/lang/sv/auth/pages/register.php diff --git a/packages/panels/resources/lang/sw/pages/auth/login.php b/packages/panels/resources/lang/sw/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/sw/pages/auth/login.php rename to packages/panels/resources/lang/sw/auth/pages/login.php diff --git a/packages/panels/resources/lang/th/pages/auth/edit-profile.php b/packages/panels/resources/lang/th/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/th/pages/auth/edit-profile.php rename to packages/panels/resources/lang/th/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/th/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/th/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/th/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/th/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/th/pages/auth/login.php b/packages/panels/resources/lang/th/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/th/pages/auth/login.php rename to packages/panels/resources/lang/th/auth/pages/login.php diff --git a/packages/panels/resources/lang/th/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/th/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/th/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/th/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/th/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/th/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/th/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/th/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/th/pages/auth/register.php b/packages/panels/resources/lang/th/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/th/pages/auth/register.php rename to packages/panels/resources/lang/th/auth/pages/register.php diff --git a/packages/panels/resources/lang/tr/pages/auth/edit-profile.php b/packages/panels/resources/lang/tr/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/tr/pages/auth/edit-profile.php rename to packages/panels/resources/lang/tr/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/tr/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/tr/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/tr/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/tr/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/tr/pages/auth/login.php b/packages/panels/resources/lang/tr/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/tr/pages/auth/login.php rename to packages/panels/resources/lang/tr/auth/pages/login.php diff --git a/packages/panels/resources/lang/tr/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/tr/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/tr/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/tr/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/tr/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/tr/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/tr/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/tr/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/tr/pages/auth/register.php b/packages/panels/resources/lang/tr/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/tr/pages/auth/register.php rename to packages/panels/resources/lang/tr/auth/pages/register.php diff --git a/packages/panels/resources/lang/uk/pages/auth/edit-profile.php b/packages/panels/resources/lang/uk/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/uk/pages/auth/edit-profile.php rename to packages/panels/resources/lang/uk/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/uk/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/uk/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/uk/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/uk/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/uk/pages/auth/login.php b/packages/panels/resources/lang/uk/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/uk/pages/auth/login.php rename to packages/panels/resources/lang/uk/auth/pages/login.php diff --git a/packages/panels/resources/lang/uk/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/uk/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/uk/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/uk/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/uk/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/uk/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/uk/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/uk/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/uk/pages/auth/register.php b/packages/panels/resources/lang/uk/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/uk/pages/auth/register.php rename to packages/panels/resources/lang/uk/auth/pages/register.php diff --git a/packages/panels/resources/lang/uz/pages/auth/edit-profile.php b/packages/panels/resources/lang/uz/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/uz/pages/auth/edit-profile.php rename to packages/panels/resources/lang/uz/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/uz/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/uz/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/uz/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/uz/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/uz/pages/auth/login.php b/packages/panels/resources/lang/uz/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/uz/pages/auth/login.php rename to packages/panels/resources/lang/uz/auth/pages/login.php diff --git a/packages/panels/resources/lang/uz/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/uz/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/uz/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/uz/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/uz/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/uz/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/uz/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/uz/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/uz/pages/auth/register.php b/packages/panels/resources/lang/uz/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/uz/pages/auth/register.php rename to packages/panels/resources/lang/uz/auth/pages/register.php diff --git a/packages/panels/resources/lang/vi/pages/auth/edit-profile.php b/packages/panels/resources/lang/vi/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/vi/pages/auth/edit-profile.php rename to packages/panels/resources/lang/vi/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/vi/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/vi/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/vi/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/vi/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/vi/pages/auth/login.php b/packages/panels/resources/lang/vi/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/vi/pages/auth/login.php rename to packages/panels/resources/lang/vi/auth/pages/login.php diff --git a/packages/panels/resources/lang/vi/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/vi/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/vi/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/vi/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/vi/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/vi/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/vi/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/vi/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/vi/pages/auth/register.php b/packages/panels/resources/lang/vi/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/vi/pages/auth/register.php rename to packages/panels/resources/lang/vi/auth/pages/register.php diff --git a/packages/panels/resources/lang/zh_CN/pages/auth/edit-profile.php b/packages/panels/resources/lang/zh_CN/auth/pages/edit-profile.php similarity index 100% rename from packages/panels/resources/lang/zh_CN/pages/auth/edit-profile.php rename to packages/panels/resources/lang/zh_CN/auth/pages/edit-profile.php diff --git a/packages/panels/resources/lang/zh_CN/pages/auth/email-verification/email-verification-prompt.php b/packages/panels/resources/lang/zh_CN/auth/pages/email-verification/email-verification-prompt.php similarity index 100% rename from packages/panels/resources/lang/zh_CN/pages/auth/email-verification/email-verification-prompt.php rename to packages/panels/resources/lang/zh_CN/auth/pages/email-verification/email-verification-prompt.php diff --git a/packages/panels/resources/lang/zh_CN/pages/auth/login.php b/packages/panels/resources/lang/zh_CN/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/zh_CN/pages/auth/login.php rename to packages/panels/resources/lang/zh_CN/auth/pages/login.php diff --git a/packages/panels/resources/lang/zh_CN/pages/auth/password-reset/request-password-reset.php b/packages/panels/resources/lang/zh_CN/auth/pages/password-reset/request-password-reset.php similarity index 100% rename from packages/panels/resources/lang/zh_CN/pages/auth/password-reset/request-password-reset.php rename to packages/panels/resources/lang/zh_CN/auth/pages/password-reset/request-password-reset.php diff --git a/packages/panels/resources/lang/zh_CN/pages/auth/password-reset/reset-password.php b/packages/panels/resources/lang/zh_CN/auth/pages/password-reset/reset-password.php similarity index 100% rename from packages/panels/resources/lang/zh_CN/pages/auth/password-reset/reset-password.php rename to packages/panels/resources/lang/zh_CN/auth/pages/password-reset/reset-password.php diff --git a/packages/panels/resources/lang/zh_CN/pages/auth/register.php b/packages/panels/resources/lang/zh_CN/auth/pages/register.php similarity index 100% rename from packages/panels/resources/lang/zh_CN/pages/auth/register.php rename to packages/panels/resources/lang/zh_CN/auth/pages/register.php diff --git a/packages/panels/resources/lang/zh_TW/pages/auth/login.php b/packages/panels/resources/lang/zh_TW/auth/pages/login.php similarity index 100% rename from packages/panels/resources/lang/zh_TW/pages/auth/login.php rename to packages/panels/resources/lang/zh_TW/auth/pages/login.php diff --git a/packages/panels/resources/views/multi-factor-authentication/google-two-factor/set-up-modal-content.blade.php b/packages/panels/resources/views/auth/multi-factor/google-two-factor/set-up-modal-content.blade.php similarity index 50% rename from packages/panels/resources/views/multi-factor-authentication/google-two-factor/set-up-modal-content.blade.php rename to packages/panels/resources/views/auth/multi-factor/google-two-factor/set-up-modal-content.blade.php index 7fa8c2d5f30..207308f2e1d 100644 --- a/packages/panels/resources/views/multi-factor-authentication/google-two-factor/set-up-modal-content.blade.php +++ b/packages/panels/resources/views/auth/multi-factor/google-two-factor/set-up-modal-content.blade.php @@ -1,30 +1,30 @@

- {{ __('filament-panels::multi-factor-authentication/google-two-factor/actions/set-up.modal.content.qr_code.instruction') }} + {{ __('filament-panels::auth/multi-factor/google-two-factor/actions/set-up.modal.content.qr_code.instruction') }}

{{ __('filament-panels::multi-factor-authentication/google-two-factor/actions/set-up.modal.content.qr_code.alt') }}

- {{ __('filament-panels::multi-factor-authentication/google-two-factor/actions/set-up.modal.content.text_code.instruction') }} + {{ __('filament-panels::auth/multi-factor/google-two-factor/actions/set-up.modal.content.text_code.instruction') }}

@@ -34,10 +34,10 @@ class="inline" class="flex flex-col gap-3 rounded-lg bg-gray-50 p-4 ring-1 ring-inset ring-gray-950/5 dark:bg-white/5 dark:ring-white/10" >

- {{ __('filament-panels::multi-factor-authentication/google-two-factor/actions/set-up.modal.content.recovery_codes.instruction') }} + {{ __('filament-panels::auth/multi-factor/google-two-factor/actions/set-up.modal.content.recovery_codes.instruction') }}

- @include('filament-panels::multi-factor-authentication.recovery-codes-modal-content', [ + @include('filament-panels::auth.multi-factor.recovery-codes-modal-content', [ 'recoveryCodes' => $recoveryCodes, ])
diff --git a/packages/panels/resources/views/multi-factor-authentication/recovery-codes-modal-content.blade.php b/packages/panels/resources/views/auth/multi-factor/recovery-codes-modal-content.blade.php similarity index 60% rename from packages/panels/resources/views/multi-factor-authentication/recovery-codes-modal-content.blade.php rename to packages/panels/resources/views/auth/multi-factor/recovery-codes-modal-content.blade.php index a7cb196a4bd..9fcc5143391 100644 --- a/packages/panels/resources/views/multi-factor-authentication/recovery-codes-modal-content.blade.php +++ b/packages/panels/resources/views/auth/multi-factor/recovery-codes-modal-content.blade.php @@ -6,7 +6,7 @@ type="button" x-on:click=" window.navigator.clipboard.writeText(@js($recoveryCode)) - $tooltip(@js(__('filament-panels::multi-factor-authentication/recovery-codes-modal-content.messages.copied')), { + $tooltip(@js(__('filament-panels::auth/multi-factor/recovery-codes-modal-content.messages.copied')), { theme: $store.theme, }) " @@ -18,31 +18,31 @@

- {{ __('filament-panels::multi-factor-authentication/recovery-codes-modal-content.actions.0') }} + {{ __('filament-panels::auth/multi-factor/recovery-codes-modal-content.actions.0') }} - {{ __('filament-panels::multi-factor-authentication/recovery-codes-modal-content.actions.copy.label') }} + {{ __('filament-panels::auth/multi-factor/recovery-codes-modal-content.actions.copy.label') }} - {{ __('filament-panels::multi-factor-authentication/recovery-codes-modal-content.actions.1') }} + {{ __('filament-panels::auth/multi-factor/recovery-codes-modal-content.actions.1') }} - {{ __('filament-panels::multi-factor-authentication/recovery-codes-modal-content.actions.download.label') }} + {{ __('filament-panels::auth/multi-factor/recovery-codes-modal-content.actions.download.label') }} - {{ __('filament-panels::multi-factor-authentication/recovery-codes-modal-content.actions.2') }} + {{ __('filament-panels::auth/multi-factor/recovery-codes-modal-content.actions.2') }}

diff --git a/packages/panels/resources/views/pages/auth/edit-profile.blade.php b/packages/panels/resources/views/auth/pages/edit-profile.blade.php similarity index 100% rename from packages/panels/resources/views/pages/auth/edit-profile.blade.php rename to packages/panels/resources/views/auth/pages/edit-profile.blade.php diff --git a/packages/panels/resources/views/pages/auth/email-verification/email-verification-prompt.blade.php b/packages/panels/resources/views/auth/pages/email-verification/email-verification-prompt.blade.php similarity index 79% rename from packages/panels/resources/views/pages/auth/email-verification/email-verification-prompt.blade.php rename to packages/panels/resources/views/auth/pages/email-verification/email-verification-prompt.blade.php index f5d938bb59d..b2dc360c9bf 100644 --- a/packages/panels/resources/views/pages/auth/email-verification/email-verification-prompt.blade.php +++ b/packages/panels/resources/views/auth/pages/email-verification/email-verification-prompt.blade.php @@ -1,14 +1,14 @@

{{ - __('filament-panels::pages/auth/email-verification/email-verification-prompt.messages.notification_sent', [ + __('filament-panels::auth/pages/email-verification/email-verification-prompt.messages.notification_sent', [ 'email' => filament()->auth()->user()->getEmailForVerification(), ]) }}

- {{ __('filament-panels::pages/auth/email-verification/email-verification-prompt.messages.notification_not_received') }} + {{ __('filament-panels::auth/pages/email-verification/email-verification-prompt.messages.notification_not_received') }} {{ $this->resendNotificationAction }}

diff --git a/packages/panels/routes/web.php b/packages/panels/routes/web.php index 3b5248332a2..8222236255b 100644 --- a/packages/panels/routes/web.php +++ b/packages/panels/routes/web.php @@ -1,8 +1,10 @@ hasEmailChangeVerification()) { + Route::name('auth.email-change-verification.') + ->prefix($panel->getEmailChangeVerificationRoutePrefix()) + ->group(function () use ($panel) { + Route::get($panel->getEmailChangeVerificationRouteSlug('/{id}/{email}'), EmailChangeVerificationController::class) + ->middleware(['signed', 'throttle:6,1']) + ->name('verify'); + + Route::get($panel->getEmailChangeVerificationRouteSlug('/{id}/{email}/block'), BlockEmailChangeVerificationController::class) + ->middleware(['signed', 'throttle:6,1']) + ->name('block-verification'); + }); + } + Route::name('tenant.') ->group(function () use ($panel): void { if ($panel->hasTenantRegistration()) { diff --git a/packages/panels/src/Events/Auth/Registered.php b/packages/panels/src/Auth/Events/Registered.php similarity index 90% rename from packages/panels/src/Events/Auth/Registered.php rename to packages/panels/src/Auth/Events/Registered.php index 331a3591e6e..ab123fd0b89 100644 --- a/packages/panels/src/Events/Auth/Registered.php +++ b/packages/panels/src/Auth/Events/Registered.php @@ -1,6 +1,6 @@ fulfill(); + + if ($isSuccessful) { + Notification::make() + ->title(__('filament-panels::auth/http/controllers/block-email-change-verification-controller.notifications.blocked.title')) + ->body(__('filament-panels::auth/http/controllers/block-email-change-verification-controller.notifications.blocked.body', [ + 'email' => decrypt($request->route('email')), + ])) + ->success() + ->persistent() + ->send(); + } else { + Notification::make() + ->title(__('filament-panels::auth/http/controllers/block-email-change-verification-controller.notifications.failed.title')) + ->body(__('filament-panels::auth/http/controllers/block-email-change-verification-controller.notifications.failed.body', [ + 'email' => decrypt($request->route('email')), + ])) + ->danger() + ->persistent() + ->send(); + } + + return app(BlockEmailChangeVerificationResponse::class); + } +} diff --git a/packages/panels/src/Auth/Http/Controllers/EmailChangeVerificationController.php b/packages/panels/src/Auth/Http/Controllers/EmailChangeVerificationController.php new file mode 100644 index 00000000000..e53e6fae430 --- /dev/null +++ b/packages/panels/src/Auth/Http/Controllers/EmailChangeVerificationController.php @@ -0,0 +1,25 @@ +fulfill(); + + Notification::make() + ->title(__('filament-panels::auth/http/controllers/email-change-verification-controller.notifications.verified.title')) + ->body(__('filament-panels::auth/http/controllers/email-change-verification-controller.notifications.verified.body', [ + 'email' => decrypt($request->route('email')), + ])) + ->success() + ->send(); + + return app(EmailChangeVerificationResponse::class); + } +} diff --git a/packages/panels/src/Http/Controllers/Auth/EmailVerificationController.php b/packages/panels/src/Auth/Http/Controllers/EmailVerificationController.php similarity index 73% rename from packages/panels/src/Http/Controllers/Auth/EmailVerificationController.php rename to packages/panels/src/Auth/Http/Controllers/EmailVerificationController.php index e2eec474ff2..1a71a81cd49 100644 --- a/packages/panels/src/Http/Controllers/Auth/EmailVerificationController.php +++ b/packages/panels/src/Auth/Http/Controllers/EmailVerificationController.php @@ -1,8 +1,8 @@ user()->getKey(), (string) $this->route('id'))) { + return false; + } + + try { + return filled(decrypt($this->route('email'))); + } catch (DecryptException) { + return false; + } + } + + /** + * @return array> + */ + public function rules(): array + { + return []; + } + + public function fulfill(): bool + { + return (bool) cache()->pull($this->query('verificationSignature')); + } + + public function withValidator(Validator $validator): Validator + { + return $validator; + } +} diff --git a/packages/panels/src/Auth/Http/Requests/EmailChangeVerificationRequest.php b/packages/panels/src/Auth/Http/Requests/EmailChangeVerificationRequest.php new file mode 100644 index 00000000000..29315f61ebd --- /dev/null +++ b/packages/panels/src/Auth/Http/Requests/EmailChangeVerificationRequest.php @@ -0,0 +1,49 @@ +has($this->query('signature'))) { + return false; + } + + if (! hash_equals((string) $this->user()->getKey(), (string) $this->route('id'))) { + return false; + } + + try { + return filled(decrypt($this->route('email'))); + } catch (DecryptException) { + return false; + } + } + + /** + * @return array> + */ + public function rules(): array + { + return []; + } + + public function fulfill(): void + { + $this->user()->update([ + 'email' => decrypt($this->route('email')), + ]); + + cache()->forget($this->query('signature')); + } + + public function withValidator(Validator $validator): Validator + { + return $validator; + } +} diff --git a/packages/panels/src/Auth/Http/Responses/BlockEmailChangeVerificationResponse.php b/packages/panels/src/Auth/Http/Responses/BlockEmailChangeVerificationResponse.php new file mode 100644 index 00000000000..e4bcf25826e --- /dev/null +++ b/packages/panels/src/Auth/Http/Responses/BlockEmailChangeVerificationResponse.php @@ -0,0 +1,16 @@ +intended(Filament::getProfileUrl() ?? Filament::getUrl()); + } +} diff --git a/packages/panels/src/Auth/Http/Responses/Contracts/BlockEmailChangeVerificationResponse.php b/packages/panels/src/Auth/Http/Responses/Contracts/BlockEmailChangeVerificationResponse.php new file mode 100644 index 00000000000..1c64a6ef43d --- /dev/null +++ b/packages/panels/src/Auth/Http/Responses/Contracts/BlockEmailChangeVerificationResponse.php @@ -0,0 +1,7 @@ +intended(Filament::getProfileUrl() ?? Filament::getUrl()); + } +} diff --git a/packages/panels/src/Http/Responses/Auth/EmailVerificationResponse.php b/packages/panels/src/Auth/Http/Responses/EmailVerificationResponse.php similarity index 77% rename from packages/panels/src/Http/Responses/Auth/EmailVerificationResponse.php rename to packages/panels/src/Auth/Http/Responses/EmailVerificationResponse.php index 9466ed53550..ae706b9e0a0 100644 --- a/packages/panels/src/Http/Responses/Auth/EmailVerificationResponse.php +++ b/packages/panels/src/Auth/Http/Responses/EmailVerificationResponse.php @@ -1,9 +1,9 @@ */ - public function getManagementFormComponents(): array; + public function getManagementSchemaComponents(): array; /** * @return array diff --git a/packages/panels/src/MultiFactorAuthentication/EmailCode/Actions/RemoveEmailCodeAuthenticationAction.php b/packages/panels/src/Auth/MultiFactor/EmailCode/Actions/RemoveEmailCodeAuthenticationAction.php similarity index 61% rename from packages/panels/src/MultiFactorAuthentication/EmailCode/Actions/RemoveEmailCodeAuthenticationAction.php rename to packages/panels/src/Auth/MultiFactor/EmailCode/Actions/RemoveEmailCodeAuthenticationAction.php index d584b0f8b28..49cf0231255 100644 --- a/packages/panels/src/MultiFactorAuthentication/EmailCode/Actions/RemoveEmailCodeAuthenticationAction.php +++ b/packages/panels/src/Auth/MultiFactor/EmailCode/Actions/RemoveEmailCodeAuthenticationAction.php @@ -1,13 +1,13 @@ label(__('filament-panels::multi-factor-authentication/email-code/actions/remove.label')) + ->label(__('filament-panels::auth/multi-factor/email-code/actions/remove.label')) ->color('danger') ->icon('heroicon-m-lock-open') ->outlined() @@ -29,14 +29,14 @@ public static function make(EmailCodeAuthentication $emailCodeAuthentication): A }) ->modalWidth(MaxWidth::Medium) ->modalIcon('heroicon-o-lock-open') - ->modalHeading(__('filament-panels::multi-factor-authentication/email-code/actions/remove.modal.heading')) - ->modalDescription(__('filament-panels::multi-factor-authentication/email-code/actions/remove.modal.description')) + ->modalHeading(__('filament-panels::auth/multi-factor/email-code/actions/remove.modal.heading')) + ->modalDescription(__('filament-panels::auth/multi-factor/email-code/actions/remove.modal.description')) ->form([ OneTimeCodeInput::make('code') - ->label(__('filament-panels::multi-factor-authentication/email-code/actions/remove.modal.form.code.label')) - ->validationAttribute(__('filament-panels::multi-factor-authentication/email-code/actions/remove.modal.form.code.validation_attribute')) + ->label(__('filament-panels::auth/multi-factor/email-code/actions/remove.modal.form.code.label')) + ->validationAttribute(__('filament-panels::auth/multi-factor/email-code/actions/remove.modal.form.code.validation_attribute')) ->belowContent(Action::make('resend') - ->label(__('filament-panels::multi-factor-authentication/email-code/actions/remove.modal.form.code.actions.resend.label')) + ->label(__('filament-panels::auth/multi-factor/email-code/actions/remove.modal.form.code.actions.resend.label')) ->link() ->action(function () use ($emailCodeAuthentication) { /** @var HasEmailCodeAuthentication $user */ @@ -45,7 +45,7 @@ public static function make(EmailCodeAuthentication $emailCodeAuthentication): A $emailCodeAuthentication->sendCode($user); Notification::make() - ->title(__('filament-panels::multi-factor-authentication/email-code/actions/remove.modal.form.code.actions.resend.notifications.resent.title')) + ->title(__('filament-panels::auth/multi-factor/email-code/actions/remove.modal.form.code.actions.resend.notifications.resent.title')) ->success() ->send(); })) @@ -56,12 +56,12 @@ public static function make(EmailCodeAuthentication $emailCodeAuthentication): A return; } - $fail(__('filament-panels::multi-factor-authentication/email-code/actions/remove.modal.form.code.messages.invalid')); + $fail(__('filament-panels::auth/multi-factor/email-code/actions/remove.modal.form.code.messages.invalid')); }; }), ]) ->modalSubmitAction(fn (Action $action) => $action - ->label(__('filament-panels::multi-factor-authentication/email-code/actions/remove.modal.actions.submit.label'))) + ->label(__('filament-panels::auth/multi-factor/email-code/actions/remove.modal.actions.submit.label'))) ->action(function () use ($emailCodeAuthentication) { /** @var HasEmailCodeAuthentication $user */ $user = Filament::auth()->user(); @@ -71,7 +71,7 @@ public static function make(EmailCodeAuthentication $emailCodeAuthentication): A }); Notification::make() - ->title(__('filament-panels::multi-factor-authentication/email-code/actions/remove.notifications.removed.title')) + ->title(__('filament-panels::auth/multi-factor/email-code/actions/remove.notifications.removed.title')) ->success() ->icon('heroicon-o-lock-open') ->send(); diff --git a/packages/panels/src/MultiFactorAuthentication/EmailCode/Actions/SetUpEmailCodeAuthenticationAction.php b/packages/panels/src/Auth/MultiFactor/EmailCode/Actions/SetUpEmailCodeAuthenticationAction.php similarity index 69% rename from packages/panels/src/MultiFactorAuthentication/EmailCode/Actions/SetUpEmailCodeAuthenticationAction.php rename to packages/panels/src/Auth/MultiFactor/EmailCode/Actions/SetUpEmailCodeAuthenticationAction.php index 6d6a8c8c3ac..7497acbe2a7 100644 --- a/packages/panels/src/MultiFactorAuthentication/EmailCode/Actions/SetUpEmailCodeAuthenticationAction.php +++ b/packages/panels/src/Auth/MultiFactor/EmailCode/Actions/SetUpEmailCodeAuthenticationAction.php @@ -1,14 +1,14 @@ label(__('filament-panels::multi-factor-authentication/email-code/actions/set-up.label')) + ->label(__('filament-panels::auth/multi-factor/email-code/actions/set-up.label')) ->color('primary') ->icon('heroicon-m-lock-closed') ->outlined() @@ -39,13 +39,13 @@ public static function make(EmailCodeAuthentication $emailCodeAuthentication): A ->modalWidth(MaxWidth::Large) ->modalIcon('heroicon-o-lock-closed') ->modalIconColor('primary') - ->modalHeading(__('filament-panels::multi-factor-authentication/email-code/actions/set-up.modal.heading')) - ->modalDescription(__('filament-panels::multi-factor-authentication/email-code/actions/set-up.modal.description')) + ->modalHeading(__('filament-panels::auth/multi-factor/email-code/actions/set-up.modal.heading')) + ->modalDescription(__('filament-panels::auth/multi-factor/email-code/actions/set-up.modal.description')) ->form(fn (array $arguments): array => [ OneTimeCodeInput::make('code') - ->label(__('filament-panels::multi-factor-authentication/email-code/actions/set-up.modal.form.code.label')) + ->label(__('filament-panels::auth/multi-factor/email-code/actions/set-up.modal.form.code.label')) ->belowContent(Action::make('resend') - ->label(__('filament-panels::multi-factor-authentication/email-code/actions/set-up.modal.form.code.actions.resend.label')) + ->label(__('filament-panels::auth/multi-factor/email-code/actions/set-up.modal.form.code.actions.resend.label')) ->link() ->action(function () use ($arguments, $emailCodeAuthentication) { /** @var HasEmailCodeAuthentication $user */ @@ -54,11 +54,11 @@ public static function make(EmailCodeAuthentication $emailCodeAuthentication): A $emailCodeAuthentication->sendCode($user, decrypt($arguments['encrypted'])['secret']); Notification::make() - ->title(__('filament-panels::multi-factor-authentication/email-code/actions/set-up.modal.form.code.actions.resend.notifications.resent.title')) + ->title(__('filament-panels::auth/multi-factor/email-code/actions/set-up.modal.form.code.actions.resend.notifications.resent.title')) ->success() ->send(); })) - ->validationAttribute(__('filament-panels::multi-factor-authentication/email-code/actions/set-up.modal.form.code.validation_attribute')) + ->validationAttribute(__('filament-panels::auth/multi-factor/email-code/actions/set-up.modal.form.code.validation_attribute')) ->required() ->rule(function () use ($arguments, $emailCodeAuthentication): Closure { return function (string $attribute, $value, Closure $fail) use ($arguments, $emailCodeAuthentication): void { @@ -66,12 +66,12 @@ public static function make(EmailCodeAuthentication $emailCodeAuthentication): A return; } - $fail(__('filament-panels::multi-factor-authentication/email-code/actions/set-up.modal.form.code.messages.invalid')); + $fail(__('filament-panels::auth/multi-factor/email-code/actions/set-up.modal.form.code.messages.invalid')); }; }), ]) ->modalSubmitAction(fn (Action $action) => $action - ->label(__('filament-panels::multi-factor-authentication/email-code/actions/set-up.modal.actions.submit.label')) + ->label(__('filament-panels::auth/multi-factor/email-code/actions/set-up.modal.actions.submit.label')) ->color('danger')) ->action(function (array $arguments) use ($emailCodeAuthentication) { /** @var Authenticatable&HasEmailCodeAuthentication $user */ @@ -90,7 +90,7 @@ public static function make(EmailCodeAuthentication $emailCodeAuthentication): A }); Notification::make() - ->title(__('filament-panels::multi-factor-authentication/email-code/actions/set-up.notifications.enabled.title')) + ->title(__('filament-panels::auth/multi-factor/email-code/actions/set-up.notifications.enabled.title')) ->success() ->icon('heroicon-o-lock-closed') ->send(); diff --git a/packages/panels/src/MultiFactorAuthentication/EmailCode/Contracts/HasEmailCodeAuthentication.php b/packages/panels/src/Auth/MultiFactor/EmailCode/Contracts/HasEmailCodeAuthentication.php similarity index 79% rename from packages/panels/src/MultiFactorAuthentication/EmailCode/Contracts/HasEmailCodeAuthentication.php rename to packages/panels/src/Auth/MultiFactor/EmailCode/Contracts/HasEmailCodeAuthentication.php index 82d07f26857..f7605b08b66 100644 --- a/packages/panels/src/MultiFactorAuthentication/EmailCode/Contracts/HasEmailCodeAuthentication.php +++ b/packages/panels/src/Auth/MultiFactor/EmailCode/Contracts/HasEmailCodeAuthentication.php @@ -1,6 +1,6 @@ */ - public function getManagementFormComponents(): array + public function getManagementSchemaComponents(): array { return [ Actions::make($this->getActions()) - ->label(__('filament-panels::multi-factor-authentication/email-code/provider.management_form.actions.label')), + ->label(__('filament-panels::auth/multi-factor/email-code/provider.management_schema.actions.label')), ]; } @@ -147,16 +147,16 @@ public function getChallengeFormComponents(Authenticatable $user): array { return [ OneTimeCodeInput::make('code') - ->label(__('filament-panels::multi-factor-authentication/email-code/provider.login_form.code.label')) + ->label(__('filament-panels::auth/multi-factor/email-code/provider.login_form.code.label')) ->validationAttribute('code') ->belowContent(Action::make('resend') - ->label(__('filament-panels::multi-factor-authentication/email-code/provider.login_form.code.actions.resend.label')) + ->label(__('filament-panels::auth/multi-factor/email-code/provider.login_form.code.actions.resend.label')) ->link() ->action(function () use ($user) { $this->sendCode($user); Notification::make() - ->title(__('filament-panels::multi-factor-authentication/email-code/provider.login_form.code.actions.resend.notifications.resent.title')) + ->title(__('filament-panels::auth/multi-factor/email-code/provider.login_form.code.actions.resend.notifications.resent.title')) ->success() ->send(); })) @@ -167,7 +167,7 @@ public function getChallengeFormComponents(Authenticatable $user): array return; } - $fail(__('filament-panels::multi-factor-authentication/email-code/provider.login_form.code.messages.invalid')); + $fail(__('filament-panels::auth/multi-factor/email-code/provider.login_form.code.messages.invalid')); }; }), ]; diff --git a/packages/panels/src/MultiFactorAuthentication/EmailCode/Notifications/VerifyEmailCodeAuthentication.php b/packages/panels/src/Auth/MultiFactor/EmailCode/Notifications/VerifyEmailCodeAuthentication.php similarity index 57% rename from packages/panels/src/MultiFactorAuthentication/EmailCode/Notifications/VerifyEmailCodeAuthentication.php rename to packages/panels/src/Auth/MultiFactor/EmailCode/Notifications/VerifyEmailCodeAuthentication.php index 291277aa556..2db27e3f90c 100644 --- a/packages/panels/src/MultiFactorAuthentication/EmailCode/Notifications/VerifyEmailCodeAuthentication.php +++ b/packages/panels/src/Auth/MultiFactor/EmailCode/Notifications/VerifyEmailCodeAuthentication.php @@ -1,9 +1,9 @@ codeWindow / 2); return (new MailMessage) - ->subject(__('filament-panels::multi-factor-authentication/email-code/notifications/verify-email-code-authentication.subject')) - ->line(__('filament-panels::multi-factor-authentication/email-code/notifications/verify-email-code-authentication.lines.0', ['code' => $this->code])) - ->line(trans_choice('filament-panels::multi-factor-authentication/email-code/notifications/verify-email-code-authentication.lines.1', $expiryMinutes, ['minutes' => $expiryMinutes])); + ->subject(__('filament-panels::auth/multi-factor/email-code/notifications/verify-email-code-authentication.subject')) + ->line(trans_choice('filament-panels::auth/multi-factor/email-code/notifications/verify-email-code-authentication.lines.0', $expiryMinutes, ['code' => $this->code, 'minutes' => $expiryMinutes])) + ->line(trans_choice('filament-panels::auth/multi-factor/email-code/notifications/verify-email-code-authentication.lines.1', $expiryMinutes, ['code' => $this->code, 'minutes' => $expiryMinutes])); } } diff --git a/packages/panels/src/MultiFactorAuthentication/GoogleTwoFactor/Actions/RegenerateGoogleTwoFactorAuthenticationRecoveryCodesAction.php b/packages/panels/src/Auth/MultiFactor/GoogleTwoFactor/Actions/RegenerateGoogleTwoFactorAuthenticationRecoveryCodesAction.php similarity index 55% rename from packages/panels/src/MultiFactorAuthentication/GoogleTwoFactor/Actions/RegenerateGoogleTwoFactorAuthenticationRecoveryCodesAction.php rename to packages/panels/src/Auth/MultiFactor/GoogleTwoFactor/Actions/RegenerateGoogleTwoFactorAuthenticationRecoveryCodesAction.php index aabe049b4d4..ba63cdaf8c0 100644 --- a/packages/panels/src/MultiFactorAuthentication/GoogleTwoFactor/Actions/RegenerateGoogleTwoFactorAuthenticationRecoveryCodesAction.php +++ b/packages/panels/src/Auth/MultiFactor/GoogleTwoFactor/Actions/RegenerateGoogleTwoFactorAuthenticationRecoveryCodesAction.php @@ -1,15 +1,15 @@ label(__('filament-panels::multi-factor-authentication/google-two-factor/actions/regenerate-recovery-codes.label')) + ->label(__('filament-panels::auth/multi-factor/google-two-factor/actions/regenerate-recovery-codes.label')) ->color('gray') ->icon('heroicon-m-arrow-path') ->outlined() ->modalWidth(MaxWidth::Large) ->modalIcon('heroicon-o-arrow-path') ->modalIconColor('primary') - ->modalHeading(__('filament-panels::multi-factor-authentication/google-two-factor/actions/regenerate-recovery-codes.modal.heading')) - ->modalDescription(__('filament-panels::multi-factor-authentication/google-two-factor/actions/regenerate-recovery-codes.modal.description')) + ->modalHeading(__('filament-panels::auth/multi-factor/google-two-factor/actions/regenerate-recovery-codes.modal.heading')) + ->modalDescription(__('filament-panels::auth/multi-factor/google-two-factor/actions/regenerate-recovery-codes.modal.description')) ->form([ OneTimeCodeInput::make('code') - ->label(__('filament-panels::multi-factor-authentication/google-two-factor/actions/regenerate-recovery-codes.modal.form.code.label')) - ->validationAttribute(__('filament-panels::multi-factor-authentication/google-two-factor/actions/regenerate-recovery-codes.modal.form.code.validation_attribute')) + ->label(__('filament-panels::auth/multi-factor/google-two-factor/actions/regenerate-recovery-codes.modal.form.code.label')) + ->validationAttribute(__('filament-panels::auth/multi-factor/google-two-factor/actions/regenerate-recovery-codes.modal.form.code.validation_attribute')) ->requiredWithout('password') ->rule(function () use ($googleTwoFactorAuthentication): Closure { return function (string $attribute, $value, Closure $fail) use ($googleTwoFactorAuthentication): void { @@ -39,19 +39,19 @@ public static function make(GoogleTwoFactorAuthentication $googleTwoFactorAuthen return; } - $fail(__('filament-panels::multi-factor-authentication/google-two-factor/actions/regenerate-recovery-codes.modal.form.code.messages.invalid')); + $fail(__('filament-panels::auth/multi-factor/google-two-factor/actions/regenerate-recovery-codes.modal.form.code.messages.invalid')); }; }), TextInput::make('password') - ->label(__('filament-panels::multi-factor-authentication/google-two-factor/actions/regenerate-recovery-codes.modal.form.password.label')) - ->validationAttribute(__('filament-panels::multi-factor-authentication/google-two-factor/actions/regenerate-recovery-codes.modal.form.password.validation_attribute')) + ->label(__('filament-panels::auth/multi-factor/google-two-factor/actions/regenerate-recovery-codes.modal.form.password.label')) + ->validationAttribute(__('filament-panels::auth/multi-factor/google-two-factor/actions/regenerate-recovery-codes.modal.form.password.validation_attribute')) ->currentPassword(guard: Filament::getAuthGuard()) ->password() ->revealable(filament()->arePasswordsRevealable()) ->dehydrated(false), ]) ->modalSubmitAction(fn (Action $action) => $action - ->label(__('filament-panels::multi-factor-authentication/google-two-factor/actions/regenerate-recovery-codes.modal.actions.submit.label')) + ->label(__('filament-panels::auth/multi-factor/google-two-factor/actions/regenerate-recovery-codes.modal.actions.submit.label')) ->color('danger')) ->action(function (Action $action, HasActions $livewire) use ($googleTwoFactorAuthentication) { $recoveryCodes = $googleTwoFactorAuthentication->generateRecoveryCodes(); @@ -66,17 +66,17 @@ public static function make(GoogleTwoFactorAuthentication $googleTwoFactorAuthen ]); Notification::make() - ->title(__('filament-panels::multi-factor-authentication/google-two-factor/actions/regenerate-recovery-codes.notifications.regenerated.title')) + ->title(__('filament-panels::auth/multi-factor/google-two-factor/actions/regenerate-recovery-codes.notifications.regenerated.title')) ->success() ->icon('heroicon-o-arrow-path') ->send(); }) ->registerModalActions([ Action::make('showNewRecoveryCodes') - ->modalHeading(__('filament-panels::multi-factor-authentication/google-two-factor/actions/regenerate-recovery-codes.show_new_recovery_codes.modal.heading')) - ->modalDescription(__('filament-panels::multi-factor-authentication/google-two-factor/actions/regenerate-recovery-codes.show_new_recovery_codes.modal.description')) + ->modalHeading(__('filament-panels::auth/multi-factor/google-two-factor/actions/regenerate-recovery-codes.show_new_recovery_codes.modal.heading')) + ->modalDescription(__('filament-panels::auth/multi-factor/google-two-factor/actions/regenerate-recovery-codes.show_new_recovery_codes.modal.description')) ->modalContent(fn (array $arguments): View => view( - 'filament-panels::multi-factor-authentication.recovery-codes-modal-content', + 'filament-panels::auth.multi-factor.recovery-codes-modal-content', $arguments, )) ->modalWidth(MaxWidth::Large) @@ -84,7 +84,7 @@ public static function make(GoogleTwoFactorAuthentication $googleTwoFactorAuthen ->closeModalByEscaping(false) ->modalCloseButton(false) ->modalSubmitAction(fn (Action $action) => $action - ->label(__('filament-panels::multi-factor-authentication/google-two-factor/actions/regenerate-recovery-codes.show_new_recovery_codes.modal.actions.submit.label')) + ->label(__('filament-panels::auth/multi-factor/google-two-factor/actions/regenerate-recovery-codes.show_new_recovery_codes.modal.actions.submit.label')) ->color('danger')) ->modalCancelAction(false) ->cancelParentActions(), diff --git a/packages/panels/src/MultiFactorAuthentication/GoogleTwoFactor/Actions/RemoveGoogleTwoFactorAuthenticationAction.php b/packages/panels/src/Auth/MultiFactor/GoogleTwoFactor/Actions/RemoveGoogleTwoFactorAuthenticationAction.php similarity index 62% rename from packages/panels/src/MultiFactorAuthentication/GoogleTwoFactor/Actions/RemoveGoogleTwoFactorAuthenticationAction.php rename to packages/panels/src/Auth/MultiFactor/GoogleTwoFactor/Actions/RemoveGoogleTwoFactorAuthenticationAction.php index 2bf622df888..e6bef3bd307 100644 --- a/packages/panels/src/MultiFactorAuthentication/GoogleTwoFactor/Actions/RemoveGoogleTwoFactorAuthenticationAction.php +++ b/packages/panels/src/Auth/MultiFactor/GoogleTwoFactor/Actions/RemoveGoogleTwoFactorAuthenticationAction.php @@ -1,15 +1,15 @@ isRecoverable(); return Action::make('removeGoogleTwoFactorAuthentication') - ->label(__('filament-panels::multi-factor-authentication/google-two-factor/actions/remove.label')) + ->label(__('filament-panels::auth/multi-factor/google-two-factor/actions/remove.label')) ->color('danger') ->icon('heroicon-m-lock-open') ->outlined() ->modalWidth(MaxWidth::Medium) ->modalIcon('heroicon-o-lock-open') - ->modalHeading(__('filament-panels::multi-factor-authentication/google-two-factor/actions/remove.modal.heading')) - ->modalDescription(__('filament-panels::multi-factor-authentication/google-two-factor/actions/remove.modal.description')) + ->modalHeading(__('filament-panels::auth/multi-factor/google-two-factor/actions/remove.modal.heading')) + ->modalDescription(__('filament-panels::auth/multi-factor/google-two-factor/actions/remove.modal.description')) ->form([ OneTimeCodeInput::make('code') - ->label(__('filament-panels::multi-factor-authentication/google-two-factor/actions/remove.modal.form.code.label')) + ->label(__('filament-panels::auth/multi-factor/google-two-factor/actions/remove.modal.form.code.label')) ->belowContent(fn (Get $get): Action => Action::make('useRecoveryCode') - ->label(__('filament-panels::multi-factor-authentication/google-two-factor/actions/remove.modal.form.code.actions.use_recovery_code.label')) + ->label(__('filament-panels::auth/multi-factor/google-two-factor/actions/remove.modal.form.code.actions.use_recovery_code.label')) ->link() ->action(fn (Set $set) => $set('useRecoveryCode', true)) ->visible(fn (): bool => $isRecoverable && (! $get('useRecoveryCode')))) - ->validationAttribute(__('filament-panels::multi-factor-authentication/google-two-factor/actions/remove.modal.form.code.validation_attribute')) + ->validationAttribute(__('filament-panels::auth/multi-factor/google-two-factor/actions/remove.modal.form.code.validation_attribute')) ->required(fn (Get $get): bool => (! $isRecoverable) || blank($get('recoveryCode'))) ->rule(function () use ($googleTwoFactorAuthentication): Closure { return function (string $attribute, mixed $value, Closure $fail) use ($googleTwoFactorAuthentication): void { @@ -47,12 +47,12 @@ public static function make(GoogleTwoFactorAuthentication $googleTwoFactorAuthen return; } - $fail(__('filament-panels::multi-factor-authentication/google-two-factor/actions/remove.modal.form.code.messages.invalid')); + $fail(__('filament-panels::auth/multi-factor/google-two-factor/actions/remove.modal.form.code.messages.invalid')); }; }), TextInput::make('recoveryCode') - ->label(__('filament-panels::multi-factor-authentication/google-two-factor/actions/remove.modal.form.recovery_code.label')) - ->validationAttribute(__('filament-panels::multi-factor-authentication/google-two-factor/actions/remove.modal.form.recovery_code.validation_attribute')) + ->label(__('filament-panels::auth/multi-factor/google-two-factor/actions/remove.modal.form.recovery_code.label')) + ->validationAttribute(__('filament-panels::auth/multi-factor/google-two-factor/actions/remove.modal.form.recovery_code.validation_attribute')) ->password() ->revealable(Filament::arePasswordsRevealable()) ->rule(function () use ($googleTwoFactorAuthentication): Closure { @@ -65,14 +65,14 @@ public static function make(GoogleTwoFactorAuthentication $googleTwoFactorAuthen return; } - $fail(__('filament-panels::multi-factor-authentication/google-two-factor/actions/remove.modal.form.recovery_code.messages.invalid')); + $fail(__('filament-panels::auth/multi-factor/google-two-factor/actions/remove.modal.form.recovery_code.messages.invalid')); }; }) ->visible(fn (Get $get): bool => $isRecoverable && $get('useRecoveryCode')) ->live(onBlur: true), ]) ->modalSubmitAction(fn (Action $action) => $action - ->label(__('filament-panels::multi-factor-authentication/google-two-factor/actions/remove.modal.actions.submit.label'))) + ->label(__('filament-panels::auth/multi-factor/google-two-factor/actions/remove.modal.actions.submit.label'))) ->action(function () use ($googleTwoFactorAuthentication, $isRecoverable) { /** @var HasGoogleTwoFactorAuthentication&HasGoogleTwoFactorAuthenticationRecovery $user */ $user = Filament::auth()->user(); @@ -86,7 +86,7 @@ public static function make(GoogleTwoFactorAuthentication $googleTwoFactorAuthen }); Notification::make() - ->title(__('filament-panels::multi-factor-authentication/google-two-factor/actions/remove.notifications.removed.title')) + ->title(__('filament-panels::auth/multi-factor/google-two-factor/actions/remove.notifications.removed.title')) ->success() ->icon('heroicon-o-lock-open') ->send(); diff --git a/packages/panels/src/MultiFactorAuthentication/GoogleTwoFactor/Actions/SetUpGoogleTwoFactorAuthenticationAction.php b/packages/panels/src/Auth/MultiFactor/GoogleTwoFactor/Actions/SetUpGoogleTwoFactorAuthenticationAction.php similarity index 70% rename from packages/panels/src/MultiFactorAuthentication/GoogleTwoFactor/Actions/SetUpGoogleTwoFactorAuthenticationAction.php rename to packages/panels/src/Auth/MultiFactor/GoogleTwoFactor/Actions/SetUpGoogleTwoFactorAuthenticationAction.php index 8422349728c..1db5db4a20e 100644 --- a/packages/panels/src/MultiFactorAuthentication/GoogleTwoFactor/Actions/SetUpGoogleTwoFactorAuthenticationAction.php +++ b/packages/panels/src/Auth/MultiFactor/GoogleTwoFactor/Actions/SetUpGoogleTwoFactorAuthenticationAction.php @@ -1,15 +1,15 @@ label(__('filament-panels::multi-factor-authentication/google-two-factor/actions/set-up.label')) + ->label(__('filament-panels::auth/multi-factor/google-two-factor/actions/set-up.label')) ->color('primary') ->icon('heroicon-m-lock-closed') ->outlined() @@ -41,10 +41,10 @@ public static function make(GoogleTwoFactorAuthentication $googleTwoFactorAuthen ->modalWidth(MaxWidth::Large) ->modalIcon('heroicon-o-lock-closed') ->modalIconColor('primary') - ->modalHeading(__('filament-panels::multi-factor-authentication/google-two-factor/actions/set-up.modal.heading')) - ->modalDescription(new HtmlString(Blade::render(__('filament-panels::multi-factor-authentication/google-two-factor/actions/set-up.modal.description')))) + ->modalHeading(__('filament-panels::auth/multi-factor/google-two-factor/actions/set-up.modal.heading')) + ->modalDescription(new HtmlString(Blade::render(__('filament-panels::auth/multi-factor/google-two-factor/actions/set-up.modal.description')))) ->modalContent(fn (array $arguments): View => view( - 'filament-panels::multi-factor-authentication.google-two-factor.set-up-modal-content', + 'filament-panels::auth.multi-factor.google-two-factor.set-up-modal-content', [ ...$encrypted = decrypt($arguments['encrypted']), 'isRecoverable' => $googleTwoFactorAuthentication->isRecoverable(), @@ -53,9 +53,9 @@ public static function make(GoogleTwoFactorAuthentication $googleTwoFactorAuthen )) ->form(fn (array $arguments): array => [ OneTimeCodeInput::make('code') - ->label(__('filament-panels::multi-factor-authentication/google-two-factor/actions/set-up.modal.form.code.label')) - ->belowContent(__('filament-panels::multi-factor-authentication/google-two-factor/actions/set-up.modal.form.code.below_content')) - ->validationAttribute(__('filament-panels::multi-factor-authentication/google-two-factor/actions/set-up.modal.form.code.validation_attribute')) + ->label(__('filament-panels::auth/multi-factor/google-two-factor/actions/set-up.modal.form.code.label')) + ->belowContent(__('filament-panels::auth/multi-factor/google-two-factor/actions/set-up.modal.form.code.below_content')) + ->validationAttribute(__('filament-panels::auth/multi-factor/google-two-factor/actions/set-up.modal.form.code.validation_attribute')) ->required() ->rule(function () use ($arguments, $googleTwoFactorAuthentication): Closure { return function (string $attribute, $value, Closure $fail) use ($arguments, $googleTwoFactorAuthentication): void { @@ -63,12 +63,12 @@ public static function make(GoogleTwoFactorAuthentication $googleTwoFactorAuthen return; } - $fail(__('filament-panels::multi-factor-authentication/google-two-factor/actions/set-up.modal.form.code.messages.invalid')); + $fail(__('filament-panels::auth/multi-factor/google-two-factor/actions/set-up.modal.form.code.messages.invalid')); }; }), ]) ->modalSubmitAction(fn (Action $action) => $action - ->label(__('filament-panels::multi-factor-authentication/google-two-factor/actions/set-up.modal.actions.submit.label')) + ->label(__('filament-panels::auth/multi-factor/google-two-factor/actions/set-up.modal.actions.submit.label')) ->color('danger')) ->action(function (array $arguments) use ($googleTwoFactorAuthentication) { /** @var Authenticatable&HasGoogleTwoFactorAuthentication&HasGoogleTwoFactorAuthenticationRecovery $user */ @@ -91,7 +91,7 @@ public static function make(GoogleTwoFactorAuthentication $googleTwoFactorAuthen }); Notification::make() - ->title(__('filament-panels::multi-factor-authentication/google-two-factor/actions/set-up.notifications.enabled.title')) + ->title(__('filament-panels::auth/multi-factor/google-two-factor/actions/set-up.notifications.enabled.title')) ->success() ->icon('heroicon-o-lock-closed') ->send(); diff --git a/packages/panels/src/MultiFactorAuthentication/GoogleTwoFactor/Contracts/HasGoogleTwoFactorAuthentication.php b/packages/panels/src/Auth/MultiFactor/GoogleTwoFactor/Contracts/HasGoogleTwoFactorAuthentication.php similarity index 82% rename from packages/panels/src/MultiFactorAuthentication/GoogleTwoFactor/Contracts/HasGoogleTwoFactorAuthentication.php rename to packages/panels/src/Auth/MultiFactor/GoogleTwoFactor/Contracts/HasGoogleTwoFactorAuthentication.php index 3354c6e47e1..f2393eb7a46 100644 --- a/packages/panels/src/MultiFactorAuthentication/GoogleTwoFactor/Contracts/HasGoogleTwoFactorAuthentication.php +++ b/packages/panels/src/Auth/MultiFactor/GoogleTwoFactor/Contracts/HasGoogleTwoFactorAuthentication.php @@ -1,6 +1,6 @@ */ - public function getManagementFormComponents(): array + public function getManagementSchemaComponents(): array { return [ Actions::make($this->getActions()) - ->label(__('filament-panels::multi-factor-authentication/google-two-factor/provider.management_form.actions.label')), + ->label(__('filament-panels::auth/multi-factor/google-two-factor/provider.management_schema.actions.label')), ]; } @@ -250,13 +250,13 @@ public function getChallengeFormComponents(Authenticatable $user): array return [ OneTimeCodeInput::make('code') - ->label(__('filament-panels::multi-factor-authentication/google-two-factor/provider.login_form.code.label')) + ->label(__('filament-panels::auth/multi-factor/google-two-factor/provider.login_form.code.label')) ->belowContent(fn (Get $get): Action => Action::make('useRecoveryCode') - ->label(__('filament-panels::multi-factor-authentication/google-two-factor/provider.login_form.code.actions.use_recovery_code.label')) + ->label(__('filament-panels::auth/multi-factor/google-two-factor/provider.login_form.code.actions.use_recovery_code.label')) ->link() ->action(fn (Set $set) => $set('useRecoveryCode', true)) ->visible(fn (): bool => $isRecoverable && (! $get('useRecoveryCode')))) - ->validationAttribute(__('filament-panels::multi-factor-authentication/google-two-factor/provider.login_form.code.validation_attribute')) + ->validationAttribute(__('filament-panels::auth/multi-factor/google-two-factor/provider.login_form.code.validation_attribute')) ->required(fn (Get $get): bool => (! $isRecoverable) || blank($get('recoveryCode'))) ->rule(function () use ($user): Closure { return function (string $attribute, $value, Closure $fail) use ($user): void { @@ -264,12 +264,12 @@ public function getChallengeFormComponents(Authenticatable $user): array return; } - $fail(__('filament-panels::multi-factor-authentication/google-two-factor/provider.login_form.code.messages.invalid')); + $fail(__('filament-panels::auth/multi-factor/google-two-factor/provider.login_form.code.messages.invalid')); }; }), TextInput::make('recoveryCode') - ->label(__('filament-panels::multi-factor-authentication/google-two-factor/provider.login_form.recovery_code.label')) - ->validationAttribute(__('filament-panels::multi-factor-authentication/google-two-factor/provider.login_form.recovery_code.validation_attribute')) + ->label(__('filament-panels::auth/multi-factor/google-two-factor/provider.login_form.recovery_code.label')) + ->validationAttribute(__('filament-panels::auth/multi-factor/google-two-factor/provider.login_form.recovery_code.validation_attribute')) ->password() ->revealable(Filament::arePasswordsRevealable()) ->rule(function () use ($user): Closure { @@ -282,7 +282,7 @@ public function getChallengeFormComponents(Authenticatable $user): array return; } - $fail(__('filament-panels::multi-factor-authentication/google-two-factor/provider.login_form.recovery_code.messages.invalid')); + $fail(__('filament-panels::auth/multi-factor/google-two-factor/provider.login_form.recovery_code.messages.invalid')); }; }) ->visible(fn (Get $get): bool => $isRecoverable && $get('useRecoveryCode')) diff --git a/packages/panels/src/Auth/Notifications/NoticeOfEmailChangeRequest.php b/packages/panels/src/Auth/Notifications/NoticeOfEmailChangeRequest.php new file mode 100644 index 00000000000..33d354ae2c9 --- /dev/null +++ b/packages/panels/src/Auth/Notifications/NoticeOfEmailChangeRequest.php @@ -0,0 +1,37 @@ + + */ + public function via(object $notifiable): array + { + return ['mail']; + } + + public function toMail(object $notifiable): MailMessage + { + return (new MailMessage) + ->subject(__('filament-panels::auth/notifications/notice-of-email-change-request.subject')) + ->line(__('filament-panels::auth/notifications/notice-of-email-change-request.lines.0', ['email' => $this->newEmail])) + ->line(__('filament-panels::auth/notifications/notice-of-email-change-request.lines.1', ['email' => $this->newEmail])) + ->line(__('filament-panels::auth/notifications/notice-of-email-change-request.lines.2', ['email' => $this->newEmail])) + ->line(__('filament-panels::auth/notifications/notice-of-email-change-request.lines.3', ['email' => $this->newEmail])) + ->action(__('filament-panels::auth/notifications/notice-of-email-change-request.action'), $this->blockVerificationUrl); + } +} diff --git a/packages/panels/src/Notifications/Auth/ResetPassword.php b/packages/panels/src/Auth/Notifications/ResetPassword.php similarity index 90% rename from packages/panels/src/Notifications/Auth/ResetPassword.php rename to packages/panels/src/Auth/Notifications/ResetPassword.php index 2a985720209..8b140a7f396 100644 --- a/packages/panels/src/Notifications/Auth/ResetPassword.php +++ b/packages/panels/src/Auth/Notifications/ResetPassword.php @@ -1,6 +1,6 @@ sendEmailChangeVerification($record, $data['email']); + + unset($data['email']); + } + $record->update($data); return $record; } - protected function getSavedNotification(): ?Notification + protected function sendEmailChangeVerification(Model $record, string $newEmail): void + { + if ($record->getAttributeValue('email') === $newEmail) { + return; + } + + $notification = app(VerifyEmailChange::class); + $notification->url = Filament::getVerifyEmailChangeUrl($record, $newEmail); + + $verificationSignature = Query::new($notification->url)->get('signature'); + + cache()->put($verificationSignature, true, ttl: now()->addHour()); + + $record->notify(app(NoticeOfEmailChangeRequest::class, [/** @phpstan-ignore-line */ + 'blockVerificationUrl' => Filament::getBlockEmailChangeVerificationUrl($record, $newEmail, $verificationSignature), + 'newEmail' => $newEmail, + ])); + + Notification::route('mail', $newEmail) + ->notify($notification); + + $this->getEmailChangeVerificationSentNotification($newEmail)?->send(); + + $this->data['email'] = $record->getAttributeValue('email'); + } + + protected function getSavedNotification(): ?FilamentNotification { $title = $this->getSavedNotificationTitle(); @@ -214,14 +250,22 @@ protected function getSavedNotification(): ?Notification return null; } - return Notification::make() + return FilamentNotification::make() ->success() ->title($this->getSavedNotificationTitle()); } + protected function getEmailChangeVerificationSentNotification(string $newEmail): ?FilamentNotification + { + return FilamentNotification::make() + ->success() + ->title(__('filament-panels::auth/pages/edit-profile.notifications.email_change_verification_sent.title', ['email' => $newEmail])) + ->body(__('filament-panels::auth/pages/edit-profile.notifications.email_change_verification_sent.body', ['email' => $newEmail])); + } + protected function getSavedNotificationTitle(): ?string { - return __('filament-panels::pages/auth/edit-profile.notifications.saved.title'); + return __('filament-panels::auth/pages/edit-profile.notifications.saved.title'); } protected function getRedirectUrl(): ?string @@ -232,7 +276,7 @@ protected function getRedirectUrl(): ?string protected function getNameFormComponent(): Component { return TextInput::make('name') - ->label(__('filament-panels::pages/auth/edit-profile.form.name.label')) + ->label(__('filament-panels::auth/pages/edit-profile.form.name.label')) ->required() ->maxLength(255) ->autofocus(); @@ -241,17 +285,19 @@ protected function getNameFormComponent(): Component protected function getEmailFormComponent(): Component { return TextInput::make('email') - ->label(__('filament-panels::pages/auth/edit-profile.form.email.label')) + ->label(__('filament-panels::auth/pages/edit-profile.form.email.label')) ->email() ->required() ->maxLength(255) - ->unique(ignoreRecord: true); + ->unique(ignoreRecord: true) + ->live(debounce: 500); } protected function getPasswordFormComponent(): Component { return TextInput::make('password') - ->label(__('filament-panels::pages/auth/edit-profile.form.password.label')) + ->label(__('filament-panels::auth/pages/edit-profile.form.password.label')) + ->validationAttribute(__('filament-panels::auth/pages/edit-profile.form.password.validation_attribute')) ->password() ->revealable(filament()->arePasswordsRevealable()) ->rule(Password::default()) @@ -265,7 +311,8 @@ protected function getPasswordFormComponent(): Component protected function getPasswordConfirmationFormComponent(): Component { return TextInput::make('passwordConfirmation') - ->label(__('filament-panels::pages/auth/edit-profile.form.password_confirmation.label')) + ->label(__('filament-panels::auth/pages/edit-profile.form.password_confirmation.label')) + ->validationAttribute(__('filament-panels::auth/pages/edit-profile.form.password_confirmation.validation_attribute')) ->password() ->revealable(filament()->arePasswordsRevealable()) ->required() @@ -276,12 +323,14 @@ protected function getPasswordConfirmationFormComponent(): Component protected function getCurrentPasswordFormComponent(): Component { return TextInput::make('currentPassword') - ->label(__('filament-panels::pages/auth/edit-profile.form.current_password.label')) + ->label(__('filament-panels::auth/pages/edit-profile.form.current_password.label')) + ->validationAttribute(__('filament-panels::auth/pages/edit-profile.form.current_password.validation_attribute')) + ->belowContent(__('filament-panels::auth/pages/edit-profile.form.current_password.below_content')) ->password() ->currentPassword(guard: Filament::getAuthGuard()) ->revealable(filament()->arePasswordsRevealable()) ->required() - ->visible(fn (Get $get): bool => filled($get('password'))) + ->visible(fn (Get $get): bool => filled($get('password')) || ($get('email') !== $this->getUser()->getAttributeValue('email'))) ->dehydrated(false); } @@ -304,7 +353,6 @@ protected function getForms(): array $this->getPasswordFormComponent(), $this->getPasswordConfirmationFormComponent(), $this->getCurrentPasswordFormComponent(), - ...$this->getMultiFactorAuthenticationFormComponents(), ]) ->operation('edit') ->model($this->getUser()) @@ -333,7 +381,7 @@ protected function getCancelFormAction(): Action protected function getSaveFormAction(): Action { return Action::make('save') - ->label(__('filament-panels::pages/auth/edit-profile.form.actions.save.label')) + ->label(__('filament-panels::auth/pages/edit-profile.form.actions.save.label')) ->submit('save') ->keyBindings(['mod+s']); } @@ -371,7 +419,7 @@ public function backAction(): Action $url = filament()->getUrl(); return Action::make('back') - ->label(__('filament-panels::pages/auth/edit-profile.actions.cancel.label')) + ->label(__('filament-panels::auth/pages/edit-profile.actions.cancel.label')) ->alpineClickHandler( FilamentView::hasSpaMode($url) ? 'document.referrer ? window.history.back() : Livewire.navigate(' . Js::from($url) . ')' @@ -393,6 +441,7 @@ public function content(Schema $schema): Schema return $schema ->components([ $this->getFormContentComponent(), + ...$this->getMultiFactorAuthenticationContentComponents(), ]); } @@ -410,7 +459,7 @@ public function getFormContentComponent(): Component /** * @return array */ - public function getMultiFactorAuthenticationFormComponents(): array + public function getMultiFactorAuthenticationContentComponents(): array { $providers = Filament::getMultiFactorAuthenticationProviders(); @@ -422,7 +471,7 @@ public function getMultiFactorAuthenticationFormComponents(): array return collect($providers) ->sort(fn (MultiFactorAuthenticationProvider $multiFactorAuthenticationProvider): int => $multiFactorAuthenticationProvider->isEnabled($user) ? 0 : 1) - ->map(fn (MultiFactorAuthenticationProvider $multiFactorAuthenticationProvider): Component => Group::make($multiFactorAuthenticationProvider->getManagementFormComponents()) + ->map(fn (MultiFactorAuthenticationProvider $multiFactorAuthenticationProvider): Component => Group::make($multiFactorAuthenticationProvider->getManagementSchemaComponents()) ->statePath($multiFactorAuthenticationProvider->getId())) ->all(); } diff --git a/packages/panels/src/Pages/Auth/EmailVerification/EmailVerificationPrompt.php b/packages/panels/src/Auth/Pages/EmailVerification/EmailVerificationPrompt.php similarity index 82% rename from packages/panels/src/Pages/Auth/EmailVerification/EmailVerificationPrompt.php rename to packages/panels/src/Auth/Pages/EmailVerification/EmailVerificationPrompt.php index 01d167cceff..be8948dea43 100644 --- a/packages/panels/src/Pages/Auth/EmailVerification/EmailVerificationPrompt.php +++ b/packages/panels/src/Auth/Pages/EmailVerification/EmailVerificationPrompt.php @@ -1,14 +1,15 @@ link() - ->label(__('filament-panels::pages/auth/email-verification/email-verification-prompt.actions.resend_notification.label') . '.') + ->label(__('filament-panels::auth/pages/email-verification/email-verification-prompt.actions.resend_notification.label') . '.') ->action(function (): void { try { $this->rateLimit(2); @@ -76,7 +77,7 @@ public function resendNotificationAction(): Action $this->sendEmailVerificationNotification($this->getVerifiable()); Notification::make() - ->title(__('filament-panels::pages/auth/email-verification/email-verification-prompt.notifications.notification_resent.title')) + ->title(__('filament-panels::auth/pages/email-verification/email-verification-prompt.notifications.notification_resent.title')) ->success() ->send(); }); @@ -85,11 +86,11 @@ public function resendNotificationAction(): Action protected function getRateLimitedNotification(TooManyRequestsException $exception): ?Notification { return Notification::make() - ->title(__('filament-panels::pages/auth/email-verification/email-verification-prompt.notifications.notification_resend_throttled.title', [ + ->title(__('filament-panels::auth/pages/email-verification/email-verification-prompt.notifications.notification_resend_throttled.title', [ 'seconds' => $exception->secondsUntilAvailable, 'minutes' => $exception->minutesUntilAvailable, ])) - ->body(array_key_exists('body', __('filament-panels::pages/auth/email-verification/email-verification-prompt.notifications.notification_resend_throttled') ?: []) ? __('filament-panels::pages/auth/email-verification/email-verification-prompt.notifications.notification_resend_throttled.body', [ + ->body(array_key_exists('body', __('filament-panels::auth/pages/email-verification/email-verification-prompt.notifications.notification_resend_throttled') ?: []) ? __('filament-panels::auth/pages/email-verification/email-verification-prompt.notifications.notification_resend_throttled.body', [ 'seconds' => $exception->secondsUntilAvailable, 'minutes' => $exception->minutesUntilAvailable, ]) : null) @@ -98,11 +99,11 @@ protected function getRateLimitedNotification(TooManyRequestsException $exceptio public function getTitle(): string | Htmlable { - return __('filament-panels::pages/auth/email-verification/email-verification-prompt.title'); + return __('filament-panels::auth/pages/email-verification/email-verification-prompt.title'); } public function getHeading(): string | Htmlable { - return __('filament-panels::pages/auth/email-verification/email-verification-prompt.heading'); + return __('filament-panels::auth/pages/email-verification/email-verification-prompt.heading'); } } diff --git a/packages/panels/src/Pages/Auth/Login.php b/packages/panels/src/Auth/Pages/Login.php similarity index 89% rename from packages/panels/src/Pages/Auth/Login.php rename to packages/panels/src/Auth/Pages/Login.php index 24594233b47..a07f7965277 100644 --- a/packages/panels/src/Pages/Auth/Login.php +++ b/packages/panels/src/Auth/Pages/Login.php @@ -1,18 +1,18 @@ title(__('filament-panels::pages/auth/login.notifications.throttled.title', [ + ->title(__('filament-panels::auth/pages/login.notifications.throttled.title', [ 'seconds' => $exception->secondsUntilAvailable, 'minutes' => $exception->minutesUntilAvailable, ])) - ->body(array_key_exists('body', __('filament-panels::pages/auth/login.notifications.throttled') ?: []) ? __('filament-panels::pages/auth/login.notifications.throttled.body', [ + ->body(array_key_exists('body', __('filament-panels::auth/pages/login.notifications.throttled') ?: []) ? __('filament-panels::auth/pages/login.notifications.throttled.body', [ 'seconds' => $exception->secondsUntilAvailable, 'minutes' => $exception->minutesUntilAvailable, ]) : null) @@ -141,7 +141,7 @@ protected function getRateLimitedNotification(TooManyRequestsException $exceptio protected function throwFailureValidationException(): never { throw ValidationException::withMessages([ - 'data.email' => __('filament-panels::pages/auth/login.messages.failed'), + 'data.email' => __('filament-panels::auth/pages/login.messages.failed'), ]); } @@ -194,7 +194,7 @@ protected function getForms(): array protected function getEmailFormComponent(): Component { return TextInput::make('email') - ->label(__('filament-panels::pages/auth/login.form.email.label')) + ->label(__('filament-panels::auth/pages/login.form.email.label')) ->email() ->required() ->autocomplete() @@ -205,8 +205,8 @@ protected function getEmailFormComponent(): Component protected function getPasswordFormComponent(): Component { return TextInput::make('password') - ->label(__('filament-panels::pages/auth/login.form.password.label')) - ->hint(filament()->hasPasswordReset() ? new HtmlString(Blade::render(' {{ __(\'filament-panels::pages/auth/login.actions.request_password_reset.label\') }}')) : null) + ->label(__('filament-panels::auth/pages/login.form.password.label')) + ->hint(filament()->hasPasswordReset() ? new HtmlString(Blade::render(' {{ __(\'filament-panels::auth/pages/login.actions.request_password_reset.label\') }}')) : null) ->password() ->revealable(filament()->arePasswordsRevealable()) ->autocomplete('current-password') @@ -217,29 +217,29 @@ protected function getPasswordFormComponent(): Component protected function getRememberFormComponent(): Component { return Checkbox::make('remember') - ->label(__('filament-panels::pages/auth/login.form.remember.label')); + ->label(__('filament-panels::auth/pages/login.form.remember.label')); } public function registerAction(): Action { return Action::make('register') ->link() - ->label(__('filament-panels::pages/auth/login.actions.register.label')) + ->label(__('filament-panels::auth/pages/login.actions.register.label')) ->url(filament()->getRegistrationUrl()); } public function getTitle(): string | Htmlable { - return __('filament-panels::pages/auth/login.title'); + return __('filament-panels::auth/pages/login.title'); } public function getHeading(): string | Htmlable { if (filled($this->userUndertakingMultiFactorAuthentication)) { - return __('filament-panels::pages/auth/login.multi_factor_heading'); + return __('filament-panels::auth/pages/login.multi_factor_heading'); } - return __('filament-panels::pages/auth/login.heading'); + return __('filament-panels::auth/pages/login.heading'); } /** @@ -255,7 +255,7 @@ protected function getFormActions(): array protected function getAuthenticateFormAction(): Action { return Action::make('authenticate') - ->label(__('filament-panels::pages/auth/login.form.actions.authenticate.label')) + ->label(__('filament-panels::auth/pages/login.form.actions.authenticate.label')) ->submit('authenticate'); } @@ -272,7 +272,7 @@ protected function getMultiFactorChallengeFormActions(): array protected function getMultiFactorAuthenticateFormAction(): Action { return Action::make('authenticate') - ->label(__('filament-panels::pages/auth/login.multi_factor_form.actions.authenticate.label')) + ->label(__('filament-panels::auth/pages/login.multi_factor_form.actions.authenticate.label')) ->submit('authenticate'); } @@ -308,7 +308,7 @@ public function getSubheading(): string | Htmlable | null return null; } - return new HtmlString(__('filament-panels::pages/auth/login.actions.register.before') . ' ' . $this->registerAction->toHtml()); + return new HtmlString(__('filament-panels::auth/pages/login.actions.register.before') . ' ' . $this->registerAction->toHtml()); } public function content(Schema $schema): Schema diff --git a/packages/panels/src/Pages/Auth/PasswordReset/RequestPasswordReset.php b/packages/panels/src/Auth/Pages/PasswordReset/RequestPasswordReset.php similarity index 90% rename from packages/panels/src/Pages/Auth/PasswordReset/RequestPasswordReset.php rename to packages/panels/src/Auth/Pages/PasswordReset/RequestPasswordReset.php index f1d64aece84..e59ae944ef0 100644 --- a/packages/panels/src/Pages/Auth/PasswordReset/RequestPasswordReset.php +++ b/packages/panels/src/Auth/Pages/PasswordReset/RequestPasswordReset.php @@ -1,15 +1,15 @@ title(__('filament-panels::pages/auth/password-reset/request-password-reset.notifications.throttled.title', [ + ->title(__('filament-panels::auth/pages/password-reset/request-password-reset.notifications.throttled.title', [ 'seconds' => $exception->secondsUntilAvailable, 'minutes' => $exception->minutesUntilAvailable, ])) - ->body(array_key_exists('body', __('filament-panels::pages/auth/password-reset/request-password-reset.notifications.throttled') ?: []) ? __('filament-panels::pages/auth/password-reset/request-password-reset.notifications.throttled.body', [ + ->body(array_key_exists('body', __('filament-panels::auth/pages/password-reset/request-password-reset.notifications.throttled') ?: []) ? __('filament-panels::auth/pages/password-reset/request-password-reset.notifications.throttled.body', [ 'seconds' => $exception->secondsUntilAvailable, 'minutes' => $exception->minutesUntilAvailable, ]) : null) @@ -129,7 +129,7 @@ protected function getForms(): array protected function getEmailFormComponent(): Component { return TextInput::make('email') - ->label(__('filament-panels::pages/auth/password-reset/request-password-reset.form.email.label')) + ->label(__('filament-panels::auth/pages/password-reset/request-password-reset.form.email.label')) ->email() ->required() ->autocomplete() @@ -140,7 +140,7 @@ public function loginAction(): Action { return Action::make('login') ->link() - ->label(__('filament-panels::pages/auth/password-reset/request-password-reset.actions.login.label')) + ->label(__('filament-panels::auth/pages/password-reset/request-password-reset.actions.login.label')) ->icon(match (__('filament-panels::layout.direction')) { 'rtl' => FilamentIcon::resolve('panels::pages.password-reset.request-password-reset.actions.login.rtl') ?? 'heroicon-m-arrow-right', default => FilamentIcon::resolve('panels::pages.password-reset.request-password-reset.actions.login') ?? 'heroicon-m-arrow-left', @@ -150,12 +150,12 @@ public function loginAction(): Action public function getTitle(): string | Htmlable { - return __('filament-panels::pages/auth/password-reset/request-password-reset.title'); + return __('filament-panels::auth/pages/password-reset/request-password-reset.title'); } public function getHeading(): string | Htmlable { - return __('filament-panels::pages/auth/password-reset/request-password-reset.heading'); + return __('filament-panels::auth/pages/password-reset/request-password-reset.heading'); } /** @@ -171,7 +171,7 @@ protected function getFormActions(): array protected function getRequestFormAction(): Action { return Action::make('request') - ->label(__('filament-panels::pages/auth/password-reset/request-password-reset.form.actions.request.label')) + ->label(__('filament-panels::auth/pages/password-reset/request-password-reset.form.actions.request.label')) ->submit('request'); } diff --git a/packages/panels/src/Pages/Auth/PasswordReset/ResetPassword.php b/packages/panels/src/Auth/Pages/PasswordReset/ResetPassword.php similarity index 88% rename from packages/panels/src/Pages/Auth/PasswordReset/ResetPassword.php rename to packages/panels/src/Auth/Pages/PasswordReset/ResetPassword.php index c08bec5bd3a..4e62e812021 100644 --- a/packages/panels/src/Pages/Auth/PasswordReset/ResetPassword.php +++ b/packages/panels/src/Auth/Pages/PasswordReset/ResetPassword.php @@ -1,14 +1,14 @@ title(__('filament-panels::pages/auth/password-reset/reset-password.notifications.throttled.title', [ + ->title(__('filament-panels::auth/pages/password-reset/reset-password.notifications.throttled.title', [ 'seconds' => $exception->secondsUntilAvailable, 'minutes' => $exception->minutesUntilAvailable, ])) - ->body(array_key_exists('body', __('filament-panels::pages/auth/password-reset/reset-password.notifications.throttled') ?: []) ? __('filament-panels::pages/auth/password-reset/reset-password.notifications.throttled.body', [ + ->body(array_key_exists('body', __('filament-panels::auth/pages/password-reset/reset-password.notifications.throttled') ?: []) ? __('filament-panels::auth/pages/password-reset/reset-password.notifications.throttled.body', [ 'seconds' => $exception->secondsUntilAvailable, 'minutes' => $exception->minutesUntilAvailable, ]) : null) @@ -130,7 +130,7 @@ public function form(Schema $form): Schema protected function getEmailFormComponent(): Component { return TextInput::make('email') - ->label(__('filament-panels::pages/auth/password-reset/reset-password.form.email.label')) + ->label(__('filament-panels::auth/pages/password-reset/reset-password.form.email.label')) ->disabled() ->autofocus(); } @@ -138,19 +138,19 @@ protected function getEmailFormComponent(): Component protected function getPasswordFormComponent(): Component { return TextInput::make('password') - ->label(__('filament-panels::pages/auth/password-reset/reset-password.form.password.label')) + ->label(__('filament-panels::auth/pages/password-reset/reset-password.form.password.label')) ->password() ->revealable(filament()->arePasswordsRevealable()) ->required() ->rule(PasswordRule::default()) ->same('passwordConfirmation') - ->validationAttribute(__('filament-panels::pages/auth/password-reset/reset-password.form.password.validation_attribute')); + ->validationAttribute(__('filament-panels::auth/pages/password-reset/reset-password.form.password.validation_attribute')); } protected function getPasswordConfirmationFormComponent(): Component { return TextInput::make('passwordConfirmation') - ->label(__('filament-panels::pages/auth/password-reset/reset-password.form.password_confirmation.label')) + ->label(__('filament-panels::auth/pages/password-reset/reset-password.form.password_confirmation.label')) ->password() ->revealable(filament()->arePasswordsRevealable()) ->required() @@ -159,12 +159,12 @@ protected function getPasswordConfirmationFormComponent(): Component public function getTitle(): string | Htmlable { - return __('filament-panels::pages/auth/password-reset/reset-password.title'); + return __('filament-panels::auth/pages/password-reset/reset-password.title'); } public function getHeading(): string | Htmlable { - return __('filament-panels::pages/auth/password-reset/reset-password.heading'); + return __('filament-panels::auth/pages/password-reset/reset-password.heading'); } /** @@ -180,7 +180,7 @@ protected function getFormActions(): array public function getResetPasswordFormAction(): Action { return Action::make('resetPassword') - ->label(__('filament-panels::pages/auth/password-reset/reset-password.form.actions.reset.label')) + ->label(__('filament-panels::auth/pages/password-reset/reset-password.form.actions.reset.label')) ->submit('resetPassword'); } diff --git a/packages/panels/src/Pages/Auth/Register.php b/packages/panels/src/Auth/Pages/Register.php similarity index 88% rename from packages/panels/src/Pages/Auth/Register.php rename to packages/panels/src/Auth/Pages/Register.php index a9204a896fb..debd2b25cdb 100644 --- a/packages/panels/src/Pages/Auth/Register.php +++ b/packages/panels/src/Auth/Pages/Register.php @@ -1,17 +1,17 @@ title(__('filament-panels::pages/auth/register.notifications.throttled.title', [ + ->title(__('filament-panels::auth/pages/register.notifications.throttled.title', [ 'seconds' => $exception->secondsUntilAvailable, 'minutes' => $exception->minutesUntilAvailable, ])) - ->body(array_key_exists('body', __('filament-panels::pages/auth/register.notifications.throttled') ?: []) ? __('filament-panels::pages/auth/register.notifications.throttled.body', [ + ->body(array_key_exists('body', __('filament-panels::auth/pages/register.notifications.throttled') ?: []) ? __('filament-panels::auth/pages/register.notifications.throttled.body', [ 'seconds' => $exception->secondsUntilAvailable, 'minutes' => $exception->minutesUntilAvailable, ]) : null) @@ -175,7 +175,7 @@ protected function getForms(): array protected function getNameFormComponent(): Component { return TextInput::make('name') - ->label(__('filament-panels::pages/auth/register.form.name.label')) + ->label(__('filament-panels::auth/pages/register.form.name.label')) ->required() ->maxLength(255) ->autofocus(); @@ -184,7 +184,7 @@ protected function getNameFormComponent(): Component protected function getEmailFormComponent(): Component { return TextInput::make('email') - ->label(__('filament-panels::pages/auth/register.form.email.label')) + ->label(__('filament-panels::auth/pages/register.form.email.label')) ->email() ->required() ->maxLength(255) @@ -194,20 +194,20 @@ protected function getEmailFormComponent(): Component protected function getPasswordFormComponent(): Component { return TextInput::make('password') - ->label(__('filament-panels::pages/auth/register.form.password.label')) + ->label(__('filament-panels::auth/pages/register.form.password.label')) ->password() ->revealable(filament()->arePasswordsRevealable()) ->required() ->rule(Password::default()) ->dehydrateStateUsing(fn ($state) => Hash::make($state)) ->same('passwordConfirmation') - ->validationAttribute(__('filament-panels::pages/auth/register.form.password.validation_attribute')); + ->validationAttribute(__('filament-panels::auth/pages/register.form.password.validation_attribute')); } protected function getPasswordConfirmationFormComponent(): Component { return TextInput::make('passwordConfirmation') - ->label(__('filament-panels::pages/auth/register.form.password_confirmation.label')) + ->label(__('filament-panels::auth/pages/register.form.password_confirmation.label')) ->password() ->revealable(filament()->arePasswordsRevealable()) ->required() @@ -218,7 +218,7 @@ public function loginAction(): Action { return Action::make('login') ->link() - ->label(__('filament-panels::pages/auth/register.actions.login.label')) + ->label(__('filament-panels::auth/pages/register.actions.login.label')) ->url(filament()->getLoginUrl()); } @@ -242,12 +242,12 @@ protected function getUserModel(): string public function getTitle(): string | Htmlable { - return __('filament-panels::pages/auth/register.title'); + return __('filament-panels::auth/pages/register.title'); } public function getHeading(): string | Htmlable { - return __('filament-panels::pages/auth/register.heading'); + return __('filament-panels::auth/pages/register.heading'); } /** @@ -263,7 +263,7 @@ protected function getFormActions(): array public function getRegisterFormAction(): Action { return Action::make('register') - ->label(__('filament-panels::pages/auth/register.form.actions.register.label')) + ->label(__('filament-panels::auth/pages/register.form.actions.register.label')) ->submit('register'); } @@ -287,7 +287,7 @@ public function getSubheading(): string | Htmlable | null return null; } - return new HtmlString(__('filament-panels::pages/auth/register.actions.login.before') . ' ' . $this->loginAction->toHtml()); + return new HtmlString(__('filament-panels::auth/pages/register.actions.login.before') . ' ' . $this->loginAction->toHtml()); } public function content(Schema $schema): Schema diff --git a/packages/panels/src/Facades/Filament.php b/packages/panels/src/Facades/Filament.php index f333c3a8b24..52328b998dd 100644 --- a/packages/panels/src/Facades/Filament.php +++ b/packages/panels/src/Facades/Filament.php @@ -4,13 +4,13 @@ use Closure; use Filament\Actions\Action; +use Filament\Auth\MultiFactor\Contracts\MultiFactorAuthenticationProvider; use Filament\Billing\Providers\Contracts\BillingProvider; use Filament\Contracts\Plugin; use Filament\Enums\ThemeMode; use Filament\FilamentManager; use Filament\GlobalSearch\Providers\Contracts\GlobalSearchProvider; use Filament\Models\Contracts\HasTenants; -use Filament\MultiFactorAuthentication\Contracts\MultiFactorAuthenticationProvider; use Filament\Navigation\NavigationGroup; use Filament\Navigation\NavigationItem; use Filament\Pages\Enums\SubNavigationPosition; @@ -108,6 +108,8 @@ * @method static array getUserTenants(HasTenants | Model | Authenticatable $user) * @method static string | null getUrl(Model | null $tenant = null) * @method static string getVerifyEmailUrl(MustVerifyEmail | Model | Authenticatable $user, array $parameters = []) + * @method static string getVerifyEmailChangeUrl(MustVerifyEmail | Model | Authenticatable $user, string $newEmail, array $parameters = []) + * @method static string getBlockEmailChangeVerificationUrl(MustVerifyEmail | Model | Authenticatable $user, string $newEmail, string $verificationSignature, array $parameters = []) * @method static array getWidgets() * @method static bool hasBreadcrumbs() * @method static bool hasCollapsibleNavigationGroups() @@ -115,6 +117,7 @@ * @method static bool hasDarkModeForced() * @method static bool hasDatabaseNotifications() * @method static bool hasLazyLoadedDatabaseNotifications() + * @method static bool hasEmailChangeVerification() * @method static bool hasEmailVerification() * @method static bool hasLogin() * @method static bool hasNavigation() diff --git a/packages/panels/src/FilamentManager.php b/packages/panels/src/FilamentManager.php index 3328789f823..13404c0183a 100644 --- a/packages/panels/src/FilamentManager.php +++ b/packages/panels/src/FilamentManager.php @@ -5,6 +5,7 @@ use Closure; use Exception; use Filament\Actions\Action; +use Filament\Auth\MultiFactor\Contracts\MultiFactorAuthenticationProvider; use Filament\Contracts\Plugin; use Filament\Enums\ThemeMode; use Filament\Events\ServingFilament; @@ -15,7 +16,6 @@ use Filament\Models\Contracts\HasDefaultTenant; use Filament\Models\Contracts\HasName; use Filament\Models\Contracts\HasTenants; -use Filament\MultiFactorAuthentication\Contracts\MultiFactorAuthenticationProvider; use Filament\Navigation\MenuItem; use Filament\Navigation\NavigationGroup; use Filament\Navigation\NavigationItem; @@ -588,6 +588,22 @@ public function getVerifyEmailUrl(MustVerifyEmail | Model | Authenticatable $use return $this->getCurrentOrDefaultPanel()->getVerifyEmailUrl($user, $parameters); } + /** + * @param array $parameters + */ + public function getVerifyEmailChangeUrl(MustVerifyEmail | Model | Authenticatable $user, string $newEmail, array $parameters = []): string + { + return $this->getCurrentOrDefaultPanel()->getVerifyEmailChangeUrl($user, $newEmail, $parameters); + } + + /** + * @param array $parameters + */ + public function getBlockEmailChangeVerificationUrl(MustVerifyEmail | Model | Authenticatable $user, string $newEmail, string $verificationSignature, array $parameters = []): string + { + return $this->getCurrentOrDefaultPanel()->getBlockEmailChangeVerificationUrl($user, $newEmail, $verificationSignature, $parameters); + } + /** * @return array> */ @@ -636,6 +652,11 @@ public function hasEmailVerification(): bool return $this->getCurrentOrDefaultPanel()->hasEmailVerification(); } + public function hasEmailChangeVerification(): bool + { + return $this->getCurrentOrDefaultPanel()->hasEmailChangeVerification(); + } + public function hasLogin(): bool { return $this->getCurrentOrDefaultPanel()->hasLogin(); diff --git a/packages/panels/src/FilamentServiceProvider.php b/packages/panels/src/FilamentServiceProvider.php index beb5a791b27..46afe0e6ff9 100644 --- a/packages/panels/src/FilamentServiceProvider.php +++ b/packages/panels/src/FilamentServiceProvider.php @@ -2,22 +2,26 @@ namespace Filament; +use Filament\Auth\Http\Responses\BlockEmailChangeVerificationResponse; +use Filament\Auth\Http\Responses\Contracts\BlockEmailChangeVerificationResponse as BlockEmailChangeVerificationResponseContract; +use Filament\Auth\Http\Responses\Contracts\EmailChangeVerificationResponse as EmailChangeVerificationResponseContract; +use Filament\Auth\Http\Responses\Contracts\EmailVerificationResponse as EmailVerificationResponseContract; +use Filament\Auth\Http\Responses\Contracts\LoginResponse as LoginResponseContract; +use Filament\Auth\Http\Responses\Contracts\LogoutResponse as LogoutResponseContract; +use Filament\Auth\Http\Responses\Contracts\PasswordResetResponse as PasswordResetResponseContract; +use Filament\Auth\Http\Responses\Contracts\RegistrationResponse as RegistrationResponseContract; +use Filament\Auth\Http\Responses\EmailChangeVerificationResponse; +use Filament\Auth\Http\Responses\EmailVerificationResponse; +use Filament\Auth\Http\Responses\LoginResponse; +use Filament\Auth\Http\Responses\LogoutResponse; +use Filament\Auth\Http\Responses\PasswordResetResponse; +use Filament\Auth\Http\Responses\RegistrationResponse; use Filament\Facades\Filament; use Filament\Http\Middleware\Authenticate; use Filament\Http\Middleware\DisableBladeIconComponents; use Filament\Http\Middleware\DispatchServingFilamentEvent; use Filament\Http\Middleware\IdentifyTenant; use Filament\Http\Middleware\SetUpPanel; -use Filament\Http\Responses\Auth\Contracts\EmailVerificationResponse as EmailVerificationResponseContract; -use Filament\Http\Responses\Auth\Contracts\LoginResponse as LoginResponseContract; -use Filament\Http\Responses\Auth\Contracts\LogoutResponse as LogoutResponseContract; -use Filament\Http\Responses\Auth\Contracts\PasswordResetResponse as PasswordResetResponseContract; -use Filament\Http\Responses\Auth\Contracts\RegistrationResponse as RegistrationResponseContract; -use Filament\Http\Responses\Auth\EmailVerificationResponse; -use Filament\Http\Responses\Auth\LoginResponse; -use Filament\Http\Responses\Auth\LogoutResponse; -use Filament\Http\Responses\Auth\PasswordResetResponse; -use Filament\Http\Responses\Auth\RegistrationResponse; use Filament\Navigation\NavigationManager; use Filament\Support\Assets\Font; use Filament\Support\Assets\Js; @@ -67,6 +71,8 @@ public function packageRegistered(): void return new NavigationManager; }); + $this->app->bind(BlockEmailChangeVerificationResponseContract::class, BlockEmailChangeVerificationResponse::class); + $this->app->bind(EmailChangeVerificationResponseContract::class, EmailChangeVerificationResponse::class); $this->app->bind(EmailVerificationResponseContract::class, EmailVerificationResponse::class); $this->app->bind(LoginResponseContract::class, LoginResponse::class); $this->app->bind(LogoutResponseContract::class, LogoutResponse::class); diff --git a/packages/panels/src/Panel/Concerns/HasAuth.php b/packages/panels/src/Panel/Concerns/HasAuth.php index 8251a9f1ce4..7b5ad78d560 100644 --- a/packages/panels/src/Panel/Concerns/HasAuth.php +++ b/packages/panels/src/Panel/Concerns/HasAuth.php @@ -3,13 +3,13 @@ namespace Filament\Panel\Concerns; use Closure; -use Filament\MultiFactorAuthentication\Contracts\MultiFactorAuthenticationProvider; -use Filament\Pages\Auth\EditProfile; -use Filament\Pages\Auth\EmailVerification\EmailVerificationPrompt; -use Filament\Pages\Auth\Login; -use Filament\Pages\Auth\PasswordReset\RequestPasswordReset; -use Filament\Pages\Auth\PasswordReset\ResetPassword; -use Filament\Pages\Auth\Register; +use Filament\Auth\MultiFactor\Contracts\MultiFactorAuthenticationProvider; +use Filament\Auth\Pages\EditProfile; +use Filament\Auth\Pages\EmailVerification\EmailVerificationPrompt; +use Filament\Auth\Pages\Login; +use Filament\Auth\Pages\PasswordReset\RequestPasswordReset; +use Filament\Auth\Pages\PasswordReset\ResetPassword; +use Filament\Auth\Pages\Register; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Contracts\Auth\CanResetPassword; use Illuminate\Contracts\Auth\Guard; @@ -28,12 +28,18 @@ trait HasAuth */ protected string | Closure | array | null $emailVerificationRouteAction = null; + protected bool | Closure $hasEmailChangeVerification = false; + protected string $emailVerificationPromptRouteSlug = 'prompt'; protected string $emailVerificationRouteSlug = 'verify'; + protected string $emailChangeVerificationRouteSlug = 'verify'; + protected string $emailVerificationRoutePrefix = 'email-verification'; + protected string $emailChangeVerificationRoutePrefix = 'email-change-verification'; + protected bool $isEmailVerificationRequired = false; /** @@ -94,6 +100,13 @@ public function emailVerification(string | Closure | array | null $promptAction return $this; } + public function emailChangeVerification(bool | Closure $condition = true): static + { + $this->hasEmailChangeVerification = $condition; + + return $this; + } + public function emailVerificationPromptRouteSlug(string $slug): static { $this->emailVerificationPromptRouteSlug = $slug; @@ -108,6 +121,13 @@ public function emailVerificationRouteSlug(string $slug): static return $this; } + public function emailChangeVerificationRouteSlug(string $slug): static + { + $this->emailChangeVerificationRouteSlug = $slug; + + return $this; + } + public function emailVerificationRoutePrefix(string $prefix): static { $this->emailVerificationRoutePrefix = $prefix; @@ -115,6 +135,13 @@ public function emailVerificationRoutePrefix(string $prefix): static return $this; } + public function emailChangeVerificationRoutePrefix(string $prefix): static + { + $this->emailChangeVerificationRoutePrefix = $prefix; + + return $this; + } + public function emailVerifiedMiddlewareName(string | Closure $name): static { $this->emailVerifiedMiddlewareName = $name; @@ -324,6 +351,39 @@ public function getVerifyEmailUrl(MustVerifyEmail | Model | Authenticatable $use ); } + /** + * @param array $parameters + */ + public function getVerifyEmailChangeUrl(MustVerifyEmail | Model | Authenticatable $user, string $newEmail, array $parameters = []): string + { + return URL::temporarySignedRoute( + $this->generateRouteName('auth.email-change-verification.verify'), + now()->addMinutes(config('auth.verification.expire', 60)), + [ + 'id' => $user->getKey(), + 'email' => encrypt($newEmail), + ...$parameters, + ], + ); + } + + /** + * @param array $parameters + */ + public function getBlockEmailChangeVerificationUrl(MustVerifyEmail | Model | Authenticatable $user, string $newEmail, string $verificationSignature, array $parameters = []): string + { + return URL::temporarySignedRoute( + $this->generateRouteName('auth.email-change-verification.block-verification'), + now()->addMinutes(config('auth.verification.expire', 60)), + [ + 'id' => $user->getKey(), + 'email' => encrypt($newEmail), + 'verificationSignature' => $verificationSignature, + ...$parameters, + ], + ); + } + /** * @param array $parameters */ @@ -382,11 +442,21 @@ public function getEmailVerificationRouteSlug(string $suffix): string return Str::start($this->emailVerificationRouteSlug, '/') . $suffix; } + public function getEmailChangeVerificationRouteSlug(string $suffix): string + { + return Str::start($this->emailChangeVerificationRouteSlug, '/') . $suffix; + } + public function getEmailVerificationRoutePrefix(): string { return Str::start($this->emailVerificationRoutePrefix, '/'); } + public function getEmailChangeVerificationRoutePrefix(): string + { + return Str::start($this->emailChangeVerificationRoutePrefix, '/'); + } + /** * @return string | Closure | array | null */ @@ -444,6 +514,11 @@ public function getResetPasswordRoutePrefix(): string return Str::start($this->resetPasswordRoutePrefix, '/'); } + public function hasEmailChangeVerification(): bool + { + return (bool) $this->evaluate($this->hasEmailChangeVerification); + } + public function hasEmailVerification(): bool { return filled($this->getEmailVerificationPromptRouteAction()); diff --git a/packages/panels/src/Panel/Concerns/HasComponents.php b/packages/panels/src/Panel/Concerns/HasComponents.php index 207d17a1206..08ce5ac163c 100644 --- a/packages/panels/src/Panel/Concerns/HasComponents.php +++ b/packages/panels/src/Panel/Concerns/HasComponents.php @@ -3,6 +3,7 @@ namespace Filament\Panel\Concerns; use Closure; +use Filament\Auth\Pages\EditProfile; use Filament\Clusters\Cluster; use Filament\Livewire\DatabaseNotifications; use Filament\Livewire\GlobalSearch; @@ -10,7 +11,6 @@ use Filament\Livewire\Sidebar; use Filament\Livewire\SimpleUserMenu; use Filament\Livewire\Topbar; -use Filament\Pages\Auth\EditProfile; use Filament\Pages\Page; use Filament\Resources\Pages\Page as ResourcePage; use Filament\Resources\RelationManagers\RelationGroup; @@ -492,8 +492,8 @@ protected function registerLivewireComponents(): void $this->queueLivewireComponentForRegistration(SimpleUserMenu::class); $this->queueLivewireComponentForRegistration(Topbar::class); - if ($this->hasEmailVerification() && is_subclass_of($emailVerificationRouteAction = $this->getEmailVerificationPromptRouteAction(), Component::class)) { - $this->queueLivewireComponentForRegistration($emailVerificationRouteAction); + if ($this->hasEmailVerification() && is_subclass_of($emailVerificationPromptRouteAction = $this->getEmailVerificationPromptRouteAction(), Component::class)) { + $this->queueLivewireComponentForRegistration($emailVerificationPromptRouteAction); } if ($this->hasLogin() && is_subclass_of($loginRouteAction = $this->getLoginRouteAction(), Component::class)) { diff --git a/packages/schemas/src/Components/Concerns/HasState.php b/packages/schemas/src/Components/Concerns/HasState.php index 651b6d466e9..d356dd4cc0c 100644 --- a/packages/schemas/src/Components/Concerns/HasState.php +++ b/packages/schemas/src/Components/Concerns/HasState.php @@ -604,11 +604,11 @@ public function isValidatedWhenNotDehydrated(): bool public function isNeitherDehydratedNorValidated(): bool { - if ($this->isDehydrated()) { - return false; + if ($this->isHiddenAndNotDehydratedWhenHidden()) { + return true; } - if ($this->isHiddenAndNotDehydratedWhenHidden()) { + if ($this->isDehydrated()) { return false; } diff --git a/packages/support/composer.json b/packages/support/composer.json index a7a5264b79b..61961cf0ad0 100644 --- a/packages/support/composer.json +++ b/packages/support/composer.json @@ -16,6 +16,7 @@ "illuminate/support": "^10.45|^11.0", "illuminate/view": "^10.45|^11.0", "kirschbaum-development/eloquent-power-joins": "^3.0|^4.0", + "league/uri-components": "^7.0", "livewire/livewire": "^3.5", "nette/php-generator": "^4.0", "ryangjchandler/blade-capture-directive": "^0.2|^0.3|^1.0", diff --git a/packages/upgrade/src/rector.php b/packages/upgrade/src/rector.php index 7f85ec5d017..f5d84a3ed0e 100644 --- a/packages/upgrade/src/rector.php +++ b/packages/upgrade/src/rector.php @@ -28,7 +28,7 @@ 'Filament\\Forms\\Components\\Concerns\\HasExtraAlpineAttributes' => 'Filament\\Support\\Concerns\\HasExtraAlpineAttributes', 'Filament\\Forms\\Components\\Concerns\\HasExtraAttributes' => 'Filament\\Support\\Concerns\\HasExtraAttributes', 'Filament\\Infolists\\Components\\Card' => 'Filament\\Schemas\\Components\\Section', - 'Filament\\Http\\Livewire\\Auth\\Login' => 'Filament\\Pages\\Auth\\Login', + 'Filament\\Http\\Livewire\\Auth\\Login' => 'Filament\\Auth\\Pages\\Login', 'Filament\\Navigation\\UserMenuItem' => 'Filament\\Navigation\\MenuItem', 'Filament\\Pages\\Actions\\Modal\\Actions\\Action' => 'Filament\\Actions\\Action', 'Filament\\Pages\\Actions\\Modal\\Actions\\ButtonAction' => 'Filament\\Actions\\Action', @@ -212,6 +212,27 @@ 'Filament\\Billing\\Providers\\Contracts\\Provider' => 'Filament\\Billing\\Providers\\Contracts\\BillingProvider', 'Filament\\GlobalSearch\\Contracts\\GlobalSearchProvider' => 'Filament\\GlobalSearch\\Providers\\Contracts\\GlobalSearchProvider', 'Filament\\GlobalSearch\\DefaultGlobalSearchProvider' => 'Filament\\GlobalSearch\\Providers\\DefaultGlobalSearchProvider', + 'Filament\\Events\\Auth\\Registered' => 'Filament\\Auth\\Events\\Registered', + 'Filament\\Http\\Controllers\\Auth\\EmailVerificationController' => 'Filament\\Auth\\Http\\Controllers\\EmailVerificationController', + 'Filament\\Http\\Controllers\\Auth\\LogoutController' => 'Filament\\Auth\\Http\\Controllers\\LogoutController', + 'Filament\\Http\\Responses\\Auth\\Contracts\\EmailVerificationResponse' => 'Filament\\Auth\\Http\\Responses\\Contracts\\EmailVerificationResponse', + 'Filament\\Http\\Responses\\Auth\\Contracts\\LoginResponse' => 'Filament\\Auth\\Http\\Responses\\Contracts\\LoginResponse', + 'Filament\\Http\\Responses\\Auth\\Contracts\\LogoutResponse' => 'Filament\\Auth\\Http\\Responses\\Contracts\\LogoutResponse', + 'Filament\\Http\\Responses\\Auth\\Contracts\\PasswordResetResponse' => 'Filament\\Auth\\Http\\Responses\\Contracts\\PasswordResetResponse', + 'Filament\\Http\\Responses\\Auth\\Contracts\\RegistrationResponse' => 'Filament\\Auth\\Http\\Responses\\Contracts\\RegistrationResponse', + 'Filament\\Http\\Responses\\Auth\\EmailVerificationResponse' => 'Filament\\Auth\\Http\\Responses\\EmailVerificationResponse', + 'Filament\\Http\\Responses\\Auth\\LoginResponse' => 'Filament\\Auth\\Http\\Responses\\LoginResponse', + 'Filament\\Http\\Responses\\Auth\\LogoutResponse' => 'Filament\\Auth\\Http\\Responses\\LogoutResponse', + 'Filament\\Http\\Responses\\Auth\\PasswordResetResponse' => 'Filament\\Auth\\Http\\Responses\\PasswordResetResponse', + 'Filament\\Http\\Responses\\Auth\\RegistrationResponse' => 'Filament\\Auth\\Http\\Responses\\RegistrationResponse', + 'Filament\\Notifications\\Auth\\ResetPassword' => 'Filament\\Auth\\Notifications\\ResetPassword', + 'Filament\\Notifications\\Auth\\VerifyEmail' => 'Filament\\Auth\\Notifications\\VerifyEmail', + 'Filament\\Pages\\Auth\\EditProfile' => 'Filament\\Auth\\Pages\\EditProfile', + 'Filament\\Pages\\Auth\\EmailVerification\\EmailVerificationPrompt' => 'Filament\\Auth\\Pages\\EmailVerification\\EmailVerificationPrompt', + 'Filament\\Pages\\Auth\\Login' => 'Filament\\Auth\\Pages\\Login', + 'Filament\\Pages\\Auth\\PasswordReset\\RequestPasswordReset' => 'Filament\\Auth\\Pages\\PasswordReset\\RequestPasswordReset', + 'Filament\\Pages\\Auth\\PasswordReset\\ResetPassword' => 'Filament\\Auth\\Pages\\PasswordReset\\ResetPassword', + 'Filament\\Pages\\Auth\\Register' => 'Filament\\Auth\\Pages\\Register', ], ); diff --git a/tests/database/factories/UserFactory.php b/tests/database/factories/UserFactory.php index a02f09c2c11..b9b205c0aea 100644 --- a/tests/database/factories/UserFactory.php +++ b/tests/database/factories/UserFactory.php @@ -2,8 +2,8 @@ namespace Filament\Tests\Database\Factories; -use Filament\MultiFactorAuthentication\EmailCode\EmailCodeAuthentication; -use Filament\MultiFactorAuthentication\GoogleTwoFactor\GoogleTwoFactorAuthentication; +use Filament\Auth\MultiFactor\EmailCode\EmailCodeAuthentication; +use Filament\Auth\MultiFactor\GoogleTwoFactor\GoogleTwoFactorAuthentication; use Filament\Tests\Fixtures\Models\User; use Illuminate\Database\Eloquent\Factories\Factory; use Illuminate\Support\Facades\Hash; diff --git a/tests/src/Fixtures/Models/User.php b/tests/src/Fixtures/Models/User.php index 752463954c0..42f2dcf8256 100644 --- a/tests/src/Fixtures/Models/User.php +++ b/tests/src/Fixtures/Models/User.php @@ -2,11 +2,11 @@ namespace Filament\Tests\Fixtures\Models; +use Filament\Auth\MultiFactor\EmailCode\Contracts\HasEmailCodeAuthentication; +use Filament\Auth\MultiFactor\GoogleTwoFactor\Contracts\HasGoogleTwoFactorAuthentication; +use Filament\Auth\MultiFactor\GoogleTwoFactor\Contracts\HasGoogleTwoFactorAuthenticationRecovery; use Filament\Models\Contracts\FilamentUser; use Filament\Models\Contracts\HasTenants; -use Filament\MultiFactorAuthentication\EmailCode\Contracts\HasEmailCodeAuthentication; -use Filament\MultiFactorAuthentication\GoogleTwoFactor\Contracts\HasGoogleTwoFactorAuthentication; -use Filament\MultiFactorAuthentication\GoogleTwoFactor\Contracts\HasGoogleTwoFactorAuthenticationRecovery; use Filament\Panel; use Filament\Tests\Database\Factories\UserFactory; use Illuminate\Contracts\Auth\MustVerifyEmail; diff --git a/tests/src/Fixtures/Providers/AdminPanelProvider.php b/tests/src/Fixtures/Providers/AdminPanelProvider.php index 7bdb7b535a7..be5c942489b 100644 --- a/tests/src/Fixtures/Providers/AdminPanelProvider.php +++ b/tests/src/Fixtures/Providers/AdminPanelProvider.php @@ -35,7 +35,9 @@ public function panel(Panel $panel): Panel ->login() ->registration() ->passwordReset() + ->emailChangeVerification() ->emailVerification() + ->profile() ->resources([ DepartmentResource::class, PostResource::class, diff --git a/tests/src/Fixtures/Providers/EmailCodeAuthenticationPanelProvider.php b/tests/src/Fixtures/Providers/EmailCodeAuthenticationPanelProvider.php index 04f4e5dc1ce..0ddcb8ea21b 100644 --- a/tests/src/Fixtures/Providers/EmailCodeAuthenticationPanelProvider.php +++ b/tests/src/Fixtures/Providers/EmailCodeAuthenticationPanelProvider.php @@ -2,11 +2,11 @@ namespace Filament\Tests\Fixtures\Providers; +use Filament\Auth\MultiFactor\EmailCode\EmailCodeAuthentication; use Filament\Http\Middleware\Authenticate; use Filament\Http\Middleware\AuthenticateSession; use Filament\Http\Middleware\DisableBladeIconComponents; use Filament\Http\Middleware\DispatchServingFilamentEvent; -use Filament\MultiFactorAuthentication\EmailCode\EmailCodeAuthentication; use Filament\Panel; use Filament\PanelProvider; use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse; diff --git a/tests/src/Fixtures/Providers/GoogleTwoFactorAuthenticationPanelProvider.php b/tests/src/Fixtures/Providers/GoogleTwoFactorAuthenticationPanelProvider.php index e546a58d3e5..4e9f9759ad2 100644 --- a/tests/src/Fixtures/Providers/GoogleTwoFactorAuthenticationPanelProvider.php +++ b/tests/src/Fixtures/Providers/GoogleTwoFactorAuthenticationPanelProvider.php @@ -2,11 +2,11 @@ namespace Filament\Tests\Fixtures\Providers; +use Filament\Auth\MultiFactor\GoogleTwoFactor\GoogleTwoFactorAuthentication; use Filament\Http\Middleware\Authenticate; use Filament\Http\Middleware\AuthenticateSession; use Filament\Http\Middleware\DisableBladeIconComponents; use Filament\Http\Middleware\DispatchServingFilamentEvent; -use Filament\MultiFactorAuthentication\GoogleTwoFactor\GoogleTwoFactorAuthentication; use Filament\Panel; use Filament\PanelProvider; use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse; diff --git a/tests/src/Fixtures/Providers/SlugsPanelProvider.php b/tests/src/Fixtures/Providers/SlugsPanelProvider.php index aa7c59e37cf..409bbb518c7 100644 --- a/tests/src/Fixtures/Providers/SlugsPanelProvider.php +++ b/tests/src/Fixtures/Providers/SlugsPanelProvider.php @@ -30,10 +30,14 @@ public function panel(Panel $panel): Panel ->passwordResetRoutePrefix('password-reset-test') ->registration() ->registrationRouteSlug('register-test') + ->emailChangeVerification() + ->emailChangeVerificationRouteSlug('verify-change-test') + ->emailChangeVerificationRoutePrefix('email-change-verification-test') ->emailVerification() ->emailVerificationPromptRouteSlug('prompt-test') ->emailVerificationRouteSlug('verify-test') ->emailVerificationRoutePrefix('email-verification-test') + ->profile() ->resources([]) ->pages([]) ->middleware([ diff --git a/tests/src/Panels/Auth/EditProfileTest.php b/tests/src/Panels/Auth/EditProfileTest.php new file mode 100644 index 00000000000..1d887a9e788 --- /dev/null +++ b/tests/src/Panels/Auth/EditProfileTest.php @@ -0,0 +1,197 @@ +user = User::factory()->create(); + + $this->actingAs($this->user); +}); + +it('can render page', function () { + $this->get(Filament::getProfileUrl()) + ->assertSuccessful(); +}); + +it('can retrieve data', function () { + livewire(EditProfile::class) + ->assertFormSet([ + 'name' => $this->user->name, + 'email' => $this->user->email, + ]); +}); + +it('can save name', function () { + $newUserData = User::factory()->make(); + + livewire(EditProfile::class) + ->fillForm([ + 'name' => $newUserData->name, + ]) + ->call('save') + ->assertHasNoFormErrors() + ->assertNotified('Saved'); + + expect($this->user->refresh()) + ->name->toBe($newUserData->name); +}); + +it('can save email', function () { + Filament::getCurrentOrDefaultPanel()->emailChangeVerification(false); + + $newUserData = User::factory()->make(); + + livewire(EditProfile::class) + ->fillForm([ + 'email' => $newUserData->email, + 'currentPassword' => 'password', + ]) + ->call('save') + ->assertHasNoFormErrors() + ->assertNotified('Saved'); + + expect($this->user->refresh()) + ->email->toBe($newUserData->email); +}); + +it('can send email change verification', function () { + Notification::fake(); + + Filament::getCurrentOrDefaultPanel()->emailChangeVerification(); + + $oldEmail = $this->user->email; + + $newUserData = User::factory()->make(); + + livewire(EditProfile::class) + ->fillForm([ + 'email' => $newUserData->email, + 'currentPassword' => 'password', + ]) + ->call('save') + ->assertHasNoFormErrors() + ->assertNotified('Email address change request sent') + ->assertFormSet([ + 'email' => $oldEmail, + ]); + + expect($this->user->refresh()) + ->email->toBe($oldEmail); + + Notification::assertSentTo($this->user, NoticeOfEmailChangeRequest::class, function (NoticeOfEmailChangeRequest $notification) use ($newUserData): bool { + if (blank($notification->blockVerificationUrl)) { + return false; + } + + return $notification->newEmail === $newUserData->email; + }); + + Notification::assertSentOnDemand(VerifyEmailChange::class, function (VerifyEmailChange $notification): bool { + $verificationSignature = Query::new($notification->url)->get('signature'); + + return cache()->has($verificationSignature); + }); +}); + +it('can save password', function () { + expect(Filament::auth()->attempt([ + 'email' => $this->user->email, + 'password' => 'password', + ]))->toBeTrue(); + + $newPassword = Str::random(); + + livewire(EditProfile::class) + ->fillForm([ + 'password' => $newPassword, + 'passwordConfirmation' => $newPassword, + 'currentPassword' => 'password', + ]) + ->call('save') + ->assertHasNoFormErrors() + ->assertNotified('Saved') + ->assertFormSet([ + 'password' => '', + 'passwordConfirmation' => '', + ]); + + expect(Filament::auth()->attempt([ + 'email' => $this->user->email, + 'password' => 'password', + ]))->toBeFalse(); + + expect(Filament::auth()->attempt([ + 'email' => $this->user->email, + 'password' => $newPassword, + ]))->toBeTrue(); +}); + +it('can validate', function (array $formData, array $errors) { + Filament::getCurrentOrDefaultPanel()->emailChangeVerification(false); + + livewire(EditProfile::class) + ->fillForm($formData) + ->call('save') + ->assertHasFormErrors($errors) + ->assertNotNotified('Saved'); + + $this->user->refresh(); + + foreach ($formData as $key => $value) { + expect($this->user->getAttributeValue($key)) + ->not->toBe($value); + } +})->with([ + '`name` is required' => [ + ['name' => '', 'email' => fake()->email], + ['name' => ['required']], + ], + '`name` is max 255 characters' => [ + ['name' => Str::random(256), 'email' => fake()->email], + ['name' => ['max']], + ], + '`email` is required' => [ + ['name' => fake()->name, 'email' => ''], + ['email' => ['required']], + ], + '`email` is valid email address' => [ + ['name' => fake()->name, 'email' => 'not-an-email'], + ['email' => ['email']], + ], + '`email` is unique' => fn (): array => [ + ['name' => fake()->name, 'email' => User::factory()->create()->email], + ['email' => ['unique']], + ], + '`password` is confirmed' => fn (): array => [ + ['name' => fake()->name, 'email' => fake()->email, 'password' => Str::random(), 'passwordConfirmation' => Str::random()], + ['password' => ['same']], + ], + '`passwordConfirmation` is required when `password` is filled' => fn (): array => [ + ['name' => fake()->name, 'email' => fake()->email, 'password' => Str::random(), 'passwordConfirmation' => ''], + ['passwordConfirmation' => ['required']], + ], + '`currentPassword` is required when `password` is filled' => fn (): array => [ + ['name' => fake()->name, 'email' => fake()->email, 'password' => Str::random(), 'currentPassword' => ''], + ['currentPassword' => ['required']], + ], + '`currentPassword` is required when `email` is changed' => fn (): array => [ + ['name' => fake()->name, 'email' => fake()->email, 'currentPassword' => ''], + ['currentPassword' => ['required']], + ], + '`currentPassword` is valid password' => fn (): array => [ + ['name' => fake()->name, 'email' => fake()->email, 'currentPassword' => 'invalid-password'], + ['currentPassword' => ['current_password']], + ], +]); diff --git a/tests/src/Panels/Auth/EmailVerification/EmailChangeVerification/BlockEmailChangeVerificationTest.php b/tests/src/Panels/Auth/EmailVerification/EmailChangeVerification/BlockEmailChangeVerificationTest.php new file mode 100644 index 00000000000..58fe7166cab --- /dev/null +++ b/tests/src/Panels/Auth/EmailVerification/EmailChangeVerification/BlockEmailChangeVerificationTest.php @@ -0,0 +1,102 @@ +create(); + $newEmail = fake()->email; + + expect($userToVerify->refresh()) + ->email->not->toBe($newEmail); + + $verificationUrl = Filament::getVerifyEmailChangeUrl($userToVerify, $newEmail); + + $verificationSignature = Query::new($verificationUrl)->get('signature'); + cache()->put($verificationSignature, true, ttl: now()->addHour()); + + $blockVerificationUrl = Filament::getBlockEmailChangeVerificationUrl($userToVerify, $newEmail, $verificationSignature); + + $this + ->actingAs($userToVerify) + ->get($blockVerificationUrl) + ->assertRedirect(Filament::getProfileUrl()); + + Notification::assertNotified('Email address change blocked'); + + expect($userToVerify->refresh()) + ->email->not->toBe($newEmail); + + expect(cache()->has($verificationSignature)) + ->toBeFalse(); + + $this + ->actingAs($userToVerify) + ->get($verificationUrl) + ->assertForbidden(); + + expect($userToVerify->refresh()) + ->email->not->toBe($newEmail); +}); + +it('cannot block an email change when signed in as another user', function () { + $userToVerify = User::factory()->create(); + $newEmail = fake()->email; + + $verificationUrl = Filament::getVerifyEmailChangeUrl($userToVerify, $newEmail); + + $verificationSignature = Query::new($verificationUrl)->get('signature'); + cache()->put($verificationSignature, true, ttl: now()->addHour()); + + $blockVerificationUrl = Filament::getBlockEmailChangeVerificationUrl($userToVerify, $newEmail, $verificationSignature); + + $anotherUser = User::factory()->create(); + + $this + ->actingAs($anotherUser) + ->get($blockVerificationUrl) + ->assertForbidden(); + + $this + ->actingAs($userToVerify) + ->get($verificationUrl) + ->assertRedirect(Filament::getProfileUrl()); + + expect($userToVerify->refresh()) + ->email->toBe($newEmail); +}); + +it('cannot block an email change once it has been verified', function () { + $userToVerify = User::factory()->create(); + $newEmail = fake()->email; + + $verificationUrl = Filament::getVerifyEmailChangeUrl($userToVerify, $newEmail); + + $verificationSignature = Query::new($verificationUrl)->get('signature'); + cache()->put($verificationSignature, true, ttl: now()->addHour()); + + $this + ->actingAs($userToVerify) + ->get($verificationUrl) + ->assertRedirect(Filament::getProfileUrl()); + + expect($userToVerify->refresh()) + ->email->toBe($newEmail); + + $blockVerificationUrl = Filament::getBlockEmailChangeVerificationUrl($userToVerify, $newEmail, $verificationSignature); + + $this + ->actingAs($userToVerify) + ->get($blockVerificationUrl) + ->assertRedirect(Filament::getProfileUrl()); + + Notification::assertNotified('Failed to block email address change'); + + expect($userToVerify->refresh()) + ->email->toBe($newEmail); +}); diff --git a/tests/src/Panels/Auth/EmailVerification/EmailChangeVerification/VerifyEmailChangeTest.php b/tests/src/Panels/Auth/EmailVerification/EmailChangeVerification/VerifyEmailChangeTest.php new file mode 100644 index 00000000000..4fd17a8db8b --- /dev/null +++ b/tests/src/Panels/Auth/EmailVerification/EmailChangeVerification/VerifyEmailChangeTest.php @@ -0,0 +1,115 @@ +create(); + $newEmail = fake()->email; + + expect($userToVerify->refresh()) + ->email->not->toBe($newEmail); + + $verificationUrl = Filament::getVerifyEmailChangeUrl($userToVerify, $newEmail); + + $verificationSignature = Query::new($verificationUrl)->get('signature'); + cache()->put($verificationSignature, true, ttl: now()->addHour()); + + $this + ->actingAs($userToVerify) + ->get($verificationUrl) + ->assertRedirect(Filament::getProfileUrl()); + + Notification::assertNotified('Email address changed'); + + expect($userToVerify->refresh()) + ->email->toBe($newEmail); +}); + +it('can verify an email with a custom slug', function () { + Filament::setCurrentPanel('slugs'); + + $userToVerify = User::factory()->create(); + $newEmail = fake()->email; + + $verificationUrl = Filament::getVerifyEmailChangeUrl($userToVerify, $newEmail); + + $verificationSignature = Query::new($verificationUrl)->get('signature'); + cache()->put($verificationSignature, true, ttl: now()->addHour()); + + expect($userToVerify) + ->email->not->toBe($newEmail) + ->and($verificationUrl)->toContain('/email-change-verification-test/verify-change-test/'); + + $this + ->actingAs($userToVerify) + ->get($verificationUrl) + ->assertRedirect(Filament::getProfileUrl()); + + expect($userToVerify->refresh()) + ->email->toBe($newEmail); +}); + +it('cannot verify an email when signed in as another user', function () { + $userToVerify = User::factory()->create(); + $newEmail = fake()->email; + + expect($userToVerify->refresh()) + ->email->not->toBe($newEmail); + + $verificationUrl = Filament::getVerifyEmailChangeUrl($userToVerify, $newEmail); + + $verificationSignature = Query::new($verificationUrl)->get('signature'); + cache()->put($verificationSignature, true, ttl: now()->addHour()); + + $anotherUser = User::factory()->create(); + + $this + ->actingAs($anotherUser) + ->get($verificationUrl) + ->assertForbidden(); + + expect($userToVerify->refresh()) + ->email->not->toBe($newEmail); +}); + +it('cannot verify an email change with the same URL twice', function () { + $userToVerify = User::factory()->create(); + $newEmail = fake()->email; + + expect($userToVerify->refresh()) + ->email->not->toBe($newEmail); + + $verificationUrl = Filament::getVerifyEmailChangeUrl($userToVerify, $newEmail); + + $verificationSignature = Query::new($verificationUrl)->get('signature'); + cache()->put($verificationSignature, true, ttl: now()->addHour()); + + $this + ->actingAs($userToVerify) + ->get($verificationUrl) + ->assertRedirect(Filament::getProfileUrl()); + + expect($userToVerify->refresh()) + ->email->toBe($newEmail); + + expect(cache()->has($verificationSignature)) + ->toBeFalse(); + + $this + ->actingAs($userToVerify) + ->get($verificationUrl) + ->assertForbidden(); + + $userToVerify->update(['email' => fake()->email]); + + $this + ->actingAs($userToVerify) + ->get($verificationUrl) + ->assertForbidden(); +}); diff --git a/tests/src/Panels/Auth/EmailVerification/EmailVerificationPromptTest.php b/tests/src/Panels/Auth/EmailVerification/EmailVerificationPromptTest.php index 3faa3fbc2a8..444c28ffbe0 100644 --- a/tests/src/Panels/Auth/EmailVerification/EmailVerificationPromptTest.php +++ b/tests/src/Panels/Auth/EmailVerification/EmailVerificationPromptTest.php @@ -1,8 +1,8 @@ callAction( TestAction::make('removeEmailCodeAuthentication') - ->schemaComponent('form.email_code.removeEmailCodeAuthenticationAction'), + ->schemaComponent('content.email_code.removeEmailCodeAuthenticationAction'), ['code' => $emailCodeAuthentication->getCurrentCode($user)], ) ->assertHasNoActionErrors(); @@ -64,7 +64,7 @@ it('can resend the code to the user', function () { $livewire = livewire(EditProfile::class) ->mountAction(TestAction::make('removeEmailCodeAuthentication') - ->schemaComponent('form.email_code.removeEmailCodeAuthenticationAction')); + ->schemaComponent('content.email_code.removeEmailCodeAuthenticationAction')); Notification::assertSentTimes(VerifyEmailCodeAuthentication::class, 1); @@ -89,7 +89,7 @@ livewire(EditProfile::class) ->callAction( TestAction::make('removeEmailCodeAuthentication') - ->schemaComponent('form.email_code.removeEmailCodeAuthenticationAction'), + ->schemaComponent('content.email_code.removeEmailCodeAuthenticationAction'), ['code' => ($emailCodeAuthentication->getCurrentCode($user) === '000000') ? '111111' : '000000'], ) ->assertHasActionErrors(); @@ -113,7 +113,7 @@ livewire(EditProfile::class) ->callAction( TestAction::make('removeEmailCodeAuthentication') - ->schemaComponent('form.email_code.removeEmailCodeAuthenticationAction'), + ->schemaComponent('content.email_code.removeEmailCodeAuthenticationAction'), ['code' => ''], ) ->assertHasActionErrors([ @@ -141,7 +141,7 @@ livewire(EditProfile::class) ->callAction( TestAction::make('removeEmailCodeAuthentication') - ->schemaComponent('form.email_code.removeEmailCodeAuthenticationAction'), + ->schemaComponent('content.email_code.removeEmailCodeAuthenticationAction'), ['code' => Str::limit($emailCodeAuthentication->getCurrentCode($user), limit: 5, end: '')], ) ->assertHasActionErrors([ diff --git a/tests/src/Panels/Auth/MultiFactorAuthentication/EmailCode/SetUpEmailCodeAuthenticationActionTest.php b/tests/src/Panels/Auth/MultiFactor/EmailCode/SetUpEmailCodeAuthenticationActionTest.php similarity index 89% rename from tests/src/Panels/Auth/MultiFactorAuthentication/EmailCode/SetUpEmailCodeAuthenticationActionTest.php rename to tests/src/Panels/Auth/MultiFactor/EmailCode/SetUpEmailCodeAuthenticationActionTest.php index 8a9b469abd5..3e65854678a 100644 --- a/tests/src/Panels/Auth/MultiFactorAuthentication/EmailCode/SetUpEmailCodeAuthenticationActionTest.php +++ b/tests/src/Panels/Auth/MultiFactor/EmailCode/SetUpEmailCodeAuthenticationActionTest.php @@ -1,9 +1,9 @@ mountAction(TestAction::make('setUpEmailCodeAuthentication') - ->schemaComponent('form.email_code.setUpEmailCodeAuthenticationAction')) + ->schemaComponent('content.email_code.setUpEmailCodeAuthenticationAction')) ->assertActionMounted(TestAction::make('setUpEmailCodeAuthentication') - ->schemaComponent('form.email_code.setUpEmailCodeAuthenticationAction') + ->schemaComponent('content.email_code.setUpEmailCodeAuthenticationAction') ->arguments(function (array $actualArguments): bool { $encrypted = decrypt($actualArguments['encrypted']); @@ -70,7 +70,7 @@ $livewire = livewire(EditProfile::class) ->mountAction(TestAction::make('setUpEmailCodeAuthentication') - ->schemaComponent('form.email_code.setUpEmailCodeAuthenticationAction')); + ->schemaComponent('content.email_code.setUpEmailCodeAuthenticationAction')); $encryptedActionArguments = decrypt($livewire->instance()->mountedActions[0]['arguments']['encrypted']); $secret = $encryptedActionArguments['secret']; @@ -90,7 +90,7 @@ it('can resend the code to the user', function () { $livewire = livewire(EditProfile::class) ->mountAction(TestAction::make('setUpEmailCodeAuthentication') - ->schemaComponent('form.email_code.setUpEmailCodeAuthenticationAction')); + ->schemaComponent('content.email_code.setUpEmailCodeAuthenticationAction')); Notification::assertSentTimes(VerifyEmailCodeAuthentication::class, 1); @@ -114,7 +114,7 @@ $livewire = livewire(EditProfile::class) ->mountAction(TestAction::make('setUpEmailCodeAuthentication') - ->schemaComponent('form.email_code.setUpEmailCodeAuthenticationAction')); + ->schemaComponent('content.email_code.setUpEmailCodeAuthenticationAction')); $encryptedActionArguments = decrypt($livewire->instance()->mountedActions[0]['arguments']['encrypted']); $secret = $encryptedActionArguments['secret']; @@ -144,7 +144,7 @@ livewire(EditProfile::class) ->mountAction(TestAction::make('setUpEmailCodeAuthentication') - ->schemaComponent('form.email_code.setUpEmailCodeAuthenticationAction')) + ->schemaComponent('content.email_code.setUpEmailCodeAuthenticationAction')) ->setActionData(['code' => '']) ->callMountedAction() ->assertHasActionErrors([ @@ -171,7 +171,7 @@ $livewire = livewire(EditProfile::class) ->mountAction(TestAction::make('setUpEmailCodeAuthentication') - ->schemaComponent('form.email_code.setUpEmailCodeAuthenticationAction')); + ->schemaComponent('content.email_code.setUpEmailCodeAuthenticationAction')); $encryptedActionArguments = decrypt($livewire->instance()->mountedActions[0]['arguments']['encrypted']); $secret = $encryptedActionArguments['secret']; diff --git a/tests/src/Panels/Auth/MultiFactorAuthentication/GoogleTwoFactor/Actions/RegenerateGoogleTwoFactorAuthenticationRecoveryCodesActionTest.php b/tests/src/Panels/Auth/MultiFactor/GoogleTwoFactor/Actions/RegenerateGoogleTwoFactorAuthenticationRecoveryCodesActionTest.php similarity index 82% rename from tests/src/Panels/Auth/MultiFactorAuthentication/GoogleTwoFactor/Actions/RegenerateGoogleTwoFactorAuthenticationRecoveryCodesActionTest.php rename to tests/src/Panels/Auth/MultiFactor/GoogleTwoFactor/Actions/RegenerateGoogleTwoFactorAuthenticationRecoveryCodesActionTest.php index ab719dec90c..16629198708 100644 --- a/tests/src/Panels/Auth/MultiFactorAuthentication/GoogleTwoFactor/Actions/RegenerateGoogleTwoFactorAuthenticationRecoveryCodesActionTest.php +++ b/tests/src/Panels/Auth/MultiFactor/GoogleTwoFactor/Actions/RegenerateGoogleTwoFactorAuthenticationRecoveryCodesActionTest.php @@ -1,8 +1,8 @@ callAction( TestAction::make('regenerateGoogleTwoFactorAuthenticationRecoveryCodes') - ->schemaComponent('form.google_two_factor.regenerateGoogleTwoFactorAuthenticationRecoveryCodesAction'), + ->schemaComponent('content.google_two_factor.regenerateGoogleTwoFactorAuthenticationRecoveryCodesAction'), ['code' => $googleTwoFactorAuthentication->getCurrentCode($user)], ) ->assertHasNoActionErrors() ->assertActionMounted([ TestAction::make('regenerateGoogleTwoFactorAuthenticationRecoveryCodes') - ->schemaComponent('form.google_two_factor.regenerateGoogleTwoFactorAuthenticationRecoveryCodesAction'), + ->schemaComponent('content.google_two_factor.regenerateGoogleTwoFactorAuthenticationRecoveryCodesAction'), TestAction::make('showNewRecoveryCodes') ->arguments(function (array $actualArguments): bool { if (blank($actualArguments['recoveryCodes'] ?? null)) { @@ -76,13 +76,13 @@ livewire(EditProfile::class) ->callAction( TestAction::make('regenerateGoogleTwoFactorAuthenticationRecoveryCodes') - ->schemaComponent('form.google_two_factor.regenerateGoogleTwoFactorAuthenticationRecoveryCodesAction'), + ->schemaComponent('content.google_two_factor.regenerateGoogleTwoFactorAuthenticationRecoveryCodesAction'), ['password' => 'password'], ) ->assertHasNoActionErrors() ->assertActionMounted([ TestAction::make('regenerateGoogleTwoFactorAuthenticationRecoveryCodes') - ->schemaComponent('form.google_two_factor.regenerateGoogleTwoFactorAuthenticationRecoveryCodesAction'), + ->schemaComponent('content.google_two_factor.regenerateGoogleTwoFactorAuthenticationRecoveryCodesAction'), TestAction::make('showNewRecoveryCodes') ->arguments(function (array $actualArguments): bool { if (blank($actualArguments['recoveryCodes'] ?? null)) { @@ -123,13 +123,13 @@ livewire(EditProfile::class) ->callAction( TestAction::make('regenerateGoogleTwoFactorAuthenticationRecoveryCodes') - ->schemaComponent('form.google_two_factor.regenerateGoogleTwoFactorAuthenticationRecoveryCodesAction'), + ->schemaComponent('content.google_two_factor.regenerateGoogleTwoFactorAuthenticationRecoveryCodesAction'), ['code' => ($googleTwoFactorAuthentication->getCurrentCode($user) === '000000') ? '111111' : '000000'], ) ->assertHasActionErrors() ->assertActionNotMounted([ TestAction::make('regenerateGoogleTwoFactorAuthenticationRecoveryCodes') - ->schemaComponent('form.google_two_factor.regenerateGoogleTwoFactorAuthenticationRecoveryCodesAction'), + ->schemaComponent('content.google_two_factor.regenerateGoogleTwoFactorAuthenticationRecoveryCodesAction'), TestAction::make('showNewRecoveryCodes'), ]); @@ -145,7 +145,7 @@ livewire(EditProfile::class) ->callAction( TestAction::make('regenerateGoogleTwoFactorAuthenticationRecoveryCodes') - ->schemaComponent('form.google_two_factor.regenerateGoogleTwoFactorAuthenticationRecoveryCodesAction'), + ->schemaComponent('content.google_two_factor.regenerateGoogleTwoFactorAuthenticationRecoveryCodesAction'), ['code' => ''], ) ->assertHasActionErrors([ @@ -153,7 +153,7 @@ ]) ->assertActionNotMounted([ TestAction::make('regenerateGoogleTwoFactorAuthenticationRecoveryCodes') - ->schemaComponent('form.google_two_factor.regenerateGoogleTwoFactorAuthenticationRecoveryCodesAction'), + ->schemaComponent('content.google_two_factor.regenerateGoogleTwoFactorAuthenticationRecoveryCodesAction'), TestAction::make('showNewRecoveryCodes'), ]); @@ -171,7 +171,7 @@ livewire(EditProfile::class) ->callAction( TestAction::make('regenerateGoogleTwoFactorAuthenticationRecoveryCodes') - ->schemaComponent('form.google_two_factor.regenerateGoogleTwoFactorAuthenticationRecoveryCodesAction'), + ->schemaComponent('content.google_two_factor.regenerateGoogleTwoFactorAuthenticationRecoveryCodesAction'), ['code' => Str::limit($googleTwoFactorAuthentication->getCurrentCode($user), limit: 5, end: '')], ) ->assertHasActionErrors([ @@ -179,7 +179,7 @@ ]) ->assertActionNotMounted([ TestAction::make('regenerateGoogleTwoFactorAuthenticationRecoveryCodes') - ->schemaComponent('form.google_two_factor.regenerateGoogleTwoFactorAuthenticationRecoveryCodesAction'), + ->schemaComponent('content.google_two_factor.regenerateGoogleTwoFactorAuthenticationRecoveryCodesAction'), TestAction::make('showNewRecoveryCodes'), ]); @@ -195,7 +195,7 @@ livewire(EditProfile::class) ->callAction( TestAction::make('regenerateGoogleTwoFactorAuthenticationRecoveryCodes') - ->schemaComponent('form.google_two_factor.regenerateGoogleTwoFactorAuthenticationRecoveryCodesAction'), + ->schemaComponent('content.google_two_factor.regenerateGoogleTwoFactorAuthenticationRecoveryCodesAction'), ['password' => 'incorrect-password'], ) ->assertHasActionErrors([ @@ -203,7 +203,7 @@ ]) ->assertActionNotMounted([ TestAction::make('regenerateGoogleTwoFactorAuthenticationRecoveryCodes') - ->schemaComponent('form.google_two_factor.regenerateGoogleTwoFactorAuthenticationRecoveryCodesAction'), + ->schemaComponent('content.google_two_factor.regenerateGoogleTwoFactorAuthenticationRecoveryCodesAction'), TestAction::make('showNewRecoveryCodes'), ]); diff --git a/tests/src/Panels/Auth/MultiFactorAuthentication/GoogleTwoFactor/Actions/RemoveGoogleTwoFactorAuthenticationActionTest.php b/tests/src/Panels/Auth/MultiFactor/GoogleTwoFactor/Actions/RemoveGoogleTwoFactorAuthenticationActionTest.php similarity index 91% rename from tests/src/Panels/Auth/MultiFactorAuthentication/GoogleTwoFactor/Actions/RemoveGoogleTwoFactorAuthenticationActionTest.php rename to tests/src/Panels/Auth/MultiFactor/GoogleTwoFactor/Actions/RemoveGoogleTwoFactorAuthenticationActionTest.php index 037a406cb1c..9f99e9b0c1c 100644 --- a/tests/src/Panels/Auth/MultiFactorAuthentication/GoogleTwoFactor/Actions/RemoveGoogleTwoFactorAuthenticationActionTest.php +++ b/tests/src/Panels/Auth/MultiFactor/GoogleTwoFactor/Actions/RemoveGoogleTwoFactorAuthenticationActionTest.php @@ -1,8 +1,8 @@ callAction( TestAction::make('removeGoogleTwoFactorAuthentication') - ->schemaComponent('form.google_two_factor.removeGoogleTwoFactorAuthenticationAction'), + ->schemaComponent('content.google_two_factor.removeGoogleTwoFactorAuthenticationAction'), ['code' => $googleTwoFactorAuthentication->getCurrentCode($user)], ) ->assertHasNoActionErrors(); @@ -74,7 +74,7 @@ livewire(EditProfile::class) ->mountAction(TestAction::make('removeGoogleTwoFactorAuthentication') - ->schemaComponent('form.google_two_factor.removeGoogleTwoFactorAuthenticationAction')) + ->schemaComponent('content.google_two_factor.removeGoogleTwoFactorAuthenticationAction')) ->callAction(TestAction::make('useRecoveryCode') ->schemaComponent('mountedActionSchema0.code')) ->setActionData([ @@ -112,7 +112,7 @@ livewire(EditProfile::class) ->callAction( TestAction::make('removeGoogleTwoFactorAuthentication') - ->schemaComponent('form.google_two_factor.removeGoogleTwoFactorAuthenticationAction'), + ->schemaComponent('content.google_two_factor.removeGoogleTwoFactorAuthenticationAction'), ['code' => ($googleTwoFactorAuthentication->getCurrentCode($user) === '000000') ? '111111' : '000000'], ) ->assertHasActionErrors(); @@ -144,7 +144,7 @@ livewire(EditProfile::class) ->callAction( TestAction::make('removeGoogleTwoFactorAuthentication') - ->schemaComponent('form.google_two_factor.removeGoogleTwoFactorAuthenticationAction'), + ->schemaComponent('content.google_two_factor.removeGoogleTwoFactorAuthenticationAction'), ['code' => ''], ) ->assertHasActionErrors([ @@ -180,7 +180,7 @@ livewire(EditProfile::class) ->callAction( TestAction::make('removeGoogleTwoFactorAuthentication') - ->schemaComponent('form.google_two_factor.removeGoogleTwoFactorAuthenticationAction'), + ->schemaComponent('content.google_two_factor.removeGoogleTwoFactorAuthenticationAction'), ['code' => Str::limit($googleTwoFactorAuthentication->getCurrentCode($user), limit: 5, end: '')], ) ->assertHasActionErrors([ @@ -213,7 +213,7 @@ livewire(EditProfile::class) ->mountAction(TestAction::make('removeGoogleTwoFactorAuthentication') - ->schemaComponent('form.google_two_factor.removeGoogleTwoFactorAuthenticationAction')) + ->schemaComponent('content.google_two_factor.removeGoogleTwoFactorAuthenticationAction')) ->callAction(TestAction::make('useRecoveryCode') ->schemaComponent('mountedActionSchema0.code')) ->setActionData([ @@ -252,7 +252,7 @@ livewire(EditProfile::class) ->callAction( TestAction::make('removeGoogleTwoFactorAuthentication') - ->schemaComponent('form.google_two_factor.removeGoogleTwoFactorAuthenticationAction'), + ->schemaComponent('content.google_two_factor.removeGoogleTwoFactorAuthenticationAction'), ['recoveryCode' => Arr::first($this->recoveryCodes)], ) ->assertHasActionErrors(); diff --git a/tests/src/Panels/Auth/MultiFactorAuthentication/GoogleTwoFactor/Actions/SetUpGoogleTwoFactorAuthenticationActionTest.php b/tests/src/Panels/Auth/MultiFactor/GoogleTwoFactor/Actions/SetUpGoogleTwoFactorAuthenticationActionTest.php similarity index 91% rename from tests/src/Panels/Auth/MultiFactorAuthentication/GoogleTwoFactor/Actions/SetUpGoogleTwoFactorAuthenticationActionTest.php rename to tests/src/Panels/Auth/MultiFactor/GoogleTwoFactor/Actions/SetUpGoogleTwoFactorAuthenticationActionTest.php index 50884f64931..b80383f9053 100644 --- a/tests/src/Panels/Auth/MultiFactorAuthentication/GoogleTwoFactor/Actions/SetUpGoogleTwoFactorAuthenticationActionTest.php +++ b/tests/src/Panels/Auth/MultiFactor/GoogleTwoFactor/Actions/SetUpGoogleTwoFactorAuthenticationActionTest.php @@ -1,8 +1,8 @@ mountAction(TestAction::make('setUpGoogleTwoFactorAuthentication') - ->schemaComponent('form.google_two_factor.setUpGoogleTwoFactorAuthenticationAction')) + ->schemaComponent('content.google_two_factor.setUpGoogleTwoFactorAuthenticationAction')) ->assertActionMounted(TestAction::make('setUpGoogleTwoFactorAuthentication') - ->schemaComponent('form.google_two_factor.setUpGoogleTwoFactorAuthenticationAction') + ->schemaComponent('content.google_two_factor.setUpGoogleTwoFactorAuthenticationAction') ->arguments(function (array $actualArguments): bool { $encrypted = decrypt($actualArguments['encrypted']); @@ -76,7 +76,7 @@ $livewire = livewire(EditProfile::class) ->mountAction(TestAction::make('setUpGoogleTwoFactorAuthentication') - ->schemaComponent('form.google_two_factor.setUpGoogleTwoFactorAuthenticationAction')); + ->schemaComponent('content.google_two_factor.setUpGoogleTwoFactorAuthenticationAction')); $encryptedActionArguments = decrypt($livewire->instance()->mountedActions[0]['arguments']['encrypted']); $secret = $encryptedActionArguments['secret']; @@ -120,7 +120,7 @@ $livewire = livewire(EditProfile::class) ->mountAction(TestAction::make('setUpGoogleTwoFactorAuthentication') - ->schemaComponent('form.google_two_factor.setUpGoogleTwoFactorAuthenticationAction')); + ->schemaComponent('content.google_two_factor.setUpGoogleTwoFactorAuthenticationAction')); $encryptedActionArguments = decrypt($livewire->instance()->mountedActions[0]['arguments']['encrypted']); $secret = $encryptedActionArguments['secret']; @@ -158,7 +158,7 @@ livewire(EditProfile::class) ->mountAction(TestAction::make('setUpGoogleTwoFactorAuthentication') - ->schemaComponent('form.google_two_factor.setUpGoogleTwoFactorAuthenticationAction')) + ->schemaComponent('content.google_two_factor.setUpGoogleTwoFactorAuthenticationAction')) ->setActionData(['code' => '']) ->callMountedAction() ->assertHasActionErrors([ @@ -193,7 +193,7 @@ $livewire = livewire(EditProfile::class) ->mountAction(TestAction::make('setUpGoogleTwoFactorAuthentication') - ->schemaComponent('form.google_two_factor.setUpGoogleTwoFactorAuthenticationAction')); + ->schemaComponent('content.google_two_factor.setUpGoogleTwoFactorAuthenticationAction')); $encryptedActionArguments = decrypt($livewire->instance()->mountedActions[0]['arguments']['encrypted']); $secret = $encryptedActionArguments['secret']; diff --git a/tests/src/Panels/Auth/MultiFactorAuthentication/GoogleTwoFactor/GoogleTwoFactorAuthenticationChallengeTest.php b/tests/src/Panels/Auth/MultiFactor/GoogleTwoFactor/GoogleTwoFactorAuthenticationChallengeTest.php similarity index 99% rename from tests/src/Panels/Auth/MultiFactorAuthentication/GoogleTwoFactor/GoogleTwoFactorAuthenticationChallengeTest.php rename to tests/src/Panels/Auth/MultiFactor/GoogleTwoFactor/GoogleTwoFactorAuthenticationChallengeTest.php index 131fac21e12..63343e8fcea 100644 --- a/tests/src/Panels/Auth/MultiFactorAuthentication/GoogleTwoFactor/GoogleTwoFactorAuthenticationChallengeTest.php +++ b/tests/src/Panels/Auth/MultiFactor/GoogleTwoFactor/GoogleTwoFactorAuthenticationChallengeTest.php @@ -1,9 +1,9 @@