Fix Invalid Signature issue and enable event creator to be sent from any app (#39)
* Add the ability to configure middleware. Fixes #22 * Fix StyleCI Error. * Include X-App-ID * Reconstruct the PusherBroadcaster * fix styleci * change from overwriting constructor to new Broadcaster * optional inside dashboard gate * remove comment * fix for styleci * Fix typo * Removed unused $config['options']
This commit is contained in:
parent
ec96ca7172
commit
c1f6ffa51b
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use BeyondCode\LaravelWebSockets\Dashboard\Http\Middleware\Authorize;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -47,6 +49,18 @@ return [
|
||||||
*/
|
*/
|
||||||
'path' => 'laravel-websockets',
|
'path' => 'laravel-websockets',
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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' => [
|
'statistics' => [
|
||||||
/*
|
/*
|
||||||
* This model will be used to store the statistics of the WebSocketsServer.
|
* This model will be used to store the statistics of the WebSocketsServer.
|
||||||
|
|
|
||||||
|
|
@ -120,7 +120,8 @@
|
||||||
authEndpoint: '/{{ request()->path() }}/auth',
|
authEndpoint: '/{{ request()->path() }}/auth',
|
||||||
auth: {
|
auth: {
|
||||||
headers: {
|
headers: {
|
||||||
'X-CSRF-Token': "{{ csrf_token() }}"
|
'X-CSRF-Token': "{{ csrf_token() }}",
|
||||||
|
'X-App-ID': this.app.id
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
enabledTransports: ['ws', 'flash']
|
enabledTransports: ['ws', 'flash']
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,29 @@
|
||||||
|
|
||||||
namespace BeyondCode\LaravelWebSockets\Dashboard\Http\Controllers;
|
namespace BeyondCode\LaravelWebSockets\Dashboard\Http\Controllers;
|
||||||
|
|
||||||
|
use Pusher\Pusher;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Contracts\Broadcasting\Broadcaster;
|
use BeyondCode\LaravelWebSockets\Apps\App;
|
||||||
|
use Illuminate\Broadcasting\Broadcasters\PusherBroadcaster;
|
||||||
|
|
||||||
class AuthenticateDashboard
|
class AuthenticateDashboard
|
||||||
{
|
{
|
||||||
public function __invoke(Request $request, Broadcaster $broadcaster)
|
public function __invoke(Request $request)
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Find the app by using the header
|
||||||
|
* and then reconstruct the PusherBroadcaster
|
||||||
|
* using our own app selection.
|
||||||
|
*/
|
||||||
|
$app = App::findById($request->header('x-app-id'));
|
||||||
|
|
||||||
|
$broadcaster = new PusherBroadcaster(new Pusher(
|
||||||
|
$app->key,
|
||||||
|
$app->secret,
|
||||||
|
$app->id,
|
||||||
|
[]
|
||||||
|
));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Since the dashboard itself is already secured by the
|
* Since the dashboard itself is already secured by the
|
||||||
* Authorize middleware, we can trust all channel
|
* Authorize middleware, we can trust all channel
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,6 @@ class Authorize
|
||||||
{
|
{
|
||||||
public function handle($request, $next)
|
public function handle($request, $next)
|
||||||
{
|
{
|
||||||
return Gate::check('viewWebSocketsDashboard') ? $next($request) : abort(403);
|
return Gate::check('viewWebSocketsDashboard', [$request->user()]) ? $next($request) : abort(403);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ class WebSocketsServiceProvider extends ServiceProvider
|
||||||
protected function registerRoutes()
|
protected function registerRoutes()
|
||||||
{
|
{
|
||||||
Route::prefix(config('websockets.path'))->group(function () {
|
Route::prefix(config('websockets.path'))->group(function () {
|
||||||
Route::middleware(AuthorizeDashboard::class)->group(function () {
|
Route::middleware(config('websockets.middleware', [AuthorizeDashboard::class]))->group(function () {
|
||||||
Route::get('/', ShowDashboard::class);
|
Route::get('/', ShowDashboard::class);
|
||||||
Route::get('/api/{appId}/statistics', [DashboardApiController::class, 'getStatistics']);
|
Route::get('/api/{appId}/statistics', [DashboardApiController::class, 'getStatistics']);
|
||||||
Route::post('auth', AuthenticateDashboard::class);
|
Route::post('auth', AuthenticateDashboard::class);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue