diff --git a/app/Composers/AppComposer.php b/app/Composers/AppComposer.php new file mode 100644 index 00000000..873e7c5d --- /dev/null +++ b/app/Composers/AppComposer.php @@ -0,0 +1,36 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace CachetHQ\Cachet\Composers; + +use CachetHQ\Cachet\Facades\Setting; +use Illuminate\Contracts\View\View; + +class AppComposer +{ + /** + * Index page view composer. + * + * @param \Illuminate\Contracts\View\View $view + */ + public function compose(View $view) + { + $isEnabled = (bool) Setting::get('enable_subscribers', false); + $mailAddress = env('MAIL_ADDRESS', false); + $mailFrom = env('MAIL_NAME', false); + + $withData = [ + 'subscribersEnabled' => $isEnabled && $mailAddress && $mailFrom, + ]; + + $view->with($withData); + } +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 1582c299..9a29749b 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -35,14 +35,15 @@ class Kernel extends HttpKernel * @var array */ protected $routeMiddleware = [ - 'auth' => 'CachetHQ\Cachet\Http\Middleware\Authenticate', - 'auth.api' => 'CachetHQ\Cachet\Http\Middleware\ApiAuthenticate', - 'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth', - 'guest' => 'CachetHQ\Cachet\Http\Middleware\RedirectIfAuthenticated', - 'csrf' => 'Illuminate\Foundation\Http\Middleware\VerifyCsrfToken', - 'admin' => 'CachetHQ\Cachet\Http\Middleware\Admin', - 'login.throttling' => 'CachetHQ\Cachet\Http\Middleware\LoginThrottling', - 'app.isSetup' => 'CachetHQ\Cachet\Http\Middleware\AppIsSetup', - 'app.hasSetting' => 'CachetHQ\Cachet\Http\Middleware\HasSetting', + 'auth' => 'CachetHQ\Cachet\Http\Middleware\Authenticate', + 'auth.api' => 'CachetHQ\Cachet\Http\Middleware\ApiAuthenticate', + 'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth', + 'guest' => 'CachetHQ\Cachet\Http\Middleware\RedirectIfAuthenticated', + 'csrf' => 'Illuminate\Foundation\Http\Middleware\VerifyCsrfToken', + 'admin' => 'CachetHQ\Cachet\Http\Middleware\Admin', + 'login.throttling' => 'CachetHQ\Cachet\Http\Middleware\LoginThrottling', + 'app.isSetup' => 'CachetHQ\Cachet\Http\Middleware\AppIsSetup', + 'app.hasSetting' => 'CachetHQ\Cachet\Http\Middleware\HasSetting', + 'app.subscribers' => 'CachetHQ\Cachet\Http\Middleware\SubscribersConfigured', ]; } diff --git a/app/Http/Middleware/SubscribersConfigured.php b/app/Http/Middleware/SubscribersConfigured.php new file mode 100644 index 00000000..fb062aac --- /dev/null +++ b/app/Http/Middleware/SubscribersConfigured.php @@ -0,0 +1,40 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace CachetHQ\Cachet\Http\Middleware; + +use CachetHQ\Cachet\Facades\Setting; +use Closure; +use Illuminate\Support\Facades\Redirect; + +class SubscribersConfigured +{ + /** + * We're verifying that subscribers is both enabled and configured. + * + * @param \Illuminate\Http\Request $request + * @param \Closure $next + * + * @return mixed + */ + public function handle($request, Closure $next) + { + $isEnabled = Setting::get('enable_subscribers', false); + $mailAddress = env('MAIL_ADDRESS', false); + $mailFrom = env('MAIL_NAME', false); + + if (!($isEnabled && $mailAddress && $mailFrom)) { + return Redirect::route('status-page'); + } + + return $next($request); + } +} diff --git a/app/Http/Routes/StatusPageRoutes.php b/app/Http/Routes/StatusPageRoutes.php index bfc6f4af..be4efdb9 100644 --- a/app/Http/Routes/StatusPageRoutes.php +++ b/app/Http/Routes/StatusPageRoutes.php @@ -28,24 +28,28 @@ class StatusPageRoutes 'as' => 'status-page', 'uses' => 'HomeController@showIndex', ]); - $router->get('subscribe', [ - 'as' => 'subscribe-page', - 'uses' => 'SubscribeController@showSubscribe', - ]); - $router->post('subscribe', [ - 'as' => 'subscribe', - 'uses' => 'SubscribeController@postSubscribe', - ]); - $router->get('subscribe/verify/{code}', [ - 'as' => 'subscribe-verify', - 'uses' => 'SubscribeController@getVerify', - ]); - $router->get('unsubscribe/{code}', [ - 'as' => 'unsubscribe', - 'uses' => 'SubscribeController@getUnsubscribe', - ]); + $router->get('/atom/{component_group?}', 'AtomController@feedAction'); $router->get('/rss/{component_group?}', 'RssController@feedAction'); + + $router->group(['middleware' => 'app.subscribers'], function ($router) { + $router->get('subscribe', [ + 'as' => 'subscribe-page', + 'uses' => 'SubscribeController@showSubscribe', + ]); + $router->post('subscribe', [ + 'as' => 'subscribe', + 'uses' => 'SubscribeController@postSubscribe', + ]); + $router->get('subscribe/verify/{code}', [ + 'as' => 'subscribe-verify', + 'uses' => 'SubscribeController@getVerify', + ]); + $router->get('unsubscribe/{code}', [ + 'as' => 'unsubscribe', + 'uses' => 'SubscribeController@getUnsubscribe', + ]); + }); }); } } diff --git a/app/Providers/ComposerServiceProvider.php b/app/Providers/ComposerServiceProvider.php index 5da9dc31..1b13f517 100644 --- a/app/Providers/ComposerServiceProvider.php +++ b/app/Providers/ComposerServiceProvider.php @@ -11,6 +11,7 @@ namespace CachetHQ\Cachet\Providers; +use CachetHQ\Cachet\Composers\AppComposer; use CachetHQ\Cachet\Composers\DashboardComposer; use CachetHQ\Cachet\Composers\IndexComposer; use CachetHQ\Cachet\Composers\LoggedUserComposer; @@ -27,6 +28,7 @@ class ComposerServiceProvider extends ServiceProvider */ public function register() { + $this->app->view->composer('*', AppComposer::class); $this->app->view->composer('*', LoggedUserComposer::class); $this->app->view->composer(['index', 'subscribe'], IndexComposer::class); $this->app->view->composer(['index', 'subscribe'], ThemeComposer::class); diff --git a/app/Providers/ViewComposerServiceProvider.php b/app/Providers/ViewComposerServiceProvider.php deleted file mode 100644 index 125ccc44..00000000 --- a/app/Providers/ViewComposerServiceProvider.php +++ /dev/null @@ -1,41 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace CachetHQ\Cachet\Providers; - -use Illuminate\Support\ServiceProvider; - -class ViewComposerServiceProvider extends ServiceProvider -{ - /** - * Boot the service provider. - */ - public function boot() - { - // - } - - /** - * Register the service provider. - */ - public function register() - { - $this->app->view->composer('*', 'CachetHQ\Cachet\Composers\LoggedUserComposer'); - $this->app->view->composer('index', 'CachetHQ\Cachet\Composers\IndexComposer'); - $this->app->view->composer('index', 'CachetHQ\Cachet\Composers\ThemeComposer'); - $this->app->view->composer('subscribe', 'CachetHQ\Cachet\Composers\ThemeComposer'); - $this->app->view->composer('dashboard.*', 'CachetHQ\Cachet\Composers\DashboardComposer'); - $this->app->view->composer([ - 'setup', - 'dashboard.settings.app-setup', - ], 'CachetHQ\Cachet\Composers\TimezoneLocaleComposer'); - } -} diff --git a/resources/views/dashboard/settings/app-setup.blade.php b/resources/views/dashboard/settings/app-setup.blade.php index 008bd5a3..eff2f669 100644 --- a/resources/views/dashboard/settings/app-setup.blade.php +++ b/resources/views/dashboard/settings/app-setup.blade.php @@ -123,6 +123,15 @@ +
+
+
+ + + +
+
+
diff --git a/resources/views/index.blade.php b/resources/views/index.blade.php index 229df7ae..d69346fd 100644 --- a/resources/views/index.blade.php +++ b/resources/views/index.blade.php @@ -1,9 +1,11 @@ @extends('layout.master') @section('content') + @if($subscribersEnabled) + @endif