. */ namespace SP\Modules\Web\Controllers\Traits; use Closure; use SP\Core\Exceptions\SessionTimeout; use SP\Core\Exceptions\SPException; use SP\Http\Request; use SP\Http\RequestInterface; use SP\Mvc\Controller\ControllerTrait; /** * Trait ControllerTratit */ trait WebControllerTrait { use ControllerTrait; private bool $setup = false; /** * Returns the signed URI component after validating its signature. * This component is used for deep linking */ final protected function getSignedUriFromRequest(RequestInterface $request): ?string { if (!$this->setup) { return null; } $from = $request->analyzeString('from'); if ($from) { try { $request->verifySignature( $this->configData->getPasswordSalt(), 'from' ); } catch (SPException $e) { processException($e); $from = null; } } return $from; } /** * @throws \JsonException * @throws SessionTimeout */ private function handleSessionTimeout(Closure $checker): void { if ($checker->call($this) === true) { $this->sessionLogout( $this->request, function ($redirect) { $this->router->response() ->redirect($redirect) ->send(true); } ); throw new SessionTimeout(); } } }