From 6b6eeb9a3e1087c33ac64e5aa65e5e1fc5ebbe9f Mon Sep 17 00:00:00 2001 From: James Brooks Date: Wed, 3 Aug 2016 12:26:23 +0100 Subject: [PATCH] Added more user and system events --- .../System/SystemCheckedForUpdatesEvent.php | 22 ++++++++++ .../Events/System/SystemEventInterface.php | 24 +++++++++++ .../Events/System/SystemWasInstalledEvent.php | 22 ++++++++++ .../Events/System/SystemWasUpdatedEvent.php | 22 ++++++++++ .../Events/User/UserDisabledTwoAuthEvent.php | 41 +++++++++++++++++++ .../Events/User/UserEnabledTwoAuthEvent.php | 41 +++++++++++++++++++ .../User/UserRegeneratedApiTokenEvent.php | 41 +++++++++++++++++++ .../Providers/EventServiceProvider.php | 18 ++++++++ .../Controllers/Dashboard/UserController.php | 7 ++++ app/Integrations/Contracts/System.php | 7 ++++ app/Integrations/Core/System.php | 18 ++++++-- app/Integrations/GitHub/Releases.php | 3 ++ 12 files changed, 262 insertions(+), 4 deletions(-) create mode 100644 app/Bus/Events/System/SystemCheckedForUpdatesEvent.php create mode 100644 app/Bus/Events/System/SystemEventInterface.php create mode 100644 app/Bus/Events/System/SystemWasInstalledEvent.php create mode 100644 app/Bus/Events/System/SystemWasUpdatedEvent.php create mode 100644 app/Bus/Events/User/UserDisabledTwoAuthEvent.php create mode 100644 app/Bus/Events/User/UserEnabledTwoAuthEvent.php create mode 100644 app/Bus/Events/User/UserRegeneratedApiTokenEvent.php diff --git a/app/Bus/Events/System/SystemCheckedForUpdatesEvent.php b/app/Bus/Events/System/SystemCheckedForUpdatesEvent.php new file mode 100644 index 00000000..e8da9d00 --- /dev/null +++ b/app/Bus/Events/System/SystemCheckedForUpdatesEvent.php @@ -0,0 +1,22 @@ + + */ +final class SystemCheckedForUpdatesEvent implements SystemEventInterface +{ + // +} diff --git a/app/Bus/Events/System/SystemEventInterface.php b/app/Bus/Events/System/SystemEventInterface.php new file mode 100644 index 00000000..d195fa58 --- /dev/null +++ b/app/Bus/Events/System/SystemEventInterface.php @@ -0,0 +1,24 @@ + + */ +interface SystemEventInterface extends EventInterface +{ + // +} diff --git a/app/Bus/Events/System/SystemWasInstalledEvent.php b/app/Bus/Events/System/SystemWasInstalledEvent.php new file mode 100644 index 00000000..6f333f7c --- /dev/null +++ b/app/Bus/Events/System/SystemWasInstalledEvent.php @@ -0,0 +1,22 @@ + + */ +final class SystemWasInstalledEvent implements SystemEventInterface +{ + // +} diff --git a/app/Bus/Events/System/SystemWasUpdatedEvent.php b/app/Bus/Events/System/SystemWasUpdatedEvent.php new file mode 100644 index 00000000..51572888 --- /dev/null +++ b/app/Bus/Events/System/SystemWasUpdatedEvent.php @@ -0,0 +1,22 @@ + + */ +final class SystemWasUpdatedEvent implements SystemEventInterface +{ + // +} diff --git a/app/Bus/Events/User/UserDisabledTwoAuthEvent.php b/app/Bus/Events/User/UserDisabledTwoAuthEvent.php new file mode 100644 index 00000000..22316bda --- /dev/null +++ b/app/Bus/Events/User/UserDisabledTwoAuthEvent.php @@ -0,0 +1,41 @@ + + */ +final class UserDisabledTwoAuthEvent implements UserEventInterface +{ + /** + * The user that disabled two auth. + * + * @var \CachetHQ\Cachet\Models\User + */ + public $user; + + /** + * Create a new user disabled two auth event instance. + * + * @param \CachetHQ\Cachet\Models\User $user + * + * @return void + */ + public function __construct(User $user) + { + $this->user = $user; + } +} diff --git a/app/Bus/Events/User/UserEnabledTwoAuthEvent.php b/app/Bus/Events/User/UserEnabledTwoAuthEvent.php new file mode 100644 index 00000000..ad3a56b7 --- /dev/null +++ b/app/Bus/Events/User/UserEnabledTwoAuthEvent.php @@ -0,0 +1,41 @@ + + */ +final class UserEnabledTwoAuthEvent implements UserEventInterface +{ + /** + * The user that enabled two auth. + * + * @var \CachetHQ\Cachet\Models\User + */ + public $user; + + /** + * Create a new user enabled two auth event instance. + * + * @param \CachetHQ\Cachet\Models\User $user + * + * @return void + */ + public function __construct(User $user) + { + $this->user = $user; + } +} diff --git a/app/Bus/Events/User/UserRegeneratedApiTokenEvent.php b/app/Bus/Events/User/UserRegeneratedApiTokenEvent.php new file mode 100644 index 00000000..4797608f --- /dev/null +++ b/app/Bus/Events/User/UserRegeneratedApiTokenEvent.php @@ -0,0 +1,41 @@ + + */ +final class UserRegeneratedApiTokenEvent implements UserEventInterface +{ + /** + * The user that regenerated their api token. + * + * @var \CachetHQ\Cachet\Models\User + */ + public $user; + + /** + * Create a new user regenerated api token event instance. + * + * @param \CachetHQ\Cachet\Models\User $user + * + * @return void + */ + public function __construct(User $user) + { + $this->user = $user; + } +} diff --git a/app/Foundation/Providers/EventServiceProvider.php b/app/Foundation/Providers/EventServiceProvider.php index 051f3e8e..c06a1a4a 100644 --- a/app/Foundation/Providers/EventServiceProvider.php +++ b/app/Foundation/Providers/EventServiceProvider.php @@ -87,6 +87,21 @@ class EventServiceProvider extends ServiceProvider 'CachetHQ\Cachet\Bus\Events\Subscriber\SubscriberHasVerifiedEvent' => [ // ], + 'CachetHQ\Cachet\Bus\Events\System\SystemCheckedForUpdatesEvent' => [ + // + ], + 'CachetHQ\Cachet\Bus\Events\System\SystemWasInstalledEvent' => [ + // + ], + 'CachetHQ\Cachet\Bus\Events\System\SystemWasUpdatedEvent' => [ + // + ], + 'CachetHQ\Cachet\Bus\Events\User\UserDisabledTwoAuthEvent' => [ + // + ], + 'CachetHQ\Cachet\Bus\Events\User\UserEnabledTwoAuthEvent' => [ + // + ], 'CachetHQ\Cachet\Bus\Events\User\UserFailedTwoAuthEvent' => [ // ], @@ -99,6 +114,9 @@ class EventServiceProvider extends ServiceProvider 'CachetHQ\Cachet\Bus\Events\User\UserPassedTwoAuthEvent' => [ // ], + 'CachetHQ\Cachet\Bus\Events\User\UserRegeneratedApiTokenEvent' => [ + // + ], 'CachetHQ\Cachet\Bus\Events\User\UserWasAddedEvent' => [ // ], diff --git a/app/Http/Controllers/Dashboard/UserController.php b/app/Http/Controllers/Dashboard/UserController.php index 882551b7..d665346e 100644 --- a/app/Http/Controllers/Dashboard/UserController.php +++ b/app/Http/Controllers/Dashboard/UserController.php @@ -12,6 +12,9 @@ namespace CachetHQ\Cachet\Http\Controllers\Dashboard; use AltThree\Validator\ValidationException; +use CachetHQ\Cachet\Bus\Events\User\UserDisabledTwoAuthEvent; +use CachetHQ\Cachet\Bus\Events\User\UserEnabledTwoAuthEvent; +use CachetHQ\Cachet\Bus\Events\User\UserRegeneratedApiTokenEvent; use CachetHQ\Cachet\Models\User; use GrahamCampbell\Binput\Facades\Binput; use Illuminate\Routing\Controller; @@ -46,8 +49,10 @@ class UserController extends Controller // Let's enable/disable auth if ($enable2FA && !Auth::user()->hasTwoFactor) { + event(new UserEnabledTwoAuthEvent(Auth::user())); $userData['google_2fa_secret'] = Google2FA::generateSecretKey(); } elseif (!$enable2FA) { + event(new UserDisabledTwoAuthEvent(Auth::user())); $userData['google_2fa_secret'] = ''; } @@ -76,6 +81,8 @@ class UserController extends Controller $user->api_key = User::generateApiKey(); $user->save(); + event(new UserRegeneratedApiTokenEvent($user)); + return Redirect::route('dashboard.user'); } } diff --git a/app/Integrations/Contracts/System.php b/app/Integrations/Contracts/System.php index f427b8e4..e64f4262 100644 --- a/app/Integrations/Contracts/System.php +++ b/app/Integrations/Contracts/System.php @@ -24,4 +24,11 @@ interface System * @return array */ public function getStatus(); + + /** + * Get the cachet version. + * + * @return string + */ + public function getVersion(); } diff --git a/app/Integrations/Core/System.php b/app/Integrations/Core/System.php index a44af6e8..77c55e57 100644 --- a/app/Integrations/Core/System.php +++ b/app/Integrations/Core/System.php @@ -30,8 +30,8 @@ class System implements SystemContract public function getStatus() { $enabledScope = Component::enabled(); - $totalComponents = Component::enabled()->count(); - $majorOutages = Component::enabled()->status(4)->count(); + $totalComponents = $enabledScope->count(); + $majorOutages = $enabledScope->status(4)->count(); $isMajorOutage = $totalComponents ? ($majorOutages / $totalComponents) >= 0.5 : false; // Default data @@ -47,7 +47,7 @@ class System implements SystemContract 'system_message' => trans_choice('cachet.service.major', $totalComponents), 'favicon' => 'favicon-high-alert', ]; - } elseif (Component::enabled()->notStatus(1)->count() === 0) { + } elseif ($enabledScope->notStatus(1)->count() === 0) { // If all our components are ok, do we have any non-fixed incidents? $incidents = Incident::notScheduled()->orderBy('created_at', 'desc')->get()->filter(function ($incident) { return $incident->status > 0; @@ -61,10 +61,20 @@ class System implements SystemContract 'favicon' => 'favicon', ]; } - } elseif (Component::enabled()->whereIn('status', [2, 3])->count() > 0) { + } elseif ($enabledScope->whereIn('status', [2, 3])->count() > 0) { $status['favicon'] = 'favicon-medium-alert'; } return $status; } + + /** + * Get the cachet version. + * + * @return string + */ + public function getVersion() + { + return CACHET_VERSION; + } } diff --git a/app/Integrations/GitHub/Releases.php b/app/Integrations/GitHub/Releases.php index b1192723..8d7935ad 100644 --- a/app/Integrations/GitHub/Releases.php +++ b/app/Integrations/GitHub/Releases.php @@ -11,6 +11,7 @@ namespace CachetHQ\Cachet\Integrations\GitHub; +use CachetHQ\Cachet\Bus\Events\System\SystemCheckedForUpdatesEvent; use CachetHQ\Cachet\Integrations\Contracts\Releases as ReleasesContract; use GuzzleHttp\Client; use Illuminate\Contracts\Cache\Repository; @@ -82,6 +83,8 @@ class Releases implements ReleasesContract $headers['OAUTH-TOKEN'] = $this->token; } + event(new SystemCheckedForUpdatesEvent()); + return json_decode((new Client())->get($this->url, [ 'headers' => $headers, ])->getBody(), true);