public function updateUser(AuthenticationSuccessEvent $event, UserInterface $user)
 {
     // Update user last login
     $user->setLastLogin(new \DateTime());
     if ($user->getIp() !== $event->getRequest()->getClientIp()) {
         $user->setIp($event->getRequest()->getClientIp());
     }
     $this->em->persist($user);
     $this->em->flush();
     // Register a new login hit
     $userAgent = $event->getRequest()->headers->get('user-agent');
     if ($this->em instanceof DocumentManager) {
         $newHit = new OdmLoginAnalytics($user, $userAgent);
     } else {
         $newHit = new OrmLoginAnalytics($user, $userAgent);
     }
     $this->em->persist($newHit);
     $this->em->flush();
 }
 public function attachRefreshToken(AuthenticationSuccessEvent $event)
 {
     $data = $event->getData();
     $user = $event->getUser();
     $request = $event->getRequest();
     if (!$user instanceof UserInterface) {
         return;
     }
     $refreshTokenString = null;
     if ($request->headers->get('content_type') == 'application/json') {
         $content = $request->getContent();
         $params = !empty($content) ? json_decode($content, true) : array();
         $refreshTokenString = trim($params['refresh_token']);
     } else {
         $refreshTokenString = $request->request->get('refresh_token');
     }
     if ($refreshTokenString) {
         $data['refresh_token'] = $refreshTokenString;
     } else {
         $datetime = new \DateTime();
         $datetime->modify('+' . $this->ttl . ' seconds');
         $refreshToken = $this->refreshTokenManager->create();
         $refreshToken->setUsername($user->getUsername());
         $refreshToken->setRefreshToken();
         $refreshToken->setValid($datetime);
         $valid = false;
         while (false === $valid) {
             $valid = true;
             $errors = $this->validator->validate($refreshToken);
             if ($errors->count() > 0) {
                 foreach ($errors as $error) {
                     if ('refreshToken' === $error->getPropertyPath()) {
                         $valid = false;
                         $refreshToken->setRefreshToken();
                     }
                 }
             }
         }
         $this->refreshTokenManager->save($refreshToken);
         $data['refresh_token'] = $refreshToken->getRefreshToken();
     }
     $event->setData($data);
 }
 public function attachRefreshToken(AuthenticationSuccessEvent $event)
 {
     $data = $event->getData();
     $user = $event->getUser();
     $request = $event->getRequest();
     if (!$user instanceof UserInterface) {
         return;
     }
     $refreshTokenString = RequestRefreshToken::getRefreshToken($request);
     if ($refreshTokenString) {
         $data['refresh_token'] = $refreshTokenString;
     } else {
         $datetime = new \DateTime();
         $datetime->modify('+' . $this->ttl . ' seconds');
         $refreshToken = $this->refreshTokenManager->create();
         $refreshToken->setUsername($user->getUsername());
         $refreshToken->setRefreshToken();
         $refreshToken->setValid($datetime);
         $valid = false;
         while (false === $valid) {
             $valid = true;
             $errors = $this->validator->validate($refreshToken);
             if ($errors->count() > 0) {
                 foreach ($errors as $error) {
                     if ('refreshToken' === $error->getPropertyPath()) {
                         $valid = false;
                         $refreshToken->setRefreshToken();
                     }
                 }
             }
         }
         $this->refreshTokenManager->save($refreshToken);
         $data['refresh_token'] = $refreshToken->getRefreshToken();
     }
     $event->setData($data);
 }
 public function it_is_not_valid_user(AuthenticationSuccessEvent $event)
 {
     $event->getData()->willReturn(array());
     $event->getUser()->willReturn(null);
     $event->getRequest()->willReturn(null);
     $this->attachRefreshToken($event);
 }