validate($user, $input); $storageProvider = new StorageProvider([ 'user_id' => $user->id, 'provider' => $input['provider'], 'profile' => $input['name'], ]); $this->validateProvider($input, $storageProvider->provider()->validationRules()); $storageProvider->credentials = $storageProvider->provider()->credentialData($input); if (! $storageProvider->provider()->connect()) { throw ValidationException::withMessages([ 'provider' => __("Couldn't connect to the provider"), ]); } $storageProvider->save(); } private function validate(User $user, array $input): void { Validator::make($input, [ 'provider' => [ 'required', Rule::in(config('core.storage_providers')), ], 'name' => [ 'required', Rule::unique('storage_providers', 'profile')->where('user_id', $user->id), ], ])->validate(); } private function validateProvider(array $input, array $rules): void { Validator::make($input, $rules)->validate(); } }