Fix varchar(191) by replacing with 255 #135 (#376)

* Add Nullable

* Edit filament & AppServiceProvider

* Pint

* Patch tests

* Actually patching tests

* Actually patching tests

* Remove length

* Remove defaultStringLength

* Let’s see the differences

---------

Co-authored-by: Lance Pioch <git@lance.sh>
This commit is contained in:
MartinOscar 2024-06-16 19:56:18 +02:00 committed by GitHub
parent 482e8ed6b2
commit aa08e774a1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
37 changed files with 958 additions and 663 deletions

View File

@ -36,7 +36,7 @@ class CreateDatabaseHost extends CreateRecord
->required()
->live(onBlur: true)
->afterStateUpdated(fn ($state, Forms\Set $set) => $set('name', $state))
->maxLength(191),
->maxLength(255),
Forms\Components\TextInput::make('port')
->columnSpan(1)
->helperText('The port that MySQL is running on for this host.')
@ -57,12 +57,12 @@ class CreateDatabaseHost extends CreateRecord
Forms\Components\TextInput::make('username')
->helperText('The username of an account that has enough permissions to create new users and databases on the system.')
->required()
->maxLength(191),
->maxLength(255),
Forms\Components\TextInput::make('password')
->helperText('The password for the database user.')
->password()
->revealable()
->maxLength(191)
->maxLength(255)
->required(),
Forms\Components\Select::make('node_id')
->searchable()

View File

@ -32,7 +32,7 @@ class EditDatabaseHost extends EditRecord
->required()
->live(onBlur: true)
->afterStateUpdated(fn ($state, Forms\Set $set) => $set('name', $state))
->maxLength(191),
->maxLength(255),
Forms\Components\TextInput::make('port')
->columnSpan(1)
->helperText('The port that MySQL is running on for this host.')
@ -52,12 +52,12 @@ class EditDatabaseHost extends EditRecord
Forms\Components\TextInput::make('username')
->helperText('The username of an account that has enough permissions to create new users and databases on the system.')
->required()
->maxLength(191),
->maxLength(255),
Forms\Components\TextInput::make('password')
->helperText('The password for the database user.')
->password()
->revealable()
->maxLength(191)
->maxLength(255)
->required(),
Forms\Components\Select::make('node_id')
->searchable()

View File

@ -25,14 +25,14 @@ class CreateDatabase extends CreateRecord
->numeric(),
Forms\Components\TextInput::make('database')
->required()
->maxLength(191),
->maxLength(255),
Forms\Components\TextInput::make('remote')
->required()
->maxLength(191)
->maxLength(255)
->default('%'),
Forms\Components\TextInput::make('username')
->required()
->maxLength(191),
->maxLength(255),
Forms\Components\TextInput::make('password')
->password()
->revealable()

View File

@ -26,14 +26,14 @@ class EditDatabase extends EditRecord
->numeric(),
Forms\Components\TextInput::make('database')
->required()
->maxLength(191),
->maxLength(255),
Forms\Components\TextInput::make('remote')
->required()
->maxLength(191)
->maxLength(255)
->default('%'),
Forms\Components\TextInput::make('username')
->required()
->maxLength(191),
->maxLength(255),
Forms\Components\TextInput::make('password')
->password()
->revealable()

View File

