From 6f0151806d57107f28e665f654ed415597f1ed47 Mon Sep 17 00:00:00 2001 From: devansh bawari Date: Mon, 23 Nov 2020 13:54:56 +0530 Subject: [PATCH] Allowed IPs Added --- app/Http/Kernel.php | 2 +- .../src/Listeners/ChannelSettingsChange.php | 23 ++++ .../src/Providers/EventServiceProvider.php | 2 + .../Admin/src/Resources/lang/en/app.php | 3 +- .../views/settings/channels/edit.blade.php | 5 + ...0_105353_add_columns_in_channels_table.php | 4 +- .../Middleware/CheckForMaintenanceMode.php | 119 ++++++++++++++++++ packages/Webkul/Core/src/Models/Channel.php | 3 +- .../src/Providers/CoreServiceProvider.php | 24 ++-- 9 files changed, 169 insertions(+), 16 deletions(-) create mode 100644 packages/Webkul/Admin/src/Listeners/ChannelSettingsChange.php create mode 100644 packages/Webkul/Core/src/Http/Middleware/CheckForMaintenanceMode.php diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 4c2d12de3..3fc667cf3 100755 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -14,7 +14,7 @@ class Kernel extends HttpKernel * @var array */ protected $middleware = [ - \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, + \Webkul\Core\Http\Middleware\CheckForMaintenanceMode::class, \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, diff --git a/packages/Webkul/Admin/src/Listeners/ChannelSettingsChange.php b/packages/Webkul/Admin/src/Listeners/ChannelSettingsChange.php new file mode 100644 index 000000000..e5ddc81b5 --- /dev/null +++ b/packages/Webkul/Admin/src/Listeners/ChannelSettingsChange.php @@ -0,0 +1,23 @@ +is_maintenance_on) { + Artisan::call('down'); + } else { + Artisan::call('up'); + } + } +} \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Providers/EventServiceProvider.php b/packages/Webkul/Admin/src/Providers/EventServiceProvider.php index f40932b14..a890f9de2 100755 --- a/packages/Webkul/Admin/src/Providers/EventServiceProvider.php +++ b/packages/Webkul/Admin/src/Providers/EventServiceProvider.php @@ -27,5 +27,7 @@ class EventServiceProvider extends ServiceProvider Event::listen('sales.refund.save.after','Webkul\Admin\Listeners\Order@sendNewRefundMail'); Event::listen('sales.order.comment.create.after','Webkul\Admin\Listeners\Order@sendOrderCommentMail'); + + Event::listen('core.channel.update.after','Webkul\Admin\Listeners\ChannelSettingsChange@checkForMaintenaceMode'); } } \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/lang/en/app.php b/packages/Webkul/Admin/src/Resources/lang/en/app.php index 2944cefc7..827849e68 100755 --- a/packages/Webkul/Admin/src/Resources/lang/en/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/en/app.php @@ -805,7 +805,8 @@ return [ 'seo-title' => 'Meta title', 'seo-description' => 'Meta description', 'seo-keywords' => 'Meta keywords', - 'maintenance-mode' => 'Maintenance Mode' + 'maintenance-mode' => 'Maintenance Mode', + 'allowed-ips' => 'Allowed IPs' ], 'sliders' => [ diff --git a/packages/Webkul/Admin/src/Resources/views/settings/channels/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/channels/edit.blade.php index 46b2715a0..a0a3ba7de 100755 --- a/packages/Webkul/Admin/src/Resources/views/settings/channels/edit.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/settings/channels/edit.blade.php @@ -232,6 +232,11 @@ + +
+ + +
diff --git a/packages/Webkul/Core/src/Database/Migrations/2020_11_20_105353_add_columns_in_channels_table.php b/packages/Webkul/Core/src/Database/Migrations/2020_11_20_105353_add_columns_in_channels_table.php index 4c81e046d..680226cc3 100644 --- a/packages/Webkul/Core/src/Database/Migrations/2020_11_20_105353_add_columns_in_channels_table.php +++ b/packages/Webkul/Core/src/Database/Migrations/2020_11_20_105353_add_columns_in_channels_table.php @@ -15,6 +15,7 @@ class AddColumnsInChannelsTable extends Migration { Schema::table('channels', function (Blueprint $table) { $table->boolean('is_maintenance_on')->after('footer_content')->default(0); + $table->text('allowed_ips')->after('is_maintenance_on')->nullable(); }); } @@ -26,7 +27,8 @@ class AddColumnsInChannelsTable extends Migration public function down() { Schema::table('channels', function (Blueprint $table) { - // + $table->removeColumn('is_maintenance_on'); + $table->removeColumn('allowed_ips'); }); } } diff --git a/packages/Webkul/Core/src/Http/Middleware/CheckForMaintenanceMode.php b/packages/Webkul/Core/src/Http/Middleware/CheckForMaintenanceMode.php new file mode 100644 index 000000000..1f84fd067 --- /dev/null +++ b/packages/Webkul/Core/src/Http/Middleware/CheckForMaintenanceMode.php @@ -0,0 +1,119 @@ +app = $app; + + /* current channel */ + $this->channel = core()->getCurrentChannel(); + + /* adding exception for admin routes */ + $this->except[] = env('APP_ADMIN_URL', 'admin') . '*'; + + /* adding exception for ips */ + $this->excludedIPs = array_map('trim', explode(',', $this->channel->allowed_ips)); + } + + /** + * Check for the except routes. + * + * @param \Illuminate\Http\Request $request + * @return boolean + */ + protected function shouldPassThrough($request) + { + foreach ($this->except as $except) { + if ($except !== '/') { + $except = trim($except, '/'); + } + + if ($request->is($except)) { + return true; + } + } + + return false; + } + + /** + * Handle an incoming request. + * + * @param \Illuminate\Http\Request $request + * @param \Closure $next + * @return mixed + * + * @throws \Symfony\Component\HttpKernel\Exception\HttpException + */ + public function handle($request, Closure $next) + { + if ($this->app->isDownForMaintenance()) { + $response = $next($request); + + if (in_array($request->ip(), $this->excludedIPs)) { + return $response; + } + + $route = $request->route(); + + if ($route instanceof Route) { + if (in_array($route->getName(), $this->excludedNames)) { + return $response; + } + } + + if ($this->shouldPassThrough($request)) + { + return $response; + } + + throw new HttpException(503); + } + + return $next($request); + } +} \ No newline at end of file diff --git a/packages/Webkul/Core/src/Models/Channel.php b/packages/Webkul/Core/src/Models/Channel.php index 1b2f97043..7e50e5355 100755 --- a/packages/Webkul/Core/src/Models/Channel.php +++ b/packages/Webkul/Core/src/Models/Channel.php @@ -22,7 +22,8 @@ class Channel extends Model implements ChannelContract 'base_currency_id', 'root_category_id', 'home_seo', - 'is_maintenance_on' + 'is_maintenance_on', + 'allowed_ips' ]; /** diff --git a/packages/Webkul/Core/src/Providers/CoreServiceProvider.php b/packages/Webkul/Core/src/Providers/CoreServiceProvider.php index 8b4ff525a..47a17ce43 100755 --- a/packages/Webkul/Core/src/Providers/CoreServiceProvider.php +++ b/packages/Webkul/Core/src/Providers/CoreServiceProvider.php @@ -2,23 +2,23 @@ namespace Webkul\Core\Providers; -use Illuminate\Contracts\Debug\ExceptionHandler; -use Illuminate\Database\Eloquent\Factory as EloquentFactory; -use Illuminate\Support\ServiceProvider; -use Illuminate\Support\Facades\Validator; -use Illuminate\Foundation\AliasLoader; -use Illuminate\Support\Facades\Event; -use Webkul\Theme\ViewRenderEventManager; -use Webkul\Core\View\Compilers\BladeCompiler; -use Webkul\Core\Console\Commands\BookingCron; use Webkul\Core\Core; use Webkul\Core\Exceptions\Handler; -use Webkul\Core\Facades\Core as CoreFacade; use Webkul\Core\Models\SliderProxy; -use Webkul\Core\Observers\SliderObserver; -use Webkul\Core\Console\Commands\BagistoVersion; +use Illuminate\Support\Facades\Event; +use Illuminate\Foundation\AliasLoader; +use Illuminate\Support\ServiceProvider; +use Webkul\Theme\ViewRenderEventManager; +use Illuminate\Support\Facades\Validator; use Webkul\Core\Console\Commands\Install; +use Webkul\Core\Observers\SliderObserver; +use Webkul\Core\Facades\Core as CoreFacade; +use Webkul\Core\Console\Commands\BookingCron; +use Webkul\Core\View\Compilers\BladeCompiler; +use Illuminate\Contracts\Debug\ExceptionHandler; +use Webkul\Core\Console\Commands\BagistoVersion; use Webkul\Core\Console\Commands\ExchangeRateUpdate; +use Illuminate\Database\Eloquent\Factory as EloquentFactory; class CoreServiceProvider extends ServiceProvider {