/** * @param Request $request * @param array $parameters * * @return JsonResponse */ public function updateAction(Request $request, $parameters) { /** @var UserRepository $repository */ $repository = $this->app['app.repository.user']; $user = new User($parameters['name'], $request->get('post', 'roles', [])); $repository->updateUser($user, $request->get('post', 'password')); return $this->app['api.response.negociator']->negociate($request, ['name' => $user->getName(), 'roles' => $user->getRoles(), 'links' => ['rel' => 'self', 'href' => sprintf('/api/users/%s', $user->getName())]]); }
/** * @param Request $request * @param array $data * @param int $status * * @return Response */ public function negociate(Request $request, array $data = [], $status = Response::HTTP_OK) { $acceptHeader = $request->getHeader('Accept') ? $request->getHeader('Accept') : 'application/json'; $priorities = ['application/json', 'text/html; charset=UTF-8']; $mediaType = $this->negotiator->getBest($acceptHeader, $priorities); $value = $mediaType->getValue(); if ($value == 'text/html; charset=UTF-8') { return new Response(print_r($data, true), $status); } return new JsonResponse($data, $status); }
/** * @param Request|null $request * * @return \App\Model\User|false */ public function getUser(Request $request = null) { if (!$request) { return; } $token = base64_decode($request->getHeader('Authorization')); if (!$token) { return; } if (!strpos($token, ':')) { return; } list($name, $password) = explode(':', $token); return $this->repository->findByNameAndPassword($name, $password); }
/** * @param Request $request * * @return Response */ public function indexAction(Request $request) { /* @var Session */ $session = $this->app['app.session']; $user = $session->getUser(); if ($user) { return new RedirectResponse('/'); } if ($request->getMethod() == 'POST') { /* @var UserRepository */ $repository = $this->app['app.repository.user']; $user = $repository->findByNameAndPassword($request->get('post', 'name', false), $request->get('post', 'password', false)); if (!$user) { return $this->render('Login\\index.html.twig', ['error' => 'Name or password invalid']); } $session->setUser($user); if ($session->has('app.redirect_on_login')) { return new RedirectResponse($session->get('app.redirect_on_login')); } return new RedirectResponse('/'); } return $this->render('Login\\index.html.twig', []); }
/** * @param Request $request * * @return Response */ public function handle(Request $request) { $this['app.request'] = $request; if ($this->isRequestApi($request->getUri())) { $isGranted = $this['api.firewall']->isGranted($request->getMethod(), $request->getUri(), $this['api.user']); if (!$isGranted) { return new JsonResponse(['code' => Response::HTTP_UNAUTHORIZED, 'message' => 'Unauthorized'], Response::HTTP_UNAUTHORIZED); } } else { $isGranted = $this['app.firewall']->isGranted($request->getMethod(), $request->getUri(), $this['app.user']); if (!$isGranted) { if ($this['app.user']) { return new Response($this['twig']->render('Error\\index.html.twig', ['code' => Response::HTTP_UNAUTHORIZED, 'message' => 'Unauthorized']), Response::HTTP_UNAUTHORIZED); } $this['app.session']->set('app.redirect_on_login', $request->getUri()); return new RedirectResponse('/login'); } } try { $routeInfo = $this['app.router']->dispatch($request->getMethod(), $request->getUri()); switch ($routeInfo[0]) { case \FastRoute\Dispatcher::NOT_FOUND: return new Response($this['twig']->render('Error\\index.html.twig', ['code' => 404, 'message' => 'Not Found']), Response::HTTP_NOT_FOUND, ['Content-Type' => 'text/html; charset=UTF-8']); case \FastRoute\Dispatcher::METHOD_NOT_ALLOWED: return new Response($this['twig']->render('Error\\index.html.twig', ['code' => 405, 'message' => 'Not Allowed']), Response::HTTP_METHOD_NOT_ALLOWED, ['Content-Type' => 'text/html; charset=UTF-8']); case \FastRoute\Dispatcher::FOUND: default: $handler = $routeInfo[1]; $controller = 'app.controller.' . $handler[0]; $method = $handler[1] . 'Action'; $this['twig']->addGlobal('app_user', $this['app.user']); return $this[$controller]->{$method}($request, $routeInfo[2]); } } catch (\Exception $e) { $message = $this['debug'] ? $e->getMessage() : 'Internal Server Error'; return new Response($this['twig']->render('Error\\index.html.twig', ['code' => 500, 'message' => $message]), Response::HTTP_INTERNAL_SERVER_ERROR); } }
<?php /* * This file is part of the scribd.technical.test package. * * (c) Daniel González <*****@*****.**> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ require __DIR__ . '/../vendor/autoload.php'; use Component\Http\Request; use App\Application; $request = Request::createFromGlobals(); $app = new Application(); $app['debug'] = true; $response = $app->handle($request); $response->send();
/** * @dataProvider dataProviderForTestParameters * * @param array $parameters * @param string $key * @param string $value */ public function testCookieParameters($parameters, $key, $value) { $request = new Request('', [], [], [], $parameters); $this->assertEquals($value, $request->get('cookie', $key)); }