@ -25,11 +25,11 @@ class CreateEgg extends CreateRecord
->schema([
Forms\Components\TextInput::make('name')
->required()
->maxLength(191)
->maxLength(255)
->columnSpan(['default' => 1, 'sm' => 1, 'md' => 2, 'lg' => 2])
->helperText('A simple, human-readable name to use as an identifier for this Egg.'),
Forms\Components\TextInput::make('author')
->maxLength(191)
->maxLength(255)
->required()
->email()
->columnSpan(['default' => 1, 'sm' => 1, 'md' => 2, 'lg' => 2])
@ -88,7 +88,7 @@ class CreateEgg extends CreateRecord
->helperText('If you would like to default to settings from another Egg select it from the menu above.'),
Forms\Components\TextInput::make('config_stop')
->required()
->maxLength(191)
->maxLength(255)
->label('Stop Command')
->helperText('The command that should be sent to server processes to stop them gracefully. If you need to send a SIGINT you should enter ^C here.'),
Forms\Components\Textarea::make('config_startup')->rows(10)->json()
@ -140,7 +140,7 @@ class CreateEgg extends CreateRecord
Forms\Components\TextInput::make('name')
->live()
->debounce(750)
->maxLength(191)
->maxLength(255)
->columnSpanFull()
->afterStateUpdated(fn (Forms\Set $set, $state) => $set('env_variable', str($state)->trim()->snake()->upper()->toString())
)
@ -148,13 +148,13 @@ class CreateEgg extends CreateRecord
Forms\Components\Textarea::make('description')->columnSpanFull(),
Forms\Components\TextInput::make('env_variable')
->label('Environment Variable')
->maxLength(191)
->maxLength(255)
->prefix('{{')
->suffix('}}')
->hintIcon('tabler-code')
->hintIconTooltip(fn ($state) => "{{{$state}}}")
->required(),
Forms\Components\TextInput::make('default_value')->maxLength(191),
Forms\Components\TextInput::make('default_value')->maxLength(255),
Forms\Components\Fieldset::make('User Permissions')
->schema([
Forms\Components\Checkbox::make('user_viewable')->label('Viewable'),
@ -173,7 +173,7 @@ class CreateEgg extends CreateRecord
Forms\Components\TextInput::make('script_container')
->required()
->maxLength(191)
->maxLength(255)
->default('alpine:3.4'),
Forms\Components\Select::make('script_entry')

View File

@ -25,7 +25,7 @@ class EditEgg extends EditRecord
->schema([
Forms\Components\TextInput::make('name')
->required()
->maxLength(191)
->maxLength(255)
->columnSpan(['default' => 1, 'sm' => 1, 'md' => 2, 'lg' => 1])
->helperText('A simple, human-readable name to use as an identifier for this Egg.'),
Forms\Components\TextInput::make('uuid')
@ -42,7 +42,7 @@ class EditEgg extends EditRecord
->helperText('A description of this Egg that will be displayed throughout the Panel as needed.'),
Forms\Components\TextInput::make('author')
->required()
->maxLength(191)
->maxLength(255)
->email()
->disabled()
->columnSpan(['default' => 1, 'sm' => 1, 'md' => 2, 'lg' => 2])
@ -95,7 +95,7 @@ class EditEgg extends EditRecord
->relationship('configFrom', 'name', ignoreRecord: true)
->helperText('If you would like to default to settings from another Egg select it from the menu above.'),
Forms\Components\TextInput::make('config_stop')
->maxLength(191)
->maxLength(255)
->label('Stop Command')
->helperText('The command that should be sent to server processes to stop them gracefully. If you need to send a SIGINT you should enter ^C here.'),
Forms\Components\Textarea::make('config_startup')->rows(10)->json()
@ -143,7 +143,7 @@ class EditEgg extends EditRecord
Forms\Components\TextInput::make('name')
->live()
->debounce(750)
->maxLength(191)
->maxLength(255)
->columnSpanFull()
->afterStateUpdated(fn (Forms\Set $set, $state) => $set('env_variable', str($state)->trim()->snake()->upper()->toString())
)
@ -151,13 +151,13 @@ class EditEgg extends EditRecord
Forms\Components\Textarea::make('description')->columnSpanFull(),
Forms\Components\TextInput::make('env_variable')
->label('Environment Variable')
->maxLength(191)
->maxLength(255)
->prefix('{{')
->suffix('}}')
->hintIcon('tabler-code')
->hintIconTooltip(fn ($state) => "{{{$state}}}")
->required(),
Forms\Components\TextInput::make('default_value')->maxLength(191),
Forms\Components\TextInput::make('default_value')->maxLength(255),
Forms\Components\Fieldset::make('User Permissions')
->schema([
Forms\Components\Checkbox::make('user_viewable')->label('Viewable'),
@ -176,12 +176,12 @@ class EditEgg extends EditRecord
Forms\Components\TextInput::make('script_container')
->required()
->maxLength(191)
->maxLength(255)
->default('alpine:3.4'),
Forms\Components\TextInput::make('script_entry')
->required()
->maxLength(191)
->maxLength(255)
->default('ash'),
MonacoEditor::make('script_install')

View File

@ -48,11 +48,11 @@ class CreateMount extends CreateRecord
Forms\Components\TextInput::make('source')
->required()
->helperText('File path on the host system to mount to a container.')
->maxLength(191),
->maxLength(255),
Forms\Components\TextInput::make('target')
->required()
->helperText('Where the mount will be accessible inside a container.')
->maxLength(191),
->maxLength(255),
Forms\Components\ToggleButtons::make('user_mountable')
->hidden()
->label('User mountable?')

View File

@ -45,11 +45,11 @@ class EditMount extends EditRecord
Forms\Components\TextInput::make('source')
->required()
->helperText('File path on the host system to mount to a container.')
->maxLength(191),
->maxLength(255),
Forms\Components\TextInput::make('target')
->required()
->helperText('Where the mount will be accessible inside a container.')
->maxLength(191),
->maxLength(255),
Forms\Components\ToggleButtons::make('user_mountable')
->hidden()
->label('User mountable?')

View File

@ -93,7 +93,7 @@ class CreateNode extends CreateRecord
$set('dns', false);
})
->maxLength(191),
->maxLength(255),
Forms\Components\TextInput::make('ip')
->disabled()

View File

@ -94,7 +94,7 @@ class EditNode extends EditRecord
$set('dns', false);
})
->maxLength(191),
->maxLength(255),
Forms\Components\TextInput::make('ip')
->disabled()

View File

@ -64,7 +64,7 @@ class CreateServer extends CreateRecord
'lg' => 3,
])
->required()
->maxLength(191),
->maxLength(255),
Forms\Components\Select::make('owner_id')
->prefixIcon('tabler-user')
@ -403,7 +403,7 @@ class CreateServer extends CreateRecord
$text = Forms\Components\TextInput::make('variable_value')
->hidden($this->shouldHideComponent(...))
->maxLength(191)
->maxLength(255)
->required(fn (Forms\Get $get) => in_array('required', explode('|', $get('rules'))))
->rules(
fn (Forms\Get $get): Closure => function (string $attribute, $value, Closure $fail) use ($get) {

View File

@ -125,7 +125,7 @@ class EditServer extends EditRecord
'lg' => 3,
])
->required()
->maxLength(191),
->maxLength(255),
Forms\Components\Select::make('owner_id')
->prefixIcon('tabler-user')
@ -172,7 +172,7 @@ class EditServer extends EditRecord
'md' => 2,
'lg' => 3,
])
->maxLength(191),
->maxLength(255),
Forms\Components\Select::make('node_id')
->label('Node')
->relationship('node', 'name')

