示例#1
0
 /**
  * @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())]]);
 }
示例#2
0
 /**
  * @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);
 }
示例#4
0
 /**
  * @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', []);
 }
示例#5
0
 /**
  * @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);
     }
 }
示例#6
0
<?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();
示例#7
0
 /**
  * @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));
 }