2022-10-03 23:09:50 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Controller;
|
|
|
|
|
2022-10-04 00:08:58 +02:00
|
|
|
use App\Entity\UserSystem\WebauthnKey;
|
|
|
|
use Doctrine\ORM\EntityManagerInterface;
|
2022-10-03 23:09:50 +02:00
|
|
|
use Jbtronics\TFAWebauthn\Services\TFAWebauthnRegistrationHelper;
|
|
|
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
|
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
|
|
use Symfony\Component\Routing\Annotation\Route;
|
|
|
|
|
2022-10-04 00:08:58 +02:00
|
|
|
use function Symfony\Component\Translation\t;
|
|
|
|
|
2022-10-03 23:09:50 +02:00
|
|
|
class WebauthnKeyRegistrationController extends AbstractController
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @Route("/webauthn/register", name="webauthn_register")
|
|
|
|
*/
|
2022-10-04 00:08:58 +02:00
|
|
|
public function register(Request $request, TFAWebauthnRegistrationHelper $registrationHelper, EntityManagerInterface $em)
|
2022-10-03 23:09:50 +02:00
|
|
|
{
|
2022-11-05 23:49:53 +01:00
|
|
|
//When user change its settings, he should be logged in fully.
|
|
|
|
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
|
2022-10-03 23:09:50 +02:00
|
|
|
|
|
|
|
//If form was submitted, check the auth response
|
|
|
|
if ($request->getMethod() === 'POST') {
|
|
|
|
$webauthnResponse = $request->request->get('_auth_code');
|
|
|
|
|
|
|
|
//Retrieve other data from the form, that you want to store with the key
|
|
|
|
$keyName = $request->request->get('keyName');
|
2022-10-04 00:08:58 +02:00
|
|
|
if (empty($keyName)) {
|
|
|
|
$keyName = 'Key ' . date('Y-m-d H:i:s');
|
|
|
|
}
|
2022-10-03 23:09:50 +02:00
|
|
|
|
|
|
|
//Check the response
|
2022-10-04 00:08:58 +02:00
|
|
|
try {
|
|
|
|
$new_key = $registrationHelper->checkRegistrationResponse($webauthnResponse);
|
|
|
|
} catch (\Exception $exception) {
|
|
|
|
$this->addFlash('error', t('tfa_u2f.add_key.registration_error'));
|
|
|
|
return $this->redirectToRoute('webauthn_register');
|
|
|
|
}
|
|
|
|
|
|
|
|
$keyEntity = WebauthnKey::fromRegistration($new_key);
|
|
|
|
$keyEntity->setName($keyName);
|
|
|
|
$keyEntity->setUser($this->getUser());
|
|
|
|
|
|
|
|
$em->persist($keyEntity);
|
|
|
|
$em->flush();
|
2022-10-03 23:09:50 +02:00
|
|
|
|
|
|
|
|
|
|
|
$this->addFlash('success', 'Key registered successfully');
|
2022-10-04 00:08:58 +02:00
|
|
|
return $this->redirectToRoute('user_settings');
|
2022-10-03 23:09:50 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return $this->render(
|
2022-11-27 21:45:04 +01:00
|
|
|
'security/Webauthn/webauthn_register.html.twig',
|
2022-10-03 23:09:50 +02:00
|
|
|
[
|
|
|
|
'registrationRequest' => $registrationHelper->generateRegistrationRequestAsJSON(),
|
|
|
|
]
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|