public function loginAction(Request $request)
{
$zendRouter = $this->container->get('zend_router');
$userService = $this->container->get('user');
$em = $this->container->get('em');
$username = $request->get('username');
$password = $request->get('password');
$targetPath = $request->get('_target_path');
$response = new Response();
if (!$username || !$password) {
$response->setStatusCode(400);
return $response;
}
$passwordEncoder = $this->container->get('newscoop_newscoop.password_encoder');
$user = $em->getRepository('Newscoop\\Entity\\User')->findOneBy(array('username' => $username));
if (!$user) {
$user = $user = $em->getRepository('Newscoop\\Entity\\User')->findOneBy(array('email' => $username));
}
if (!$user instanceof \Newscoop\Entity\User) {
throw new NotFoundHttpException("User not found");
}
if (!$passwordEncoder->isPasswordValid($user->getPassword(), $password, $user->getSalt())) {
$response->setStatusCode(403);
return $response;
}
$token = $userService->loginUser($user, 'frontend_area');
$session = $request->getSession();
$session->set('_security_frontend_area', serialize($token));
$loginSuccessHandler = $this->container->get('newscoop_newscoop.security.authentication.frontend.success_handler');
$loginSuccessHandler->onAuthenticationSuccess($request, $token);
$response->setStatusCode($targetPath ? 302 : 200);
$response->headers->set('X-Location', $targetPath ? $request->getUriForPath($targetPath) : $this->generateUrl('newscoop_gimme_users_getuser', array('id' => $user->getId()), true));
return $response;
}