Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
gilour
/
foundation
/
src
/
Settings
/
Validators
:
WebsocketCredentialsValidator.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php namespace Common\Settings\Validators; use Common\Websockets\API\WebsocketAPI; use Illuminate\Support\Arr; use Throwable; class WebsocketCredentialsValidator { const KEYS = [ 'broadcast_driver', // pusher 'PUSHER_APP_ID', 'PUSHER_APP_KEY', 'PUSHER_APP_SECRET', 'PUSHER_APP_CLUSTER', // reverb 'REVERB_APP_ID', 'REVERB_APP_KEY', 'REVERB_APP_SECRET', 'REVERB_HOST', 'REVERB_PORT', 'REVERB_SCHEME', // ably 'ABLY_APP_ID', 'ABLY_APP_KEY', 'ABLY_APP_SECRET', ]; public function fails($settings) { $this->setConfigDynamically($settings); $driver = Arr::get( $settings, 'broadcast_driver', config('broadcasting.default'), ); try { (new WebsocketAPI([ 'throw' => true, ]))->getAllChannels(); } catch (Throwable $e) { return $this->getErrorMessage($e, $driver); } } private function setConfigDynamically($settings): void { foreach ($settings as $key => $value) { if ($key === 'broadcast_driver') { config(['broadcasting.default' => $value]); continue; } // PUSHER_API_ID => broadcasting.connections.pusher.app_id $parts = explode('_', $key); $group = array_shift($parts); $key = strtolower(implode('_', $parts)); $key = str_contains($key, 'app_id') ? $key : str_replace('app_', '', $key); config(["broadcasting.connections.$group.$key" => $value]); } } private function getErrorMessage(Throwable $e, string $driver): array { return [ 'queue_group' => "Could not change websockets driver to <strong>$driver</strong>.<br> {$e->getMessage()}", ]; } }