Changeset View
Changeset View
Standalone View
Standalone View
src/app/Rules/ResourceName.php
- This file was copied to src/app/Rules/SharedFolderName.php.
<?php | <?php | ||||
namespace App\Rules; | namespace App\Rules; | ||||
use Illuminate\Contracts\Validation\Rule; | use Illuminate\Contracts\Validation\Rule; | ||||
use Illuminate\Support\Facades\Validator; | use Illuminate\Support\Facades\Validator; | ||||
use Illuminate\Support\Str; | use Illuminate\Support\Str; | ||||
class ResourceName implements Rule | class ResourceName implements Rule | ||||
{ | { | ||||
private $message; | private $message; | ||||
private $owner; | private $owner; | ||||
private $domain; | private $domain; | ||||
private const FORBIDDEN_CHARS = '+/^%*!`@(){}|\\?<;"'; | |||||
/** | /** | ||||
* Class constructor. | * Class constructor. | ||||
* | * | ||||
* @param \App\User $owner The account owner | * @param \App\User $owner The account owner | ||||
* @param string $domain The domain name of the group | * @param string $domain The domain name of the group | ||||
*/ | */ | ||||
public function __construct($owner, $domain) | public function __construct($owner, $domain) | ||||
{ | { | ||||
Show All 11 Lines | class ResourceName implements Rule | ||||
*/ | */ | ||||
public function passes($attribute, $name): bool | public function passes($attribute, $name): bool | ||||
{ | { | ||||
if (empty($name) || !is_string($name)) { | if (empty($name) || !is_string($name)) { | ||||
$this->message = \trans('validation.nameinvalid'); | $this->message = \trans('validation.nameinvalid'); | ||||
return false; | return false; | ||||
} | } | ||||
if (strcspn($name, self::FORBIDDEN_CHARS) < strlen($name)) { | |||||
$this->message = \trans('validation.nameinvalid'); | |||||
return false; | |||||
} | |||||
// Check the max length, according to the database column length | // Check the max length, according to the database column length | ||||
if (strlen($name) > 191) { | if (strlen($name) > 191) { | ||||
$this->message = \trans('validation.max.string', ['max' => 191]); | $this->message = \trans('validation.max.string', ['max' => 191]); | ||||
return false; | return false; | ||||
} | } | ||||
// Check if specified domain is belongs to the user | // Check if specified domain belongs to the user | ||||
$domains = \collect($this->owner->domains(true, false))->pluck('namespace')->all(); | $domains = \collect($this->owner->domains(true, false))->pluck('namespace')->all(); | ||||
if (!in_array($this->domain, $domains)) { | if (!in_array($this->domain, $domains)) { | ||||
$this->message = \trans('validation.domaininvalid'); | $this->message = \trans('validation.domaininvalid'); | ||||
return false; | return false; | ||||
} | } | ||||
// Check if the name is unique in the domain | // Check if the name is unique in the domain | ||||
// FIXME: Maybe just using the whole resources table would be faster than resources()? | // FIXME: Maybe just using the whole resources table would be faster than resources()? | ||||
Show All 23 Lines |