diff --git a/app/Http/Requests/Admin/Api/StoreApplicationApiKeyRequest.php b/app/Http/Requests/Admin/Api/StoreApplicationApiKeyRequest.php index 2549517c..a2949628 100644 --- a/app/Http/Requests/Admin/Api/StoreApplicationApiKeyRequest.php +++ b/app/Http/Requests/Admin/Api/StoreApplicationApiKeyRequest.php @@ -15,7 +15,7 @@ class StoreApplicationApiKeyRequest extends AdminFormRequest */ public function rules() { - $modelRules = ApiKey::getCreateRules(); + $modelRules = ApiKey::getRules(); return collect(AdminAcl::getResourceList())->mapWithKeys(function ($resource) use ($modelRules) { return [AdminAcl::COLUMN_IDENTIFIER . $resource => $modelRules['r_' . $resource]]; diff --git a/app/Http/Requests/Admin/DatabaseHostFormRequest.php b/app/Http/Requests/Admin/DatabaseHostFormRequest.php index a7b0b4af..54d3bd0c 100644 --- a/app/Http/Requests/Admin/DatabaseHostFormRequest.php +++ b/app/Http/Requests/Admin/DatabaseHostFormRequest.php @@ -12,10 +12,10 @@ class DatabaseHostFormRequest extends AdminFormRequest public function rules() { if ($this->method() !== 'POST') { - return DatabaseHost::getUpdateRulesForId($this->route()->parameter('host')); + return DatabaseHost::getRulesForUpdate($this->route()->parameter('host')); } - return DatabaseHost::getCreateRules(); + return DatabaseHost::getRules(); } /** diff --git a/app/Http/Requests/Admin/LocationFormRequest.php b/app/Http/Requests/Admin/LocationFormRequest.php index 16d80a25..2ad202f9 100644 --- a/app/Http/Requests/Admin/LocationFormRequest.php +++ b/app/Http/Requests/Admin/LocationFormRequest.php @@ -21,9 +21,9 @@ class LocationFormRequest extends AdminFormRequest public function rules() { if ($this->method() === 'PATCH') { - return Location::getUpdateRulesForId($this->route()->parameter('location')->id); + return Location::getRulesForUpdate($this->route()->parameter('location')->id); } - return Location::getCreateRules(); + return Location::getRules(); } } diff --git a/app/Http/Requests/Admin/Node/NodeFormRequest.php b/app/Http/Requests/Admin/Node/NodeFormRequest.php index fcedd427..caef04f9 100644 --- a/app/Http/Requests/Admin/Node/NodeFormRequest.php +++ b/app/Http/Requests/Admin/Node/NodeFormRequest.php @@ -20,10 +20,10 @@ class NodeFormRequest extends AdminFormRequest public function rules() { if ($this->method() === 'PATCH') { - return Node::getUpdateRulesForId($this->route()->parameter('node')->id); + return Node::getRulesForUpdate($this->route()->parameter('node')); } - return Node::getCreateRules(); + return Node::getRules(); } /** diff --git a/app/Http/Requests/Admin/PackFormRequest.php b/app/Http/Requests/Admin/PackFormRequest.php index 7f15be95..68b3a8d3 100644 --- a/app/Http/Requests/Admin/PackFormRequest.php +++ b/app/Http/Requests/Admin/PackFormRequest.php @@ -20,10 +20,10 @@ class PackFormRequest extends AdminFormRequest public function rules() { if ($this->method() === 'PATCH') { - return Pack::getUpdateRulesForId($this->route()->parameter('pack')->id); + return Pack::getRulesForUpdate($this->route()->parameter('pack')->id); } - return Pack::getCreateRules(); + return Pack::getRules(); } /** diff --git a/app/Http/Requests/Admin/ServerFormRequest.php b/app/Http/Requests/Admin/ServerFormRequest.php index 33b9c8ff..96e0eebe 100644 --- a/app/Http/Requests/Admin/ServerFormRequest.php +++ b/app/Http/Requests/Admin/ServerFormRequest.php @@ -21,7 +21,7 @@ class ServerFormRequest extends AdminFormRequest */ public function rules() { - $rules = Server::getCreateRules(); + $rules = Server::getRules(); $rules['description'][] = 'nullable'; return $rules; diff --git a/app/Http/Requests/Admin/UserFormRequest.php b/app/Http/Requests/Admin/UserFormRequest.php index c6a35839..119afec1 100644 --- a/app/Http/Requests/Admin/UserFormRequest.php +++ b/app/Http/Requests/Admin/UserFormRequest.php @@ -12,9 +12,9 @@ class UserFormRequest extends AdminFormRequest */ public function rules() { - $rules = collect(User::getCreateRules()); + $rules = collect(User::getRules()); if ($this->method() === 'PATCH') { - $rules = collect(User::getUpdateRulesForId($this->route()->parameter('user')->id))->merge([ + $rules = collect(User::getRulesForUpdate($this->route()->parameter('user')))->merge([ 'ignore_connection_error' => ['sometimes', 'nullable', 'boolean'], ]); } diff --git a/app/Http/Requests/Api/Application/Locations/StoreLocationRequest.php b/app/Http/Requests/Api/Application/Locations/StoreLocationRequest.php index 761c669d..a02a38ca 100644 --- a/app/Http/Requests/Api/Application/Locations/StoreLocationRequest.php +++ b/app/Http/Requests/Api/Application/Locations/StoreLocationRequest.php @@ -25,7 +25,7 @@ class StoreLocationRequest extends ApplicationApiRequest */ public function rules(): array { - return collect(Location::getCreateRules())->only([ + return collect(Location::getRules())->only([ 'long', 'short', ])->toArray(); diff --git a/app/Http/Requests/Api/Application/Locations/UpdateLocationRequest.php b/app/Http/Requests/Api/Application/Locations/UpdateLocationRequest.php index 2d83ab08..0877fa45 100644 --- a/app/Http/Requests/Api/Application/Locations/UpdateLocationRequest.php +++ b/app/Http/Requests/Api/Application/Locations/UpdateLocationRequest.php @@ -27,7 +27,7 @@ class UpdateLocationRequest extends StoreLocationRequest { $locationId = $this->route()->parameter('location')->id; - return collect(Location::getUpdateRulesForId($locationId))->only([ + return collect(Location::getRulesForUpdate($locationId))->only([ 'short', 'long', ])->toArray(); diff --git a/app/Http/Requests/Api/Application/Nodes/StoreNodeRequest.php b/app/Http/Requests/Api/Application/Nodes/StoreNodeRequest.php index 37dd3258..3ae474ba 100644 --- a/app/Http/Requests/Api/Application/Nodes/StoreNodeRequest.php +++ b/app/Http/Requests/Api/Application/Nodes/StoreNodeRequest.php @@ -26,7 +26,7 @@ class StoreNodeRequest extends ApplicationApiRequest */ public function rules(array $rules = null): array { - return collect($rules ?? Node::getCreateRules())->only([ + return collect($rules ?? Node::getRules())->only([ 'public', 'name', 'location_id', diff --git a/app/Http/Requests/Api/Application/Nodes/UpdateNodeRequest.php b/app/Http/Requests/Api/Application/Nodes/UpdateNodeRequest.php index ffba39e6..bf228049 100644 --- a/app/Http/Requests/Api/Application/Nodes/UpdateNodeRequest.php +++ b/app/Http/Requests/Api/Application/Nodes/UpdateNodeRequest.php @@ -17,6 +17,6 @@ class UpdateNodeRequest extends StoreNodeRequest { $nodeId = $this->getModel(Node::class)->id; - return parent::rules(Node::getUpdateRulesForId($nodeId)); + return parent::rules(Node::getRulesForUpdate($nodeId)); } } diff --git a/app/Http/Requests/Api/Application/Servers/StoreServerRequest.php b/app/Http/Requests/Api/Application/Servers/StoreServerRequest.php index 4378474b..d386f585 100644 --- a/app/Http/Requests/Api/Application/Servers/StoreServerRequest.php +++ b/app/Http/Requests/Api/Application/Servers/StoreServerRequest.php @@ -28,7 +28,7 @@ class StoreServerRequest extends ApplicationApiRequest */ public function rules(): array { - $rules = Server::getCreateRules(); + $rules = Server::getRules(); return [ 'external_id' => $rules['external_id'], diff --git a/app/Http/Requests/Api/Application/Servers/UpdateServerBuildConfigurationRequest.php b/app/Http/Requests/Api/Application/Servers/UpdateServerBuildConfigurationRequest.php index 0238cdcf..f184b8cf 100644 --- a/app/Http/Requests/Api/Application/Servers/UpdateServerBuildConfigurationRequest.php +++ b/app/Http/Requests/Api/Application/Servers/UpdateServerBuildConfigurationRequest.php @@ -14,7 +14,7 @@ class UpdateServerBuildConfigurationRequest extends ServerWriteRequest */ public function rules(): array { - $rules = Server::getUpdateRulesForId($this->getModel(Server::class)->id); + $rules = Server::getRulesForUpdate($this->getModel(Server::class)); return [ 'allocation' => $rules['allocation_id'], diff --git a/app/Http/Requests/Api/Application/Servers/UpdateServerDetailsRequest.php b/app/Http/Requests/Api/Application/Servers/UpdateServerDetailsRequest.php index aa585bad..172dd1e3 100644 --- a/app/Http/Requests/Api/Application/Servers/UpdateServerDetailsRequest.php +++ b/app/Http/Requests/Api/Application/Servers/UpdateServerDetailsRequest.php @@ -13,7 +13,7 @@ class UpdateServerDetailsRequest extends ServerWriteRequest */ public function rules(): array { - $rules = Server::getUpdateRulesForId($this->getModel(Server::class)->id); + $rules = Server::getRulesForUpdate($this->getModel(Server::class)); return [ 'external_id' => $rules['external_id'], diff --git a/app/Http/Requests/Api/Application/Servers/UpdateServerStartupRequest.php b/app/Http/Requests/Api/Application/Servers/UpdateServerStartupRequest.php index acb6043c..532ae1c3 100644 --- a/app/Http/Requests/Api/Application/Servers/UpdateServerStartupRequest.php +++ b/app/Http/Requests/Api/Application/Servers/UpdateServerStartupRequest.php @@ -25,7 +25,7 @@ class UpdateServerStartupRequest extends ApplicationApiRequest */ public function rules(): array { - $data = Server::getUpdateRulesForId($this->getModel(Server::class)->id); + $data = Server::getRulesForUpdate($this->getModel(Server::class)); return [ 'startup' => $data['startup'], diff --git a/app/Http/Requests/Api/Application/Users/StoreUserRequest.php b/app/Http/Requests/Api/Application/Users/StoreUserRequest.php index 71153836..9cddad7e 100644 --- a/app/Http/Requests/Api/Application/Users/StoreUserRequest.php +++ b/app/Http/Requests/Api/Application/Users/StoreUserRequest.php @@ -26,7 +26,7 @@ class StoreUserRequest extends ApplicationApiRequest */ public function rules(array $rules = null): array { - $rules = $rules ?? User::getCreateRules(); + $rules = $rules ?? User::getRules(); $response = collect($rules)->only([ 'external_id', diff --git a/app/Http/Requests/Api/Application/Users/UpdateUserRequest.php b/app/Http/Requests/Api/Application/Users/UpdateUserRequest.php index 929a77f3..ce38348d 100644 --- a/app/Http/Requests/Api/Application/Users/UpdateUserRequest.php +++ b/app/Http/Requests/Api/Application/Users/UpdateUserRequest.php @@ -16,6 +16,6 @@ class UpdateUserRequest extends StoreUserRequest { $userId = $this->getModel(User::class)->id; - return parent::rules(User::getUpdateRulesForId($userId)); + return parent::rules(User::getRulesForUpdate($userId)); } } diff --git a/app/Http/Requests/Api/Client/Account/UpdateEmailRequest.php b/app/Http/Requests/Api/Client/Account/UpdateEmailRequest.php index a990e79b..c9936508 100644 --- a/app/Http/Requests/Api/Client/Account/UpdateEmailRequest.php +++ b/app/Http/Requests/Api/Client/Account/UpdateEmailRequest.php @@ -32,7 +32,7 @@ class UpdateEmailRequest extends ClientApiRequest */ public function rules(): array { - $rules = User::getUpdateRulesForId($this->user()->id); + $rules = User::getRulesForUpdate($this->user()); return ['email' => $rules['email']]; } diff --git a/app/Http/Requests/Api/Client/Account/UpdatePasswordRequest.php b/app/Http/Requests/Api/Client/Account/UpdatePasswordRequest.php index 12079f68..f52b7129 100644 --- a/app/Http/Requests/Api/Client/Account/UpdatePasswordRequest.php +++ b/app/Http/Requests/Api/Client/Account/UpdatePasswordRequest.php @@ -32,7 +32,7 @@ class UpdatePasswordRequest extends ClientApiRequest */ public function rules(): array { - $rules = User::getUpdateRulesForId($this->user()->id); + $rules = User::getRulesForUpdate($this->user()); return ['password' => array_merge($rules['password'], ['confirmed'])]; } diff --git a/app/Http/Requests/Base/AccountDataFormRequest.php b/app/Http/Requests/Base/AccountDataFormRequest.php index 474d85ac..802fc17d 100644 --- a/app/Http/Requests/Base/AccountDataFormRequest.php +++ b/app/Http/Requests/Base/AccountDataFormRequest.php @@ -40,7 +40,7 @@ class AccountDataFormRequest extends FrontendUserFormRequest */ public function rules() { - $modelRules = User::getUpdateRulesForId($this->user()->id); + $modelRules = User::getRulesForUpdate($this->user()); switch ($this->input('do_action')) { case 'email': diff --git a/app/Http/Requests/Server/Settings/ChangeServerNameRequest.php b/app/Http/Requests/Server/Settings/ChangeServerNameRequest.php index c969cb0e..6ea8d21c 100644 --- a/app/Http/Requests/Server/Settings/ChangeServerNameRequest.php +++ b/app/Http/Requests/Server/Settings/ChangeServerNameRequest.php @@ -25,7 +25,7 @@ class ChangeServerNameRequest extends ServerFormRequest public function rules() { return [ - 'name' => Server::getCreateRules()['name'], + 'name' => Server::getRules()['name'], ]; } } diff --git a/app/Models/User.php b/app/Models/User.php index 551c55ff..22b8a5a0 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -144,8 +144,10 @@ class User extends Validable implements * Implement language verification by overriding Eloquence's gather * rules function. */ - protected static function gatherRules() + public static function getRules() { + $rules = self::getRules(); + $rules['language'][] = new In(array_keys((new self)->getAvailableLanguages())); $rules['username'][] = new Username; diff --git a/app/Models/Validable.php b/app/Models/Validable.php index 50fd5365..59e4c0f5 100644 --- a/app/Models/Validable.php +++ b/app/Models/Validable.php @@ -79,14 +79,24 @@ abstract class Validable extends Model } /** + * Returns the rules associated with this model. + * * @return array */ public static function getRules() { - return static::$validationRules; + $rules = static::$validationRules; + foreach ($rules as $key => &$rule) { + $rule = is_array($rule) ? $rule : explode('|', $rule); + } + + return $rules; } /** + * Returns the rules associated with the model, specifically for updating the given model + * rather than just creating it. + * * @param \Illuminate\Database\Eloquent\Model|int|string $id * @param string $primaryKey * @return array @@ -98,17 +108,13 @@ abstract class Validable extends Model } $rules = static::getRules(); - foreach ($rules as $key => &$rule) { - $rule = is_array($rule) ? $rule : explode('|', $rule); - } - foreach ($rules as $key => &$data) { // For each rule in a given field, iterate over it and confirm if the rule // is one for a unique field. If that is the case, append the ID of the current // working model so we don't run into errors due to the way that field validation // works. foreach ($data as &$datum) { - if (! Str::startsWith($datum, 'unique')) { + if (! is_string($datum) || ! Str::startsWith($datum, 'unique')) { continue; }