. */ namespace App\Services\UserSystem\TFA; use Scheb\TwoFactorBundle\Model\Google\TwoFactorInterface; use Scheb\TwoFactorBundle\Security\TwoFactor\Provider\Google\GoogleAuthenticator; use Scheb\TwoFactorBundle\Security\TwoFactor\Provider\Google\GoogleAuthenticatorInterface; use Symfony\Component\DependencyInjection\Attribute\AsDecorator; use Symfony\Component\DependencyInjection\Attribute\AutowireDecorated; use Symfony\Component\HttpFoundation\RequestStack; #[AsDecorator(GoogleAuthenticatorInterface::class)] class DecoratedGoogleAuthenticator implements GoogleAuthenticatorInterface { public function __construct( #[AutowireDecorated] private GoogleAuthenticatorInterface $inner, private RequestStack $requestStack) { } public function checkCode(TwoFactorInterface $user, string $code): bool { return $this->inner->checkCode($user, $code); } public function getQRContent(TwoFactorInterface $user): string { $qr_content = $this->inner->getQRContent($user); //Replace $$DOMAIN$$ with the current domain $request = $this->requestStack->getCurrentRequest(); //If no request is available, just put "Part-DB" as domain $domain = "Part-DB"; if ($request !== null) { $domain = $request->getHttpHost(); } //Domain must be url encoded $domain = urlencode($domain); return str_replace(urlencode('$$DOMAIN$$'), $domain, $qr_content); } public function generateSecret(): string { return $this->inner->generateSecret(); } }