* * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ namespace Chill\MainBundle\Security\PasswordRecover; use Chill\MainBundle\Security\PasswordRecover\TokenManager; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Chill\MainBundle\Notification\Mailer; use Chill\MainBundle\Entity\User; /** * * * @author Julien Fastré */ class RecoverPasswordHelper { /** * * @var TokenManager */ protected $tokenManager; /** * * @var UrlGeneratorInterface */ protected $urlGenerator; /** * * @var Mailer */ protected $mailer; const RECOVER_PASSWORD_ROUTE = 'password_recover'; public function __construct( TokenManager $tokenManager, UrlGeneratorInterface $urlGenerator, Mailer $mailer ) { $this->tokenManager = $tokenManager; $this->urlGenerator = $urlGenerator; $this->mailer = $mailer; } public function generateUrl(User $user, \DateTimeInterface $expiration, $absolute = true) { return $this->urlGenerator->generate( self::RECOVER_PASSWORD_ROUTE, $this->tokenManager->generate($user, $expiration), $absolute ? UrlGeneratorInterface::ABSOLUTE_URL : UrlGeneratorInterface::ABSOLUTE_PATH ); } public function sendRecoverEmail( User $user, \DateTimeInterface $expiration, $template = '@ChillMain/Password/recover_email.txt.twig', array $templateParameters = [], $force = false ) { $content = $this->mailer->renderContentToUser( $user, $template, \array_merge([ 'user' => $user, 'url' => $this->generateUrl($user, $expiration, true) ], $templateParameters )); $this->mailer->sendNotification( $user, [ 'Recover your password' ], [ 'text/plain' => $content, ], null, $force); } }