<?php namespace Common\Settings\Validators; use Illuminate\Support\Arr; use Illuminate\Support\Facades\Queue; use Throwable; class QueueCredentialsValidator { const KEYS = [ 'queue_driver', // sqs 'SQS_QUEUE_KEY', 'SQS_QUEUE_SECRET', 'SQS_QUEUE_PREFIX', 'SQS_QUEUE_NAME', 'SQS_QUEUE_REGION', ]; public function fails($settings) { $this->setConfigDynamically($settings); $driver = Arr::get($settings, 'queue_driver', config('queue.default')); try { Queue::connection($driver)->size(); } catch (Throwable $e) { return $this->getErrorMessage($e, $driver); } } private function setConfigDynamically($settings): void { foreach ($settings as $key => $value) { // SQS_QUEUE_KEY => sqs.queue.key $key = strtolower(str_replace('_', '.', $key)); // sqs.queue.key => sqs.key $key = str_replace('queue.', '', $key); $key = str_replace('name', 'queue', $key); config("queue.connections.$key", $value); } } private function getErrorMessage(Throwable $e, string $driver): array { return [ 'queue_group' => "Could not change queue driver to <strong>$driver</strong>.<br> {$e->getMessage()}", ]; } }