View File

@ -52,7 +52,7 @@ class EditProfile extends \Filament\Pages\Auth\EditProfile
->label(trans('strings.username'))
->disabled()
->readOnly()
->maxLength(191)
->maxLength(255)
->unique(ignoreRecord: true)
->autofocus(),
@ -61,7 +61,7 @@ class EditProfile extends \Filament\Pages\Auth\EditProfile
->label(trans('strings.email'))
->email()
->required()
->maxLength(191)
->maxLength(255)
->unique(ignoreRecord: true),
TextInput::make('password')

View File

@ -20,8 +20,8 @@ class EditUser extends EditRecord
return $form
->schema([
Section::make()->schema([
Forms\Components\TextInput::make('username')->required()->maxLength(191),
Forms\Components\TextInput::make('email')->email()->required()->maxLength(191),
Forms\Components\TextInput::make('username')->required()->maxLength(255),
Forms\Components\TextInput::make('email')->email()->required()->maxLength(255),
Forms\Components\TextInput::make('password')
->dehydrateStateUsing(fn (string $state): string => Hash::make($state))

View File

@ -85,12 +85,12 @@ class ListUsers extends ListRecords
Forms\Components\TextInput::make('username')
->alphaNum()
->required()
->maxLength(191),
->maxLength(255),
Forms\Components\TextInput::make('email')
->email()
->required()
->unique()
->maxLength(191),
->maxLength(255),
Forms\Components\TextInput::make('password')
->hintIcon('tabler-question-mark')

View File

@ -9,14 +9,14 @@ class EggFormRequest extends AdminFormRequest
public function rules(): array
{
$rules = [
'name' => 'required|string|max:191',
'name' => 'required|string|max:255',
'description' => 'nullable|string',
'docker_images' => 'required|string',
'force_outgoing_ip' => 'sometimes|boolean',
'file_denylist' => 'array',
'startup' => 'required|string',
'config_from' => 'sometimes|bail|nullable|numeric',
'config_stop' => 'required_without:config_from|nullable|string|max:191',
'config_stop' => 'required_without:config_from|nullable|string|max:255',
'config_startup' => 'required_without:config_from|nullable|json',
'config_logs' => 'required_without:config_from|nullable|json',
'config_files' => 'required_without:config_from|nullable|json',

View File

@ -13,9 +13,9 @@ class EggVariableFormRequest extends AdminFormRequest
public function rules(): array
{
return [
'name' => 'required|string|min:1|max:191',
'name' => 'required|string|min:1|max:255',
'description' => 'sometimes|nullable|string',
'env_variable' => 'required|regex:/^[\w]{1,191}$/|notIn:' . EggVariable::RESERVED_ENV_NAMES,
'env_variable' => 'required|regex:/^[\w]{1,255}$/|notIn:' . EggVariable::RESERVED_ENV_NAMES,
'options' => 'sometimes|required|array',
'rules' => 'bail|required|string',
'default_value' => 'present',

View File

@ -10,7 +10,7 @@ class AllocationFormRequest extends AdminFormRequest
{
return [
'allocation_ip' => 'required|string',
'allocation_alias' => 'sometimes|nullable|string|max:191',
'allocation_alias' => 'sometimes|nullable|string|max:255',
'allocation_ports' => 'required|array',
];
}

View File

@ -13,8 +13,8 @@ class AdvancedSettingsFormRequest extends AdminFormRequest
{
return [
'recaptcha:enabled' => 'required|in:true,false',
'recaptcha:secret_key' => 'required|string|max:191',
'recaptcha:website_key' => 'required|string|max:191',
'recaptcha:secret_key' => 'required|string|max:255',
'recaptcha:website_key' => 'required|string|max:255',
'panel:guzzle:timeout' => 'required|integer|between:1,60',
'panel:guzzle:connect_timeout' => 'required|integer|between:1,60',
'panel:client_features:allocations:enabled' => 'required|in:true,false',

View File

@ -13,7 +13,7 @@ class BaseSettingsFormRequest extends AdminFormRequest
public function rules(): array
{
return [
'app:name' => 'required|string|max:191',
'app:name' => 'required|string|max:255',
'panel:auth:2fa_required' => 'required|integer|in:0,1,2',
'app:locale' => ['required', 'string', Rule::in(array_keys($this->getAvailableLanguages()))],
];

View File

@ -16,10 +16,10 @@ class MailSettingsFormRequest extends AdminFormRequest
'mail:mailers:smtp:host' => 'required|string',
'mail:mailers:smtp:port' => 'required|integer|between:1,65535',
'mail:mailers:smtp:encryption' => ['present', Rule::in([null, 'tls', 'ssl'])],
'mail:mailers:smtp:username' => 'nullable|string|max:191',
'mail:mailers:smtp:password' => 'nullable|string|max:191',
'mail:mailers:smtp:username' => 'nullable|string|max:255',
'mail:mailers:smtp:password' => 'nullable|string|max:255',
'mail:from:address' => 'required|string|email',
'mail:from:name' => 'nullable|string|max:191',
'mail:from:name' => 'nullable|string|max:255',
];
}

View File

@ -15,7 +15,7 @@ class StoreAllocationRequest extends ApplicationApiRequest
{
return [
'ip' => 'required|string',
'alias' => 'sometimes|nullable|string|max:191',
'alias' => 'sometimes|nullable|string|max:255',
'ports' => 'required|array',
'ports.*' => 'string',
];

View File

@ -15,7 +15,7 @@ class StoreBackupRequest extends ClientApiRequest
public function rules(): array
{
return [
'name' => 'nullable|string|max:191',
'name' => 'nullable|string|max:255',
'is_locked' => 'nullable|boolean',
'ignored' => 'nullable|string',
];

View File

@ -14,7 +14,7 @@ class StoreSubuserRequest extends SubuserRequest
public function rules(): array
{
return [
'email' => 'required|email|between:1,191',
'email' => 'required|email|between:1,255',
'permissions' => 'required|array',
'permissions.*' => 'string',
];

View File

@ -16,8 +16,8 @@ class AuditLog extends Model
public static array $validationRules = [
'uuid' => 'required|uuid',
'action' => 'required|string|max:191',
'subaction' => 'nullable|string|max:191',
'action' => 'required|string|max:255',
'subaction' => 'nullable|string|max:255',
'device' => 'array',
'device.ip_address' => 'ip',
'device.user_agent' => 'string',

View File

@ -46,7 +46,7 @@ class DatabaseHost extends Model
* Validation rules to assign to this model.
*/
public static array $validationRules = [
'name' => 'required|string|max:191',
'name' => 'required|string|max:255',
'host' => 'required|string',
'port' => 'required|numeric|between:1,65535',
'username' => 'required|string|max:32',

View File

@ -105,7 +105,7 @@ class Egg extends Model
public static array $validationRules = [
'uuid' => 'required|string|size:36',
'name' => 'required|string|max:191',
'name' => 'required|string|max:255',
'description' => 'string|nullable',
'features' => 'array|nullable',
'author' => 'required|string|email',
@ -115,7 +115,7 @@ class Egg extends Model
'docker_images.*' => 'required|string',
'startup' => 'required|nullable|string',
'config_from' => 'sometimes|bail|nullable|numeric|exists:eggs,id',
'config_stop' => 'required_without:config_from|nullable|string|max:191',
'config_stop' => 'required_without:config_from|nullable|string|max:255',
'config_startup' => 'required_without:config_from|nullable|json',
'config_logs' => 'required_without:config_from|nullable|json',
'config_files' => 'required_without:config_from|nullable|json',

View File

@ -52,9 +52,9 @@ class EggVariable extends Model
public static array $validationRules = [
'egg_id' => 'exists:eggs,id',
'sort' => 'nullable',
'name' => 'required|string|between:1,191',
'name' => 'required|string|between:1,255',
'description' => 'string',
'env_variable' => 'required|alphaDash|between:1,191|notIn:' . self::RESERVED_ENV_NAMES,
'env_variable' => 'required|alphaDash|between:1,255|notIn:' . self::RESERVED_ENV_NAMES,
'default_value' => 'string',
'user_viewable' => 'boolean',
'user_editable' => 'boolean',

View File

@ -41,7 +41,7 @@ class Mount extends Model
*/
public static array $validationRules = [
'name' => 'required|string|min:2|max:64|unique:mounts,name',
'description' => 'nullable|string|max:191',
'description' => 'nullable|string|max:255',
'source' => 'required|string',
'target' => 'required|string',
'read_only' => 'sometimes|boolean',

View File

@ -76,7 +76,7 @@ class Schedule extends Model
public static array $validationRules = [
'server_id' => 'required|exists:servers,id',
'name' => 'required|string|max:191',
'name' => 'required|string|max:255',
'cron_day_of_week' => 'required|string',
'cron_month' => 'required|string',
'cron_day_of_month' => 'required|string',

View File

@ -139,9 +139,9 @@ class Server extends Model
protected $guarded = ['id', self::CREATED_AT, self::UPDATED_AT, 'deleted_at', 'installed_at'];
public static array $validationRules = [
'external_id' => 'sometimes|nullable|string|between:1,191|unique:servers',
'external_id' => 'sometimes|nullable|string|between:1,255|unique:servers',
'owner_id' => 'required|integer|exists:users,id',
'name' => 'required|string|min:1|max:191',
'name' => 'required|string|min:1|max:255',
'node_id' => 'required|exists:nodes,id',
'description' => 'string',
'status' => 'nullable|string',
@ -156,7 +156,7 @@ class Server extends Model
'egg_id' => 'required|exists:eggs,id',
'startup' => 'required|string',
'skip_scripts' => 'sometimes|boolean',
'image' => 'required|string|max:191',
'image' => 'required|string|max:255',
'database_limit' => 'present|nullable|integer|min:0',
'allocation_limit' => 'sometimes|nullable|integer|min:0',
'backup_limit' => 'present|nullable|integer|min:0',

View File

@ -21,7 +21,7 @@ class Setting extends Model
protected $fillable = ['key', 'value'];
public static array $validationRules = [
'key' => 'required|string|between:1,191',
'key' => 'required|string|between:1,255',
'value' => 'string',
];

View File

@ -155,11 +155,11 @@ class User extends Model implements AuthenticatableContract, AuthorizableContrac
*/
public static array $validationRules = [
'uuid' => 'nullable|string|size:36|unique:users,uuid',
'email' => 'required|email|between:1,191|unique:users,email',
'external_id' => 'sometimes|nullable|string|max:191|unique:users,external_id',
'username' => 'required|between:1,191|unique:users,username',
'name_first' => 'nullable|string|between:0,191',
'name_last' => 'nullable|string|between:0,191',
'email' => 'required|email|between:1,255|unique:users,email',
'external_id' => 'sometimes|nullable|string|max:255|unique:users,external_id',
'username' => 'required|between:1,255|unique:users,username',
'name_first' => 'nullable|string|between:0,255',
'name_last' => 'nullable|string|between:0,255',
'password' => 'sometimes|nullable|string',
'root_admin' => 'boolean',
'language' => 'string',

View File

@ -16,7 +16,6 @@ use Illuminate\Support\Facades\Broadcast;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\URL;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
@ -30,8 +29,6 @@ class AppServiceProvider extends ServiceProvider
*/
public function boot(): void
{
Schema::defaultStringLength(191);
$versionData = app(SoftwareVersionService::class)->versionData();
View::share('appVersion', $versionData['version'] ?? 'undefined');
View::share('appIsGit', $versionData['is_git'] ?? false);

View File

@ -0,0 +1,289 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('activity_log_subjects', function (Blueprint $table) {
$table->string('subject_type')->change();
});
Schema::table('activity_logs', function (Blueprint $table) {
$table->string('event')->change();
$table->string('ip')->change();
$table->string('actor_type')->nullable()->default(null)->change();
});
Schema::table('allocations', function (Blueprint $table) {
$table->string('ip')->change();
$table->string('notes')->nullable()->default(null)->change();
});
Schema::table('audit_logs', function (Blueprint $table) {
$table->string('action')->change();
$table->string('subaction')->nullable()->default(null)->change();
});
Schema::table('backups', function (Blueprint $table) {
$table->string('name')->change();
$table->string('disk')->change();
$table->string('checksum')->nullable()->default(null)->change();
});
Schema::table('database_hosts', function (Blueprint $table) {
$table->string('name')->change();
$table->string('host')->change();
$table->string('username')->change();
});
Schema::table('databases', function (Blueprint $table) {
$table->string('database')->change();
$table->string('username')->change();
$table->string('remote')->default('%')->change();
});
Schema::table('egg_variables', function (Blueprint $table) {
$table->string('name')->change();
$table->string('env_variable')->change();
});
Schema::table('eggs', function (Blueprint $table) {
$table->string('author')->change();
$table->string('name')->change();
$table->string('config_stop')->nullable()->default(null)->change();
$table->string('script_container')->default('alpine:3.4')->change();
$table->string('script_entry')->default('ash')->change();
});
Schema::table('failed_jobs', function (Blueprint $table) {
$table->string('uuid')->nullable()->default(null)->change();
});
Schema::table('jobs', function (Blueprint $table) {
$table->string('queue')->change();
});
Schema::table('migrations', function (Blueprint $table) {
$table->string('migration')->change();
});
Schema::table('mounts', function (Blueprint $table) {
$table->string('name')->change();
$table->string('source')->change();
$table->string('target')->change();
});
Schema::table('nodes', function (Blueprint $table) {
$table->string('name')->change();
$table->string('fqdn')->change();
$table->string('scheme')->default('https')->change();
$table->string('daemon_sftp_alias')->nullable()->default(null)->change();
$table->string('daemon_base')->change();
});
Schema::table('notifications', function (Blueprint $table) {
$table->string('id')->change();
$table->string('type')->change();
$table->string('notifiable_type')->change();
});
Schema::table('password_resets', function (Blueprint $table) {
$table->string('email')->change();
$table->string('token')->change();
});
Schema::table('recovery_tokens', function (Blueprint $table) {
$table->string('token')->change();
});
Schema::table('schedules', function (Blueprint $table) {
$table->string('name')->change();
$table->string('cron_day_of_week')->change();
$table->string('cron_month')->change();
$table->string('cron_day_of_month')->change();
$table->string('cron_hour')->change();
$table->string('cron_minute')->change();
});
Schema::table('servers', function (Blueprint $table) {
$table->string('external_id')->nullable()->default(null)->change();
$table->string('name')->change();
$table->string('status')->nullable()->default(null)->change();
$table->string('threads')->nullable()->default(null)->change();
$table->string('image')->change();
});
Schema::table('sessions', function (Blueprint $table) {
$table->string('id')->change();
});
Schema::table('settings', function (Blueprint $table) {
$table->string('key')->change();
});
Schema::table('tasks', function (Blueprint $table) {
$table->string('action')->change();
});
Schema::table('user_ssh_keys', function (Blueprint $table) {
$table->string('name')->change();
$table->string('fingerprint')->change();
});
Schema::table('users', function (Blueprint $table) {
$table->string('external_id')->nullable()->default(null)->change();
$table->string('username')->change();
$table->string('email')->change();
$table->string('name_first')->nullable()->default(null)->change();
$table->string('name_last')->nullable()->default(null)->change();
$table->string('remember_token')->nullable()->default(null)->change();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('activity_log_subjects', function (Blueprint $table) {
$table->string('subject_type', 191)->change();
});
Schema::table('activity_logs', function (Blueprint $table) {
$table->string('event', 191)->change();
$table->string('ip', 191)->change();
$table->string('actor_type', 191)->nullable()->default(null)->change();
});
Schema::table('allocations', function (Blueprint $table) {
$table->string('ip', 191)->change();
$table->string('notes', 191)->nullable()->default(null)->change();
});
Schema::table('audit_logs', function (Blueprint $table) {
$table->string('action', 191)->change();
$table->string('subaction', 191)->nullable()->default(null)->change();
});
Schema::table('backups', function (Blueprint $table) {
$table->string('name', 191)->change();
$table->string('disk', 191)->change();
$table->string('checksum', 191)->nullable()->default(null)->change();
});
Schema::table('database_hosts', function (Blueprint $table) {
$table->string('name', 191)->change();
$table->string('host', 191)->change();
$table->string('username', 191)->change();
});
Schema::table('databases', function (Blueprint $table) {
$table->string('database', 191)->change();
$table->string('username', 191)->change();
$table->string('remote', 191)->default('%', 191)->change();
});
Schema::table('egg_variables', function (Blueprint $table) {
$table->string('name', 191)->change();
$table->string('env_variable', 191)->change();
});
Schema::table('eggs', function (Blueprint $table) {
$table->string('author', 191)->change();
$table->string('name', 191)->change();
$table->string('config_stop', 191)->nullable()->default(null)->change();
$table->string('script_container', 191)->default('alpine:3.4', 191)->change();
$table->string('script_entry', 191)->default('ash', 191)->change();
});
Schema::table('failed_jobs', function (Blueprint $table) {
$table->string('uuid', 191)->nullable()->default(null)->change();
});
Schema::table('jobs', function (Blueprint $table) {
$table->string('queue', 191)->change();
});
Schema::table('migrations', function (Blueprint $table) {
$table->string('migration', 191)->change();
});
Schema::table('mounts', function (Blueprint $table) {
$table->string('name', 191)->change();
$table->string('source', 191)->change();
$table->string('target', 191)->change();
});
Schema::table('nodes', function (Blueprint $table) {
$table->string('name', 191)->change();
$table->string('fqdn', 191)->change();
$table->string('scheme', 191)->default('https', 191)->change();
$table->string('daemon_sftp_alias', 191)->nullable()->default(null)->change();
$table->string('daemon_base', 191)->change();
});
Schema::table('notifications', function (Blueprint $table) {
$table->string('id', 191)->change();
$table->string('type', 191)->change();
$table->string('notifiable_type', 191)->change();
});
Schema::table('password_resets', function (Blueprint $table) {
$table->string('email', 191)->change();
$table->string('token', 191)->change();
});
Schema::table('recovery_tokens', function (Blueprint $table) {
$table->string('token', 191)->change();
});
Schema::table('schedules', function (Blueprint $table) {
$table->string('name', 191)->change();
$table->string('cron_day_of_week', 191)->change();
$table->string('cron_month', 191)->change();
$table->string('cron_day_of_month', 191)->change();
$table->string('cron_hour', 191)->change();
$table->string('cron_minute', 191)->change();
});
Schema::table('servers', function (Blueprint $table) {
$table->string('external_id', 191)->nullable()->default(null)->change();
$table->string('name', 191)->change();
$table->string('status', 191)->nullable()->default(null)->change();
$table->string('threads', 191)->nullable()->default(null)->change();
$table->string('image', 191)->change();
});
Schema::table('sessions', function (Blueprint $table) {
$table->string('id', 191)->change();
});
Schema::table('settings', function (Blueprint $table) {
$table->string('key', 191)->change();
});
Schema::table('tasks', function (Blueprint $table) {
$table->string('action', 191)->change();
});
Schema::table('user_ssh_keys', function (Blueprint $table) {
$table->string('name', 191)->change();
$table->string('fingerprint', 191)->change();
});
Schema::table('users', function (Blueprint $table) {
$table->string('external_id', 191)->nullable()->default(null)->change();
$table->string('username', 191)->change();
$table->string('email', 191)->change();
$table->string('name_first', 191)->nullable()->default(null)->change();
$table->string('name_last', 191)->nullable()->default(null)->change();
$table->string('remember_token', 191)->nullable()->default(null)->change();
});
}
};

File diff suppressed because it is too large Load Diff

View File

@ -80,7 +80,7 @@ class CreateServerSubuserTest extends ClientApiIntegrationTestCase
{
[$user, $server] = $this->generateTestAccount();
$email = str_repeat(Str::random(20), 9) . '1@gmail.com'; // 191 is the hard limit for the column in MySQL.
$email = str_repeat(Str::random(35), 7) . '@gmail.com'; // 255 is the hard limit for the column in MySQL.
$response = $this->actingAs($user)->postJson($this->link($server) . '/users', [
'email' => $email,
@ -99,7 +99,7 @@ class CreateServerSubuserTest extends ClientApiIntegrationTestCase
]);
$response->assertStatus(Response::HTTP_UNPROCESSABLE_ENTITY);
$response->assertJsonPath('errors.0.detail', 'The email must be between 1 and 191 characters.');
$response->assertJsonPath('errors.0.detail', 'The email must be between 1 and 255 characters.');
$response->assertJsonPath('errors.0.meta.source_field', 'email');
}