/**
  * @Route("/login", name="api_login")
  * @Method("POST")
  * @param Request $request
  * @return JsonResponse
  */
 public function loginAction(Request $request)
 {
     $userDTO = new ApiUserLogin();
     $form = $this->createForm(new LoginApiType(), $userDTO);
     $this->handleJsonForm($form, $request);
     $redmineClient = $this->get('redmine.guzzle_client');
     try {
         $redmineResponse = $redmineClient->redmineLogin($userDTO->getUsername(), $userDTO->getPassword());
         $q = json_decode($redmineResponse);
         /** @var EntityManager $em */
         $em = $this->getDoctrine()->getManager();
         $user = $em->getRepository("RedmineAppBundle:RedmineUser")->findOneBy(['redmineToken' => $q->user->api_key, 'redmineUserID' => $q->user->id]);
         if (!$user) {
             $passwordEncoder = $this->get('security.password_encoder');
             $user = new RedmineUser();
             $user->setUsername($q->user->login)->setEmail($q->user->mail)->setPassword($passwordEncoder->encodePassword($user, md5(uniqid())))->setName($q->user->firstname)->setSurname($q->user->lastname)->setRedmineUserID($q->user->id)->setRedmineToken($q->user->api_key);
             $settings = new Settings();
             $settings->setSms(false)->setPush(false)->setCheckFirst(Carbon::createFromTime(17, 45))->setCheckSecond(Carbon::createFromTime(20, 0))->setCheckThird(Carbon::createFromTime(9, 30))->setUser($user);
             $em->persist($user);
             $em->persist($settings);
             $em->flush();
         }
     } catch (\Exception $e) {
         return new JsonResponse(['message' => 'Redmine user: bad credentials'], 403);
     }
     $this->get('redmine.device.notification')->getDevice($user, $userDTO->getDeviceId(), $userDTO->getPushToken(), $userDTO->getPushPlatform());
     return new JsonResponse($user);
 }
 public function authUserFromRedmine(UsernamePasswordToken $token)
 {
     $pass = $token->getCredentials();
     $username = $token->getUser();
     try {
         $response = $this->client->redmineLogin($username, $pass);
         $q = json_decode($response);
         $em = $this->em;
         $user = $em->getRepository("RedmineAppBundle:RedmineUser")->findOneBy(['redmineToken' => $q->user->api_key, 'redmineUserID' => $q->user->id]);
         if ($user) {
             return $user->getUsername();
         } else {
             $user = new RedmineUser();
             $user->setUsername($q->user->login)->setEmail($q->user->mail)->setPassword($this->encoder->encodePassword($user, md5(uniqid())))->setName($q->user->firstname)->setSurname($q->user->lastname)->setRedmineUserID($q->user->id)->setRedmineToken($q->user->api_key);
             $settings = new Settings();
             $settings->setSms(false)->setPush(false)->setCheckFirst(Carbon::createFromTime(17, 45))->setCheckSecond(Carbon::createFromTime(20, 0))->setCheckThird(Carbon::createFromTime(9, 30))->setUser($user);
             $this->em->persist($user);
             $this->em->persist($settings);
             $this->em->flush();
             return $user->getUsername();
         }
     } catch (\Exception $e) {
         return null;
     }
 }