Skip to content

Commit

Permalink
fix: fix event dispatch (#2555)
Browse files Browse the repository at this point in the history
  • Loading branch information
asbiin committed Apr 1, 2019
1 parent afcafa6 commit 397c3e4
Show file tree
Hide file tree
Showing 20 changed files with 406 additions and 119 deletions.
1 change: 1 addition & 0 deletions CHANGELOG
Expand Up @@ -12,6 +12,7 @@ Enhancements:

Fixes:

* Fix event dispatch for login (google2fa, u2f) events handle
* Fix address input label mistake
* Fix dashboard crash when reminder is empty
* Fix import vCard with Cyrillic encoding
Expand Down
9 changes: 8 additions & 1 deletion app/Http/Controllers/Auth/Validate2faController.php
Expand Up @@ -4,6 +4,7 @@

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use PragmaRX\Google2FALaravel\Facade as Google2FA;

class Validate2faController extends Controller
{
Expand All @@ -25,6 +26,12 @@ public function index(Request $request)

public static function loginCallback()
{
app('pragmarx.google2fa')->login();
try {
app('pragmarx.google2fa')->stateless = false;
} catch (\Exception $e) {
// catch exception until pragmarx/google2fa-laravel package is fixed
// See https://github.com/antonioribeiro/google2fa-laravel/pull/55
}
Google2FA::login();
}
}
8 changes: 3 additions & 5 deletions app/Http/Controllers/Settings/MultiFAController.php
Expand Up @@ -3,14 +3,14 @@
namespace App\Http\Controllers\Settings;

use Illuminate\Http\Request;
use PragmaRX\Google2FA\Google2FA;
use Lahaxearnaud\U2f\Models\U2fKey;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use App\Traits\JsonRespondController;
use Illuminate\Support\Facades\Event;
use Lahaxearnaud\U2f\U2fFacade as U2f;
use Illuminate\Foundation\Auth\RedirectsUsers;
use PragmaRX\Google2FALaravel\Facade as Google2FA;
use PragmaRX\Google2FALaravel\Support\Authenticator;
use App\Http\Resources\Settings\U2fKey\U2fKey as U2fKeyResource;

Expand Down Expand Up @@ -47,7 +47,7 @@ public function enableTwoFactor(Request $request)
$user = $request->user();

//generate image for QR barcode
$imageDataUri = app('pragmarx.google2fa')->getQRCodeInline(
$imageDataUri = Google2FA::getQRCodeInline(
$request->getHttpHost(),
$user->email,
$secret,
Expand Down Expand Up @@ -144,9 +144,7 @@ public function deactivateTwoFactor(Request $request)
*/
private function generateSecret()
{
$google2fa = app('pragmarx.google2fa');

return $google2fa->generateSecretKey(32);
return Google2FA::generateSecretKey(32);
}

/**
Expand Down
4 changes: 2 additions & 2 deletions app/Http/Controllers/SettingsController.php
Expand Up @@ -25,8 +25,8 @@
use Illuminate\Support\Facades\Storage;
use App\Http\Requests\InvitationRequest;
use App\Services\Contact\Tag\DestroyTag;
use PragmaRX\Google2FALaravel\Google2FA;
use App\Services\Account\DestroyAllDocuments;
use PragmaRX\Google2FALaravel\Facade as Google2FA;
use App\Http\Resources\Settings\U2fKey\U2fKey as U2fKeyResource;

class SettingsController
Expand Down Expand Up @@ -528,7 +528,7 @@ public function security()
->get();

return view('settings.security.index')
->with('is2FAActivated', app('pragmarx.google2fa')->isActivated())
->with('is2FAActivated', Google2FA::isActivated())
->with('currentkeys', U2fKeyResource::collection($u2fKeys));
}

Expand Down
96 changes: 89 additions & 7 deletions app/Listeners/LoginListener.php
Expand Up @@ -2,28 +2,110 @@

namespace App\Listeners;

use App\Events\RecoveryLogin;
use Illuminate\Auth\Events\Login;
use Lahaxearnaud\U2f\Models\U2fKey;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Auth\Validate2faController;
use PragmaRX\Google2FALaravel\Events\LoginSucceeded;
use Illuminate\Contracts\Auth\Authenticatable as User;

class LoginListener
{
/**
* Register the listeners for the subscriber.
*
* @param \Illuminate\Events\Dispatcher $events
*/
public function subscribe($events)
{
$events->listen(
\Illuminate\Auth\Events\Login::class,
'\App\Listeners\LoginListener@onLogin'
);
$events->listen(
\PragmaRX\Google2FALaravel\Events\LoginSucceeded::class,
'\App\Listeners\LoginListener@onGoogle2faLogin'
);
$events->listen(
'u2f.authentication',
'\App\Listeners\LoginListener@onU2fLogin'
);
$events->listen(
\App\Events\RecoveryLogin::class,
'\App\Listeners\LoginListener@onRecoveryLogin'
);
}

/**
* Handle the Illuminate login event.
*
* @param Login $event
* @return void
*/
public function handle(Login $event)
public function onLogin(Login $event)
{
if (Auth::viaRemember()) {
if (config('google2fa.enabled') && ! empty($event->user->google2fa_secret)) {
Validate2faController::loginCallback();
}
if (config('u2f.enable') && U2fKey::where('user_id', $event->user->getAuthIdentifier())->count() > 0) {
session([config('u2f.sessionU2fName') => true]);
}
$this->registerGoogle2fa($event->user);
$this->registerU2f($event->user);
}
}

/**
* Handle the Google2fa Login event.
*
* @param LoginSucceeded $event
* @return void
*/
public function onGoogle2faLogin(LoginSucceeded $event)
{
$this->registerU2f($event->user);
}

/**
* Handle the U2f login event.
*
* @param mixed $u2fKey
* @param User $user
*/
public function onU2fLogin($u2fKey, User $user)
{
$this->registerGoogle2fa($user);
}

/**
* Handle the recovery login event.
*
* @param RecoveryLogin $event
* @return void
*/
public function onRecoveryLogin(RecoveryLogin $event)
{
$this->registerGoogle2fa($event->user);
$this->registerU2f($event->user);
}

/**
* Force register Google2fa login.
*
* @param User $user
*/
private function registerGoogle2fa(User $user)
{
if (config('google2fa.enabled') && ! empty($user->google2fa_secret)) {
Validate2faController::loginCallback();
}
}

/**
* Force register U2f login.
*
* @param User $user
*/
private function registerU2f(User $user)
{
if (config('u2f.enable') && U2fKey::where('user_id', $user->getAuthIdentifier())->count() > 0) {
session([config('u2f.sessionU2fName') => true]);
}
}
}
22 changes: 0 additions & 22 deletions app/Listeners/LoginSucceed2fa.php

This file was deleted.

26 changes: 0 additions & 26 deletions app/Listeners/RecoveryLoginListener.php

This file was deleted.

27 changes: 5 additions & 22 deletions app/Providers/EventServiceProvider.php
Expand Up @@ -3,7 +3,6 @@
namespace App\Providers;

use Illuminate\Support\Facades\Event;
use App\Http\Controllers\Auth\Validate2faController;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;

class EventServiceProvider extends ServiceProvider
Expand All @@ -14,15 +13,6 @@ class EventServiceProvider extends ServiceProvider
* @var array
*/
protected $listen = [
\PragmaRX\Google2FALaravel\Events\LoginSucceeded::class => [
\App\Listeners\LoginSucceed2fa::class,
],
\Illuminate\Auth\Events\Login::class => [
\App\Listeners\LoginListener::class,
],
\App\Events\RecoveryLogin::class => [
\App\Listeners\RecoveryLoginListener::class,
],
\Illuminate\Foundation\Events\LocaleUpdated::class => [
\App\Listeners\LocaleUpdated::class,
],
Expand All @@ -32,18 +22,11 @@ class EventServiceProvider extends ServiceProvider
];

/**
* Register any other events for your application.
* The subscriber classes to register.
*
* @return void
* @var array
*/
public function boot()
{
parent::boot();

Event::listen('u2f.authentication', function ($u2fKey, $user) {
if (config('google2fa.enabled') && ! empty($user->google2fa_secret)) {
Validate2faController::loginCallback();
}
});
}
protected $subscribe = [
\App\Listeners\LoginListener::class,
];
}
6 changes: 3 additions & 3 deletions composer.json
Expand Up @@ -18,7 +18,7 @@
"guzzlehttp/guzzle": "^6.2",
"intervention/image": "^2.3",
"jenssegers/date": "^3.3",
"lahaxearnaud/laravel-u2f": "^1.3",
"lahaxearnaud/laravel-u2f": "^1.5",
"laravel/cashier": "~8.0",
"laravel/framework": "5.8.*",
"laravel/helpers": "^1.0",
Expand All @@ -35,8 +35,8 @@
"ok/ipstack-client": "^1.2",
"paragonie/constant_time_encoding": "^2.2",
"pragmarx/countries-laravel": "^0.6.1",
"pragmarx/google2fa": "^3.0",
"pragmarx/google2fa-laravel": "^0.2",
"pragmarx/google2fa": "^5.0",
"pragmarx/google2fa-laravel": "^1.0",
"pragmarx/recovery": "^0.1.0",
"predis/predis": "^1.1",
"ralouphie/mimey": "^2.0",
Expand Down

0 comments on commit 397c3e4

Please sign in to comment.