Fix FLEXIAPI-277 Restrict authorized ini keys that can be set to prevent...

This commit is contained in:
Timothée Jaussoin 2025-04-02 09:25:56 +00:00
parent b493e9006e
commit fd0fcd7045
6 changed files with 207 additions and 162 deletions

View file

@ -27,6 +27,7 @@ v1.7
- Fix FLEXIAPI-275 Add names in Spaces - Fix FLEXIAPI-275 Add names in Spaces
- Fix FLEXIAPI-278 Complete and reorganize the Markdown documentation - Fix FLEXIAPI-278 Complete and reorganize the Markdown documentation
- Fix FLEXIAPI-233 Add External Accounts (new version) - Fix FLEXIAPI-233 Add External Accounts (new version)
- Fix FLEXIAPI-277 Restrict authorized ini keys that can be set to prevent conflict with the existing ones set in the UI
v1.6 v1.6
---- ----

View file

@ -148,7 +148,7 @@ class SpaceController extends Controller
{ {
$request->validate([ $request->validate([
'newsletter_registration_address' => 'nullable|email', 'newsletter_registration_address' => 'nullable|email',
'custom_provisioning_entries' => ['nullable', new Ini] 'custom_provisioning_entries' => ['nullable', new Ini(Space::FORBIDDEN_KEYS)]
]); ]);
$space->copyright_text = $request->get('copyright_text'); $space->copyright_text = $request->get('copyright_text');

View file

@ -21,6 +21,7 @@ namespace App\Http\Controllers\Api\Admin;
use App\Space; use App\Space;
use App\Rules\Domain; use App\Rules\Domain;
use App\Rules\Ini;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@ -40,7 +41,8 @@ class SpaceController extends Controller
'domain' => ['required', 'unique:spaces', new Domain()], 'domain' => ['required', 'unique:spaces', new Domain()],
'host' => ['required', 'unique:spaces', new Domain()], 'host' => ['required', 'unique:spaces', new Domain()],
'max_accounts' => 'nullable|integer', 'max_accounts' => 'nullable|integer',
'expire_at' => 'nullable|date|after_or_equal:today' 'expire_at' => 'nullable|date|after_or_equal:today',
'custom_provisioning_entries' => ['nullable', new Ini(Space::FORBIDDEN_KEYS)]
]); ]);
$space = new Space; $space = new Space;
@ -105,6 +107,7 @@ class SpaceController extends Controller
'max_accounts' => 'required|integer', 'max_accounts' => 'required|integer',
'expire_at' => 'nullable|date|after_or_equal:today', 'expire_at' => 'nullable|date|after_or_equal:today',
'custom_provisioning_entries' => ['nullable', new Ini(Space::FORBIDDEN_KEYS)],
'custom_provisioning_overwrite_all' => 'required|boolean', 'custom_provisioning_overwrite_all' => 'required|boolean',
'provisioning_use_linphone_provisioning_header' => 'required|boolean', 'provisioning_use_linphone_provisioning_header' => 'required|boolean',
'custom_theme' => 'required|boolean', 'custom_theme' => 'required|boolean',

View file

@ -23,13 +23,39 @@ use Illuminate\Contracts\Validation\Rule;
class Ini implements Rule class Ini implements Rule
{ {
public function passes($attribute, $value) private $forbiddenKeys = [];
private $forbiddenKeysFound = [];
public function __construct($forbiddenKeys)
{ {
return parse_ini_string($value) != false; $this->forbiddenKeys = $forbiddenKeys;
}
public function passes($attribute, $value): bool
{
$parsed = parse_ini_string($value);
if ($parsed == false) {
return false;
}
foreach (array_keys($parsed) as $key) {
if (in_array($key, $this->forbiddenKeys)) {
array_push($this->forbiddenKeysFound, $key);
}
}
return empty($this->forbiddenKeysFound);
} }
public function message() public function message()
{ {
return 'Invalid ini format'; $message = 'Invalid ini format.';
if (!empty($this->forbiddenKeysFound)) {
$message .= ' The following settings cannot be set, they are already handled by the platform: ' . implode(', ', $this->forbiddenKeysFound);
}
return $message;
} }
} }

View file

