Skip to content
This repository was archived by the owner on Feb 7, 2024. It is now read-only.

[2.x] Config Changes #446

Merged
merged 4 commits into from
Aug 13, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
256 changes: 172 additions & 84 deletions config/websockets.php
Original file line number Diff line number Diff line change
@@ -1,26 +1,79 @@
<?php

use BeyondCode\LaravelWebSockets\Dashboard\Http\Middleware\Authorize;

return [

/*
* Set a custom dashboard configuration
*/
|--------------------------------------------------------------------------
| Dashboard Settings
|--------------------------------------------------------------------------
|
| You can configure the dashboard settings from here.
|
*/

'dashboard' => [

'port' => env('LARAVEL_WEBSOCKETS_PORT', 6001),

'path' => 'laravel-websockets',

'middleware' => [
'web',
\BeyondCode\LaravelWebSockets\Dashboard\Http\Middleware\Authorize::class,
],

],

'managers' => [

/*
|--------------------------------------------------------------------------
| Application Manager
|--------------------------------------------------------------------------
|
| An Application manager determines how your websocket server allows
| the use of the TCP protocol based on, for example, a list of allowed
| applications.
| By default, it uses the defined array in the config file, but you can
| anytime implement the same interface as the class and add your own
| custom method to retrieve the apps.
|
*/

'app' => \BeyondCode\LaravelWebSockets\Apps\ConfigAppProvider::class,

/*
|--------------------------------------------------------------------------
| Channel Manager
|--------------------------------------------------------------------------
|
| When users subscribe or unsubscribe from specific channels,
| the connections are stored to keep track of any interaction with the
| WebSocket server.
| You can however add your own implementation that will help the store
| of the channels alongside their connections.
|
*/

'channel' => \BeyondCode\LaravelWebSockets\WebSockets\Channels\ChannelManagers\ArrayChannelManager::class,

],

/*
* This package comes with multi tenancy out of the box. Here you can
* configure the different apps that can use the webSockets server.
*
* Optionally you specify capacity so you can limit the maximum
* concurrent connections for a specific app.
*
* Optionally you can disable client events so clients cannot send
* messages to each other via the webSockets.
*/
|--------------------------------------------------------------------------
| Applications Repository
|--------------------------------------------------------------------------
|
| By default, the only allowed app is the one you define with
| your PUSHER_* variables from .env.
| You can configure to use multiple apps if you need to, or use
| a custom App Manager that will handle the apps from a database, per se.
|
| You can apply multiple settings, like the maximum capacity, enable
| client-to-client messages or statistics.
|
*/

'apps' => [
[
'id' => env('PUSHER_APP_ID'),
Expand All @@ -35,107 +88,142 @@
],

/*
* This class is responsible for finding the apps. The default provider
* will use the apps defined in this config file.
*
* You can create a custom provider by implementing the
* `AppProvider` interface.
*/
'app_provider' => BeyondCode\LaravelWebSockets\Apps\ConfigAppProvider::class,
|--------------------------------------------------------------------------
| Allowed Origins
|--------------------------------------------------------------------------
|
| If not empty, you can whitelist certain origins that will be allowed
| to connect to the websocket server.
|
*/

/*
* This array contains the hosts of which you want to allow incoming requests.
* Leave this empty if you want to accept requests from all hosts.
*/
'allowed_origins' => [
//
],

/*
* The maximum request size in kilobytes that is allowed for an incoming WebSocket request.
*/
|--------------------------------------------------------------------------
| Maximum Request Size
|--------------------------------------------------------------------------
|
| The maximum request size in kilobytes that is allowed for
| an incoming WebSocket request.
|
*/

'max_request_size_in_kb' => 250,

/*
* This path will be used to register the necessary routes for the package.
*/
'path' => 'laravel-websockets',
|--------------------------------------------------------------------------
| SSL Configuration
|--------------------------------------------------------------------------
|
| By default, the configuration allows only on HTTP. For SSL, you need
| to set up the the certificate, the key, and optionally, the passphrase
| for the private key.
| You will need to restart the server for the settings to take place.
|
*/

'ssl' => [

'local_cert' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT', null),

'capath' => env('LARAVEL_WEBSOCKETS_SSL_CA', null),

'local_pk' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_PK', null),

'passphrase' => env('LARAVEL_WEBSOCKETS_SSL_PASSPHRASE', null),

'verify_peer' => env('APP_ENV') === 'production',

'allow_self_signed' => env('APP_ENV') !== 'production',

/*
* Dashboard Routes Middleware
*
* These middleware will be assigned to every dashboard route, giving you
* the chance to add your own middleware to this list or change any of
* the existing middleware. Or, you can simply stick with this list.
*/
'middleware' => [
'web',
Authorize::class,
],

'statistics' => [

/*
* This model will be used to store the statistics of the WebSocketsServer.
* The only requirement is that the model should extend
* `WebSocketsStatisticsEntry` provided by this package.
*/
|--------------------------------------------------------------------------
| Statistics Eloquent Model
|--------------------------------------------------------------------------
|
| This model will be used to store the statistics of the WebSocketsServer.
| The only requirement is that the model should extend
| `WebSocketsStatisticsEntry` provided by this package.
|
*/

'model' => \BeyondCode\LaravelWebSockets\Statistics\Models\WebSocketsStatisticsEntry::class,

/**
* The Statistics Logger will, by default, handle the incoming statistics, store them
* and then release them into the database on each interval defined below.
*/
/*
|--------------------------------------------------------------------------
| Statistics Logger Handler
|--------------------------------------------------------------------------
|
| The Statistics Logger will, by default, handle the incoming statistics,
| store them into an array and then store them into the database
| on each interval.
|
*/

'logger' => \BeyondCode\LaravelWebSockets\Statistics\Logger::class,

/*
* Here you can specify the interval in seconds at which statistics should be logged.
*/
|--------------------------------------------------------------------------
| Statistics Interval Period
|--------------------------------------------------------------------------
|
| Here you can specify the interval in seconds at which
| statistics should be logged.
|
*/

'interval_in_seconds' => 60,

/*
* When the clean-command is executed, all recorded statistics older than
* the number of days specified here will be deleted.
*/
|--------------------------------------------------------------------------
| Statistics Deletion Period
|--------------------------------------------------------------------------
|
| When the clean-command is executed, all recorded statistics older than
| the number of days specified here will be deleted.
|
*/

'delete_statistics_older_than_days' => 60,

/*
* Use an DNS resolver to make the requests to the statistics logger
* default is to resolve everything to 127.0.0.1.
*/
|--------------------------------------------------------------------------
| DNS Lookup
|--------------------------------------------------------------------------
|
| Use an DNS resolver to make the requests to the statistics logger
| default is to resolve everything to 127.0.0.1.
|
*/

'perform_dns_lookup' => false,
],

/*
* Define the optional SSL context for your WebSocket connections.
* You can see all available options at: http://php.net/manual/en/context.ssl.php
*/
'ssl' => [
/*
* Path to local certificate file on filesystem. It must be a PEM encoded file which
* contains your certificate and private key. It can optionally contain the
* certificate chain of issuers. The private key also may be contained
* in a separate file specified by local_pk.
*/
'local_cert' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT', null),
|--------------------------------------------------------------------------
| DNS Lookup TLS Settings
|--------------------------------------------------------------------------
|
| You can configure the DNS Lookup Connector the TLS settings.
| Check the available options here:
| https://github.com/reactphp/socket/blob/master/src/Connector.php#L29
|
*/

/*
* Path to local private key file on filesystem in case of separate files for
* certificate (local_cert) and private key.
*/
'local_pk' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_PK', null),
'tls' => [

'verify_peer' => env('APP_ENV') === 'production',

'verify_peer_name' => env('APP_ENV') === 'production',

],

/*
* Passphrase for your local_cert file.
*/
'passphrase' => env('LARAVEL_WEBSOCKETS_SSL_PASSPHRASE', null),
],

/*
* Channel Manager
* This class handles how channel persistence is handled.
* By default, persistence is stored in an array by the running webserver.
* The only requirement is that the class should implement
* `ChannelManager` interface provided by this package.
*/
'channel_manager' => \BeyondCode\LaravelWebSockets\WebSockets\Channels\ChannelManagers\ArrayChannelManager::class,
];
5 changes: 1 addition & 4 deletions src/Console/StartWebSocketServer.php
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,7 @@ protected function configureStatisticsLogger()
{
$connector = new Connector($this->loop, [
'dns' => $this->getDnsResolver(),
'tls' => [
'verify_peer' => config('app.env') === 'production',
'verify_peer_name' => config('app.env') === 'production',
],
'tls' => config('websockets.statistics.tls'),
]);

$browser = new Browser($this->loop, $connector);
Expand Down
11 changes: 6 additions & 5 deletions src/WebSocketsServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -54,19 +54,20 @@ public function register()
});

$this->app->singleton(ChannelManager::class, function () {
return config('websockets.channel_manager') !== null && class_exists(config('websockets.channel_manager'))
? app(config('websockets.channel_manager')) : new ArrayChannelManager();
$channelManager = config('websockets.managers.channel', ArrayChannelManager::class);

return new $channelManager;
});

$this->app->singleton(AppProvider::class, function () {
return app(config('websockets.app_provider'));
return app(config('websockets.managers.app'));
});
}

protected function registerRoutes()
{
Route::prefix(config('websockets.path'))->group(function () {
Route::middleware(config('websockets.middleware', [AuthorizeDashboard::class]))->group(function () {
Route::prefix(config('websockets.dashboard.path'))->group(function () {
Route::middleware(config('websockets.dashboard.middleware', [AuthorizeDashboard::class]))->group(function () {
Route::get('/', ShowDashboard::class);
Route::get('/api/{appId}/statistics', [DashboardApiController::class, 'getStatistics']);
Route::post('auth', AuthenticateDashboard::class);
Expand Down