diff --git a/composer.lock b/composer.lock index 760ce8a..7c80f1c 100644 --- a/composer.lock +++ b/composer.lock @@ -5437,16 +5437,16 @@ }, { "name": "symfony/mailer", - "version": "v5.3.0", + "version": "v5.3.3", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "3b7f45a1f5488032da33c00f619909b4a6bf57d6" + "reference": "6ebd500f14402344fe4369ee88bfec27a567a24d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/3b7f45a1f5488032da33c00f619909b4a6bf57d6", - "reference": "3b7f45a1f5488032da33c00f619909b4a6bf57d6", + "url": "https://api.github.com/repos/symfony/mailer/zipball/6ebd500f14402344fe4369ee88bfec27a567a24d", + "reference": "6ebd500f14402344fe4369ee88bfec27a567a24d", "shasum": "" }, "require": { @@ -5492,7 +5492,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v5.3.0" + "source": "https://github.com/symfony/mailer/tree/v5.3.3" }, "funding": [ { @@ -5508,7 +5508,7 @@ "type": "tidelift" } ], - "time": "2021-05-27T12:56:16+00:00" + "time": "2021-06-24T08:13:00+00:00" }, { "name": "symfony/mime", diff --git a/src/Controller/QuackController.php b/src/Controller/QuackController.php index c81566b..adf840f 100644 --- a/src/Controller/QuackController.php +++ b/src/Controller/QuackController.php @@ -106,7 +106,7 @@ public function toggleLike(EntityManagerInterface $entityManager, Request $reque return $this->redirectToRoute('quacks'); } - $duck = $entityManager->getRepository(Duck::class)->findOneBy(['id' => $this->getUser()->getId()]); + $duck = $this->getUser(); if (in_array($quack, [...$duck->getLikes()])) { $duck->removeLike($quack); } else { @@ -176,7 +176,7 @@ public function create(EntityManagerInterface $entityManager, ValidatorInterface } $quack = new Quack(); - $duck = $entityManager->getRepository(Duck::class)->findOneBy(['id' => $this->getUser()->getId()]); + $duck = $this->getUser(); $quack = $this->updateQuackFields($validator, $urlHelper, $quack, $request->get('content'), $duck); $newFileName = $this->handleFileUpload($request, $slugger); $tags = $this->handleTags($request->get('tags')); diff --git a/src/Controller/SecurityController.php b/src/Controller/SecurityController.php index 63d980f..00bccd1 100644 --- a/src/Controller/SecurityController.php +++ b/src/Controller/SecurityController.php @@ -3,8 +3,11 @@ namespace App\Controller; use App\Entity\Duck; +use App\Entity\ApiToken; +use Symfony\Component\Mime\Email; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\Mailer\MailerInterface; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use KnpU\OAuth2ClientBundle\Client\ClientRegistry; @@ -51,8 +54,7 @@ public function profile(EntityManagerInterface $entityManager, ValidatorInterfac $this->denyAccessUnlessGranted('ROLE_USER'); if ($request->getMethod() === 'POST') { - $user = $this->getUser(); - $duck = $entityManager->getRepository(Duck::class)->findOneBy(['id' => $user->getId()]); + $duck = $this->getUser(); $duck->setFirstname(!empty($request->get('first_name')) ? $request->get('first_name') : $duck->getFirstname()); $duck->setLastName(!empty($request->get('last_name')) ? $request->get('last_name') : $duck->getLastName()); $duck->setDuckName(!empty($request->get('duck_name')) ? $request->get('duck_name') : $duck->getDuckName()); @@ -125,4 +127,25 @@ public function logout() { return $this->redirectToRoute('quacks'); } + + #[Route('/send_token', name: 'send_token')] + public function sendToken(EntityManagerInterface $entityManager, MailerInterface $mailer): Response + { + $user = $this->getUser(); + foreach ($user->getApiTokens() as $token) { + if ($token->isExpired()) { + $entityManager->remove($token); + } + } + + $token = new ApiToken($user); + $email = (new Email()) + ->from('postmaster@ducktales.com') + ->to('badawiraphael@posteo.net') + ->subject('Your Duck Tales API token!') + ->html('

Your new API token is ' . $token->getToken() . '

'); + + $mailer->send($email); + return $this->redirectToRoute('quacks'); + } } diff --git a/src/Entity/Duck.php b/src/Entity/Duck.php index 26fd5c9..d1df5bd 100644 --- a/src/Entity/Duck.php +++ b/src/Entity/Duck.php @@ -84,7 +84,7 @@ class Duck implements UserInterface, PasswordAuthenticatedUserInterface private $likes; /** - * @ORM\OneToMany(targetEntity=ApiToken::class, mappedBy="duck", orphanRemoval=true) + * @ORM\OneToMany(targetEntity=ApiToken::class, mappedBy="duck", orphanRemoval=true, cascade={"persist"}) */ private $apiTokens; diff --git a/templates/security/profile.html.twig b/templates/security/profile.html.twig index 99ed679..80fd693 100644 --- a/templates/security/profile.html.twig +++ b/templates/security/profile.html.twig @@ -74,5 +74,26 @@ " type="submit"> Change my Pedigree + + Generate a new API token + {% endblock %} \ No newline at end of file