@ -11,6 +11,26 @@ class Space extends Model
{ {
use HasFactory; use HasFactory;
public const FORBIDDEN_KEYS = [
'disable_chat_feature',
'disable_meetings_feature',
'disable_broadcast_feature',
'max_account',
'hide_settings',
'hide_account_settings',
'disable_call_recordings_feature',
'only_display_sip_uri_username',
'assistant_hide_create_account',
'assistant_disable_qr_code',
'assistant_hide_third_party_account',
'copyright_text',
'intro_registration_text',
'confirmed_registration_text',
'newsletter_registration_address',
'account_proxy_registrar_address',
'account_realm'
];
protected $hidden = ['id']; protected $hidden = ['id'];
protected $casts = [ protected $casts = [
'super' => 'boolean', 'super' => 'boolean',

309
flexiapi/composer.lock generated
View file

@ -951,16 +951,16 @@
}, },
{ {
"name": "egulias/email-validator", "name": "egulias/email-validator",
"version": "4.0.3", "version": "4.0.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/egulias/EmailValidator.git", "url": "https://github.com/egulias/EmailValidator.git",
"reference": "b115554301161fa21467629f1e1391c1936de517" "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/b115554301161fa21467629f1e1391c1936de517", "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa",
"reference": "b115554301161fa21467629f1e1391c1936de517", "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1006,7 +1006,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/egulias/EmailValidator/issues", "issues": "https://github.com/egulias/EmailValidator/issues",
"source": "https://github.com/egulias/EmailValidator/tree/4.0.3" "source": "https://github.com/egulias/EmailValidator/tree/4.0.4"
}, },
"funding": [ "funding": [
{ {
@ -1014,7 +1014,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2024-12-27T00:36:43+00:00" "time": "2025-03-06T22:45:56+00:00"
}, },
{ {
"name": "endroid/qr-code", "name": "endroid/qr-code",
@ -1321,16 +1321,16 @@
}, },
{ {
"name": "giggsey/libphonenumber-for-php-lite", "name": "giggsey/libphonenumber-for-php-lite",
"version": "8.13.55", "version": "9.0.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/giggsey/libphonenumber-for-php-lite.git", "url": "https://github.com/giggsey/libphonenumber-for-php-lite.git",
"reference": "e077137a4aa0333bee139b3a1d2f2919492f3827" "reference": "124cd8095f49df71a52b920f9e50d63e5efd6a14"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/giggsey/libphonenumber-for-php-lite/zipball/e077137a4aa0333bee139b3a1d2f2919492f3827", "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php-lite/zipball/124cd8095f49df71a52b920f9e50d63e5efd6a14",
"reference": "e077137a4aa0333bee139b3a1d2f2919492f3827", "reference": "124cd8095f49df71a52b920f9e50d63e5efd6a14",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1342,18 +1342,19 @@
}, },
"require-dev": { "require-dev": {
"ext-dom": "*", "ext-dom": "*",
"friendsofphp/php-cs-fixer": "^3.12", "friendsofphp/php-cs-fixer": "^3.71",
"infection/infection": "^0.28", "infection/infection": "^0.28.0",
"pear/pear-core-minimal": "^1.10.11", "nette/php-generator": "^4.1",
"pear/pear_exception": "^1.0.2", "php-coveralls/php-coveralls": "^2.7",
"pear/versioncontrol_git": "^0.7", "phpstan/extension-installer": "^1.4.3",
"phing/phing": "^2.17.4", "phpstan/phpstan": "^2.1.7",
"phpstan/extension-installer": "^1.2", "phpstan/phpstan-deprecation-rules": "^2.0.1",
"phpstan/phpstan": "^1.8", "phpstan/phpstan-phpunit": "^2.0.4",
"phpstan/phpstan-phpunit": "^1.2", "phpstan/phpstan-strict-rules": "^2.0.3",
"phpunit/phpunit": "^10.5", "phpunit/phpunit": "^10.5.45",
"symfony/console": "^6.0", "symfony/console": "^6.4",
"symfony/var-exporter": "^6.0" "symfony/filesystem": "^6.4",
"symfony/process": "^6.4"
}, },
"suggest": { "suggest": {
"giggsey/libphonenumber-for-php": "Use libphonenumber-for-php for geocoding, carriers, timezones and matching" "giggsey/libphonenumber-for-php": "Use libphonenumber-for-php for geocoding, carriers, timezones and matching"
@ -1361,19 +1362,13 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "8.x-dev" "dev-master": "9.x-dev"
} }
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"libphonenumber\\": "src/" "libphonenumber\\": "src/"
}, }
"exclude-from-classmap": [
"/src/data/",
"/src/carrier/data/",
"/src/geocoding/data/",
"/src/timezone/data/"
]
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
"license": [ "license": [
@ -1400,7 +1395,7 @@
"issues": "https://github.com/giggsey/libphonenumber-for-php-lite/issues", "issues": "https://github.com/giggsey/libphonenumber-for-php-lite/issues",
"source": "https://github.com/giggsey/libphonenumber-for-php-lite" "source": "https://github.com/giggsey/libphonenumber-for-php-lite"
}, },
"time": "2025-02-14T08:11:44+00:00" "time": "2025-03-28T09:51:47+00:00"
}, },
{ {
"name": "graham-campbell/result-type", "name": "graham-campbell/result-type",
@ -1466,16 +1461,16 @@
}, },
{ {
"name": "guzzlehttp/guzzle", "name": "guzzlehttp/guzzle",
"version": "7.9.2", "version": "7.9.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/guzzle/guzzle.git", "url": "https://github.com/guzzle/guzzle.git",
"reference": "d281ed313b989f213357e3be1a179f02196ac99b" "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7b2f29fe81dc4da0ca0ea7d42107a0845946ea77",
"reference": "d281ed313b989f213357e3be1a179f02196ac99b", "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1572,7 +1567,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/guzzle/guzzle/issues", "issues": "https://github.com/guzzle/guzzle/issues",
"source": "https://github.com/guzzle/guzzle/tree/7.9.2" "source": "https://github.com/guzzle/guzzle/tree/7.9.3"
}, },
"funding": [ "funding": [
{ {
@ -1588,20 +1583,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-07-24T11:22:20+00:00" "time": "2025-03-27T13:37:11+00:00"
}, },
{ {
"name": "guzzlehttp/promises", "name": "guzzlehttp/promises",
"version": "2.0.4", "version": "2.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/guzzle/promises.git", "url": "https://github.com/guzzle/promises.git",
"reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455" "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455", "url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c",
"reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455", "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1655,7 +1650,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/guzzle/promises/issues", "issues": "https://github.com/guzzle/promises/issues",
"source": "https://github.com/guzzle/promises/tree/2.0.4" "source": "https://github.com/guzzle/promises/tree/2.2.0"
}, },
"funding": [ "funding": [
{ {
@ -1671,20 +1666,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-10-17T10:06:22+00:00" "time": "2025-03-27T13:27:01+00:00"
}, },
{ {
"name": "guzzlehttp/psr7", "name": "guzzlehttp/psr7",
"version": "2.7.0", "version": "2.7.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/guzzle/psr7.git", "url": "https://github.com/guzzle/psr7.git",
"reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", "url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16",
"reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1771,7 +1766,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/guzzle/psr7/issues", "issues": "https://github.com/guzzle/psr7/issues",
"source": "https://github.com/guzzle/psr7/tree/2.7.0" "source": "https://github.com/guzzle/psr7/tree/2.7.1"
}, },
"funding": [ "funding": [
{ {
@ -1787,7 +1782,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-07-18T11:15:46+00:00" "time": "2025-03-27T12:30:47+00:00"
}, },
{ {
"name": "guzzlehttp/uri-template", "name": "guzzlehttp/uri-template",
@ -1877,16 +1872,16 @@
}, },
{ {
"name": "laravel/framework", "name": "laravel/framework",
"version": "v10.48.28", "version": "v10.48.29",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/framework.git", "url": "https://github.com/laravel/framework.git",
"reference": "e714e7e0c1ae51bf747e3df5b10fa60c54e3e0e1" "reference": "8f7f9247cb8aad1a769d6b9815a6623d89b46b47"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/e714e7e0c1ae51bf747e3df5b10fa60c54e3e0e1", "url": "https://api.github.com/repos/laravel/framework/zipball/8f7f9247cb8aad1a769d6b9815a6623d89b46b47",
"reference": "e714e7e0c1ae51bf747e3df5b10fa60c54e3e0e1", "reference": "8f7f9247cb8aad1a769d6b9815a6623d89b46b47",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2080,7 +2075,7 @@
"issues": "https://github.com/laravel/framework/issues", "issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework" "source": "https://github.com/laravel/framework"
}, },
"time": "2025-01-31T10:04:17+00:00" "time": "2025-03-12T14:42:01+00:00"
}, },
{ {
"name": "laravel/prompts", "name": "laravel/prompts",
@ -2849,16 +2844,16 @@
}, },
{ {
"name": "monolog/monolog", "name": "monolog/monolog",
"version": "3.8.1", "version": "3.9.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Seldaek/monolog.git", "url": "https://github.com/Seldaek/monolog.git",
"reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4" "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/aef6ee73a77a66e404dd6540934a9ef1b3c855b4", "url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6",
"reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4", "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2936,7 +2931,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/Seldaek/monolog/issues", "issues": "https://github.com/Seldaek/monolog/issues",
"source": "https://github.com/Seldaek/monolog/tree/3.8.1" "source": "https://github.com/Seldaek/monolog/tree/3.9.0"
}, },
"funding": [ "funding": [
{ {
@ -2948,7 +2943,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-12-05T17:15:07+00:00" "time": "2025-03-24T10:02:05+00:00"
}, },
{ {
"name": "myclabs/deep-copy", "name": "myclabs/deep-copy",
@ -3242,16 +3237,16 @@
}, },
{ {
"name": "nette/utils", "name": "nette/utils",
"version": "v4.0.5", "version": "v4.0.6",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/nette/utils.git", "url": "https://github.com/nette/utils.git",
"reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96" "reference": "ce708655043c7050eb050df361c5e313cf708309"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/nette/utils/zipball/736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", "url": "https://api.github.com/repos/nette/utils/zipball/ce708655043c7050eb050df361c5e313cf708309",
"reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", "reference": "ce708655043c7050eb050df361c5e313cf708309",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3322,9 +3317,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/nette/utils/issues", "issues": "https://github.com/nette/utils/issues",
"source": "https://github.com/nette/utils/tree/v4.0.5" "source": "https://github.com/nette/utils/tree/v4.0.6"
}, },
"time": "2024-08-07T15:39:19+00:00" "time": "2025-03-30T21:06:30+00:00"
}, },
{ {
"name": "nikic/php-parser", "name": "nikic/php-parser",
@ -4199,20 +4194,20 @@
}, },
{ {
"name": "propaganistas/laravel-phone", "name": "propaganistas/laravel-phone",
"version": "5.3.4", "version": "5.3.6",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Propaganistas/Laravel-Phone.git", "url": "https://github.com/Propaganistas/Laravel-Phone.git",
"reference": "a76eae715b927f8f30add4bb2228926091d3e152" "reference": "89f26e8336cf8f8041609148b4fef752f0bd720e"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Propaganistas/Laravel-Phone/zipball/a76eae715b927f8f30add4bb2228926091d3e152", "url": "https://api.github.com/repos/Propaganistas/Laravel-Phone/zipball/89f26e8336cf8f8041609148b4fef752f0bd720e",
"reference": "a76eae715b927f8f30add4bb2228926091d3e152", "reference": "89f26e8336cf8f8041609148b4fef752f0bd720e",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"giggsey/libphonenumber-for-php-lite": "^8.13.35", "giggsey/libphonenumber-for-php-lite": "^8.13.35|^9.0.0",
"illuminate/contracts": "^10.0|^11.0|^12.0", "illuminate/contracts": "^10.0|^11.0|^12.0",
"illuminate/support": "^10.0|^11.0|^12.0", "illuminate/support": "^10.0|^11.0|^12.0",
"illuminate/validation": "^10.0|^11.0|^12.0", "illuminate/validation": "^10.0|^11.0|^12.0",
@ -4258,7 +4253,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/Propaganistas/Laravel-Phone/issues", "issues": "https://github.com/Propaganistas/Laravel-Phone/issues",
"source": "https://github.com/Propaganistas/Laravel-Phone/tree/5.3.4" "source": "https://github.com/Propaganistas/Laravel-Phone/tree/5.3.6"
}, },
"funding": [ "funding": [
{ {
@ -4266,7 +4261,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2025-02-24T15:09:06+00:00" "time": "2025-03-21T09:07:26+00:00"
}, },
{ {
"name": "psr/cache", "name": "psr/cache",
@ -4731,16 +4726,16 @@
}, },
{ {
"name": "psy/psysh", "name": "psy/psysh",
"version": "v0.12.7", "version": "v0.12.8",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/bobthecow/psysh.git", "url": "https://github.com/bobthecow/psysh.git",
"reference": "d73fa3c74918ef4522bb8a3bf9cab39161c4b57c" "reference": "85057ceedee50c49d4f6ecaff73ee96adb3b3625"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/bobthecow/psysh/zipball/d73fa3c74918ef4522bb8a3bf9cab39161c4b57c", "url": "https://api.github.com/repos/bobthecow/psysh/zipball/85057ceedee50c49d4f6ecaff73ee96adb3b3625",
"reference": "d73fa3c74918ef4522bb8a3bf9cab39161c4b57c", "reference": "85057ceedee50c49d4f6ecaff73ee96adb3b3625",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -4804,9 +4799,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/bobthecow/psysh/issues", "issues": "https://github.com/bobthecow/psysh/issues",
"source": "https://github.com/bobthecow/psysh/tree/v0.12.7" "source": "https://github.com/bobthecow/psysh/tree/v0.12.8"
}, },
"time": "2024-12-10T01:58:33+00:00" "time": "2025-03-16T03:05:19+00:00"
}, },
{ {
"name": "ralouphie/getallheaders", "name": "ralouphie/getallheaders",
@ -4854,16 +4849,16 @@
}, },
{ {
"name": "ramsey/collection", "name": "ramsey/collection",
"version": "2.1.0", "version": "2.1.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/ramsey/collection.git", "url": "https://github.com/ramsey/collection.git",
"reference": "3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109" "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/ramsey/collection/zipball/3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109", "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2",
"reference": "3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109", "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -4924,9 +4919,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/ramsey/collection/issues", "issues": "https://github.com/ramsey/collection/issues",
"source": "https://github.com/ramsey/collection/tree/2.1.0" "source": "https://github.com/ramsey/collection/tree/2.1.1"
}, },
"time": "2025-03-02T04:48:29+00:00" "time": "2025-03-22T05:38:12+00:00"
}, },
{ {
"name": "ramsey/uuid", "name": "ramsey/uuid",
@ -5527,16 +5522,16 @@
}, },
{ {
"name": "respect/validation", "name": "respect/validation",
"version": "2.4.0", "version": "2.4.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Respect/Validation.git", "url": "https://github.com/Respect/Validation.git",
"reference": "48b38bd91e0badbc2c4381dce726b09fd68850d9" "reference": "d1575eb4dde7b06f8dbc5e8d84dffb87931a40bd"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Respect/Validation/zipball/48b38bd91e0badbc2c4381dce726b09fd68850d9", "url": "https://api.github.com/repos/Respect/Validation/zipball/d1575eb4dde7b06f8dbc5e8d84dffb87931a40bd",
"reference": "48b38bd91e0badbc2c4381dce726b09fd68850d9", "reference": "d1575eb4dde7b06f8dbc5e8d84dffb87931a40bd",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -5589,9 +5584,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/Respect/Validation/issues", "issues": "https://github.com/Respect/Validation/issues",
"source": "https://github.com/Respect/Validation/tree/2.4.0" "source": "https://github.com/Respect/Validation/tree/2.4.1"
}, },
"time": "2025-01-07T00:34:58+00:00" "time": "2025-01-11T00:06:34+00:00"
}, },
{ {
"name": "rvxlab/hcaptcha", "name": "rvxlab/hcaptcha",
@ -6820,16 +6815,16 @@
}, },
{ {
"name": "symfony/console", "name": "symfony/console",
"version": "v6.4.17", "version": "v6.4.20",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/console.git", "url": "https://github.com/symfony/console.git",
"reference": "799445db3f15768ecc382ac5699e6da0520a0a04" "reference": "2e4af9c952617cc3f9559ff706aee420a8464c36"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/799445db3f15768ecc382ac5699e6da0520a0a04", "url": "https://api.github.com/repos/symfony/console/zipball/2e4af9c952617cc3f9559ff706aee420a8464c36",
"reference": "799445db3f15768ecc382ac5699e6da0520a0a04", "reference": "2e4af9c952617cc3f9559ff706aee420a8464c36",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -6894,7 +6889,7 @@
"terminal" "terminal"
], ],
"support": { "support": {
"source": "https://github.com/symfony/console/tree/v6.4.17" "source": "https://github.com/symfony/console/tree/v6.4.20"
}, },
"funding": [ "funding": [
{ {
@ -6910,7 +6905,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-12-07T12:07:30+00:00" "time": "2025-03-03T17:16:38+00:00"
}, },
{ {
"name": "symfony/css-selector", "name": "symfony/css-selector",
@ -7046,16 +7041,16 @@
}, },
{ {
"name": "symfony/error-handler", "name": "symfony/error-handler",
"version": "v6.4.19", "version": "v6.4.20",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/error-handler.git", "url": "https://github.com/symfony/error-handler.git",
"reference": "3d4e55cd2b8f1979a65eba9ab749d6466c316f71" "reference": "aa3bcf4f7674719df078e61cc8062e5b7f752031"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/3d4e55cd2b8f1979a65eba9ab749d6466c316f71", "url": "https://api.github.com/repos/symfony/error-handler/zipball/aa3bcf4f7674719df078e61cc8062e5b7f752031",
"reference": "3d4e55cd2b8f1979a65eba9ab749d6466c316f71", "reference": "aa3bcf4f7674719df078e61cc8062e5b7f752031",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -7101,7 +7096,7 @@
"description": "Provides tools to manage errors and ease debugging PHP code", "description": "Provides tools to manage errors and ease debugging PHP code",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/error-handler/tree/v6.4.19" "source": "https://github.com/symfony/error-handler/tree/v6.4.20"
}, },
"funding": [ "funding": [
{ {
@ -7117,7 +7112,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-02-02T20:16:33+00:00" "time": "2025-03-01T13:00:38+00:00"
}, },
{ {
"name": "symfony/event-dispatcher", "name": "symfony/event-dispatcher",
@ -7418,16 +7413,16 @@
}, },
{ {
"name": "symfony/http-kernel", "name": "symfony/http-kernel",
"version": "v6.4.19", "version": "v6.4.20",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/http-kernel.git", "url": "https://github.com/symfony/http-kernel.git",
"reference": "88f2c9f7feff86bb7b9105c5151bc2c1404cd64c" "reference": "6be6db31bc74693ce5516e1fd5e5ff1171005e37"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/88f2c9f7feff86bb7b9105c5151bc2c1404cd64c", "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6be6db31bc74693ce5516e1fd5e5ff1171005e37",
"reference": "88f2c9f7feff86bb7b9105c5151bc2c1404cd64c", "reference": "6be6db31bc74693ce5516e1fd5e5ff1171005e37",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -7512,7 +7507,7 @@
"description": "Provides a structured process for converting a Request into a Response", "description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/http-kernel/tree/v6.4.19" "source": "https://github.com/symfony/http-kernel/tree/v6.4.20"
}, },
"funding": [ "funding": [
{ {
@ -7528,7 +7523,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-02-26T10:51:37+00:00" "time": "2025-03-28T13:27:10+00:00"
}, },
{ {
"name": "symfony/mailer", "name": "symfony/mailer",
@ -8333,16 +8328,16 @@
}, },
{ {
"name": "symfony/process", "name": "symfony/process",
"version": "v6.4.19", "version": "v6.4.20",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/process.git", "url": "https://github.com/symfony/process.git",
"reference": "7a1c12e87b08ec9c97abdd188c9b3f5a40e37fc3" "reference": "e2a61c16af36c9a07e5c9906498b73e091949a20"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/7a1c12e87b08ec9c97abdd188c9b3f5a40e37fc3", "url": "https://api.github.com/repos/symfony/process/zipball/e2a61c16af36c9a07e5c9906498b73e091949a20",
"reference": "7a1c12e87b08ec9c97abdd188c9b3f5a40e37fc3", "reference": "e2a61c16af36c9a07e5c9906498b73e091949a20",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -8374,7 +8369,7 @@
"description": "Executes commands in sub-processes", "description": "Executes commands in sub-processes",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/process/tree/v6.4.19" "source": "https://github.com/symfony/process/tree/v6.4.20"
}, },
"funding": [ "funding": [
{ {
@ -8390,7 +8385,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-02-04T13:35:48+00:00" "time": "2025-03-10T17:11:00+00:00"
}, },
{ {
"name": "symfony/routing", "name": "symfony/routing",
@ -9446,16 +9441,16 @@
}, },
{ {
"name": "filp/whoops", "name": "filp/whoops",
"version": "2.17.0", "version": "2.18.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/filp/whoops.git", "url": "https://github.com/filp/whoops.git",
"reference": "075bc0c26631110584175de6523ab3f1652eb28e" "reference": "a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/filp/whoops/zipball/075bc0c26631110584175de6523ab3f1652eb28e", "url": "https://api.github.com/repos/filp/whoops/zipball/a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e",
"reference": "075bc0c26631110584175de6523ab3f1652eb28e", "reference": "a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -9505,7 +9500,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/filp/whoops/issues", "issues": "https://github.com/filp/whoops/issues",
"source": "https://github.com/filp/whoops/tree/2.17.0" "source": "https://github.com/filp/whoops/tree/2.18.0"
}, },
"funding": [ "funding": [
{ {
@ -9513,7 +9508,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2025-01-25T12:00:00+00:00" "time": "2025-03-15T12:00:00+00:00"
}, },
{ {
"name": "hamcrest/hamcrest-php", "name": "hamcrest/hamcrest-php",
@ -9651,40 +9646,40 @@
}, },
{ {
"name": "nunomaduro/collision", "name": "nunomaduro/collision",
"version": "v7.11.0", "version": "v7.12.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/nunomaduro/collision.git", "url": "https://github.com/nunomaduro/collision.git",
"reference": "994ea93df5d4132f69d3f1bd74730509df6e8a05" "reference": "995245421d3d7593a6960822063bdba4f5d7cf1a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/nunomaduro/collision/zipball/994ea93df5d4132f69d3f1bd74730509df6e8a05", "url": "https://api.github.com/repos/nunomaduro/collision/zipball/995245421d3d7593a6960822063bdba4f5d7cf1a",
"reference": "994ea93df5d4132f69d3f1bd74730509df6e8a05", "reference": "995245421d3d7593a6960822063bdba4f5d7cf1a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"filp/whoops": "^2.16.0", "filp/whoops": "^2.17.0",
"nunomaduro/termwind": "^1.15.1", "nunomaduro/termwind": "^1.17.0",
"php": "^8.1.0", "php": "^8.1.0",
"symfony/console": "^6.4.12" "symfony/console": "^6.4.17"
}, },
"conflict": { "conflict": {
"laravel/framework": ">=11.0.0" "laravel/framework": ">=11.0.0"
}, },
"require-dev": { "require-dev": {
"brianium/paratest": "^7.3.1", "brianium/paratest": "^7.4.8",
"laravel/framework": "^10.48.22", "laravel/framework": "^10.48.29",
"laravel/pint": "^1.18.1", "laravel/pint": "^1.21.2",
"laravel/sail": "^1.36.0", "laravel/sail": "^1.41.0",
"laravel/sanctum": "^3.3.3", "laravel/sanctum": "^3.3.3",
"laravel/tinker": "^2.10.0", "laravel/tinker": "^2.10.1",
"nunomaduro/larastan": "^2.9.8", "nunomaduro/larastan": "^2.10.0",
"orchestra/testbench-core": "^8.28.3", "orchestra/testbench-core": "^8.35.0",
"pestphp/pest": "^2.35.1", "pestphp/pest": "^2.36.0",
"phpunit/phpunit": "^10.5.36", "phpunit/phpunit": "^10.5.36",
"sebastian/environment": "^6.1.0", "sebastian/environment": "^6.1.0",
"spatie/laravel-ignition": "^2.8.0" "spatie/laravel-ignition": "^2.9.1"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
@ -9743,7 +9738,7 @@
"type": "patreon" "type": "patreon"
} }
], ],
"time": "2024-10-15T15:12:40+00:00" "time": "2025-03-14T22:35:49+00:00"
}, },
{ {
"name": "pdepend/pdepend", "name": "pdepend/pdepend",
@ -9893,16 +9888,16 @@
}, },
{ {
"name": "squizlabs/php_codesniffer", "name": "squizlabs/php_codesniffer",
"version": "3.11.3", "version": "3.12.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
"reference": "ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10" "reference": "2d1b63db139c3c6ea0c927698e5160f8b3b8d630"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10", "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/2d1b63db139c3c6ea0c927698e5160f8b3b8d630",
"reference": "ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10", "reference": "2d1b63db139c3c6ea0c927698e5160f8b3b8d630",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -9969,11 +9964,11 @@
"type": "open_collective" "type": "open_collective"
}, },
{ {
"url": "https://thanks.dev/phpcsstandards", "url": "https://thanks.dev/u/gh/phpcsstandards",
"type": "thanks_dev" "type": "thanks_dev"
} }
], ],
"time": "2025-01-23T17:04:15+00:00" "time": "2025-03-18T05:04:51+00:00"
}, },
{ {
"name": "symfony/config", "name": "symfony/config",
@ -10052,16 +10047,16 @@
}, },
{ {
"name": "symfony/dependency-injection", "name": "symfony/dependency-injection",
"version": "v6.4.19", "version": "v6.4.20",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/dependency-injection.git", "url": "https://github.com/symfony/dependency-injection.git",
"reference": "b343c3b2f1539fe41331657b37d5c96c1d1ea842" "reference": "c49796a9184a532843e78e50df9e55708b92543a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/b343c3b2f1539fe41331657b37d5c96c1d1ea842", "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/c49796a9184a532843e78e50df9e55708b92543a",
"reference": "b343c3b2f1539fe41331657b37d5c96c1d1ea842", "reference": "c49796a9184a532843e78e50df9e55708b92543a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -10069,7 +10064,7 @@
"psr/container": "^1.1|^2.0", "psr/container": "^1.1|^2.0",
"symfony/deprecation-contracts": "^2.5|^3", "symfony/deprecation-contracts": "^2.5|^3",
"symfony/service-contracts": "^2.5|^3.0", "symfony/service-contracts": "^2.5|^3.0",
"symfony/var-exporter": "^6.2.10|^7.0" "symfony/var-exporter": "^6.4.20|^7.2.5"
}, },
"conflict": { "conflict": {
"ext-psr": "<1.1|>=2", "ext-psr": "<1.1|>=2",
@ -10113,7 +10108,7 @@
"description": "Allows you to standardize and centralize the way objects are constructed in your application", "description": "Allows you to standardize and centralize the way objects are constructed in your application",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/dependency-injection/tree/v6.4.19" "source": "https://github.com/symfony/dependency-injection/tree/v6.4.20"
}, },
"funding": [ "funding": [
{ {
@ -10129,7 +10124,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-02-20T10:02:49+00:00" "time": "2025-03-13T09:55:08+00:00"
}, },
{ {
"name": "symfony/filesystem", "name": "symfony/filesystem",
@ -10199,16 +10194,16 @@
}, },
{ {
"name": "symfony/var-exporter", "name": "symfony/var-exporter",
"version": "v6.4.19", "version": "v6.4.20",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/var-exporter.git", "url": "https://github.com/symfony/var-exporter.git",
"reference": "be6e71b0c257884c1107313de5d247741cfea172" "reference": "998df255e9e6a15a36ae35e9c6cd818c17cf92a2"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/var-exporter/zipball/be6e71b0c257884c1107313de5d247741cfea172", "url": "https://api.github.com/repos/symfony/var-exporter/zipball/998df255e9e6a15a36ae35e9c6cd818c17cf92a2",
"reference": "be6e71b0c257884c1107313de5d247741cfea172", "reference": "998df255e9e6a15a36ae35e9c6cd818c17cf92a2",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -10256,7 +10251,7 @@
"serialize" "serialize"
], ],
"support": { "support": {
"source": "https://github.com/symfony/var-exporter/tree/v6.4.19" "source": "https://github.com/symfony/var-exporter/tree/v6.4.20"
}, },
"funding": [ "funding": [
{ {
@ -10272,7 +10267,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-02-13T09:33:32+00:00" "time": "2025-03-13T09:55:08+00:00"
} }
], ],
"aliases": [], "aliases": [],