[ ], ]; /** * Register any events for your application. * * @return void */ public function boot() { parent::boot(); Event::listen('Aacotroneo\Saml2\Events\Saml2LoginEvent', function (Saml2LoginEvent $event) { $messageId = $event->getSaml2Auth()->getLastMessageId(); if (class_exists('Memcached')) { $cache = new \Memcached(); $cache->addServer( config('cache.stores.memcached.servers.0.host'), config('cache.stores.memcached.servers.0.port') ); $fromCache = $cache->get(config('cache.prefix') . "_saml_message_id_" . $messageId); if (!in_array($cache->getResultCode(), [\Memcached::RES_SUCCESS, \Memcached::RES_NOTFOUND])) { throw new \Exception( \sprintf( "SAML MESSAGE ID HANDLER - Memcached Error : %d - %s", $cache->getResultCode(), "https://www.php.net/manual/en/memcached.getresultcode.php" ) ); } if ($fromCache) { logger()->error( 'SAML MESSAGE ID HANDLER', [ 'error' => 'Message ID : ' . $messageId . " replayed !" ] ); abort(403); } else { // Cache for 8h. $cache->set(config('cache.prefix') . "_saml_message_id_" . $messageId, $messageId, 28800); if ($cache->getResultCode() === \Memcached::RES_NOTSTORED) { throw new \Exception('SAML MESSAGE ID HANDLER - Memcached Error : NOT STORED'); } } } else { throw new \Exception("SAML MESSAGE ID HANDLER - Memcached is missing"); } //end if $user = $event->getSaml2User(); $email = $user->getNameId(); $lUser = User::where('email', '=', $email)->first(); if (!$lUser) { abort(redirect()->route('unauthorized')); } session(['sessionIndex' => $user->getSessionIndex()]); session(['tmpUserOTP' => $lUser]); abort(redirect()->route('auth.verify')); }); // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass Event::listen('Aacotroneo\Saml2\Events\Saml2LogoutEvent', function ($event) { Auth::logout(); Session::save(); }); } }