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
{