/** * @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; } }