Advertisement
Guest User

Untitled

a guest
Jun 1st, 2016
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.42 KB | None | 0 0
  1. require_once __DIR__ . '/../vendor/autoload.php';
  2.  
  3. use SymfonyComponentHttpFoundationRequest;
  4. use SymfonyComponentHttpFoundationResponse;
  5.  
  6. $app = new SilexApplication();
  7.  
  8. $app->after(function (Request $request, Response $response) {
  9. $response->headers->set('Access-Control-Allow-Origin', '*');
  10. });
  11.  
  12. require_once __DIR__ . '/../app/routes.php';
  13. require_once __DIR__ . '/../app/providers.php';
  14.  
  15. $app['debug'] = true;
  16. $app->run();
  17.  
  18. /** @var $app SilexApplication */
  19. $app->get('/', 'App\Controller\BaseController::index');
  20. $app->get('/login', 'App\Controller\AuthController::login');
  21.  
  22. $app->mount('/cabinet', new AppProviderRater());
  23. $app->mount('/api', new AppProviderAPI());
  24. $app->mount('/auth', new AppProviderLoginControllerProvider());
  25.  
  26. $app->error(
  27. function (Exception $e, $code) use ($app) {
  28. $jsonResponse = false;
  29.  
  30. switch ($code) {
  31. case 404:
  32. $message = '1 Запрашиваемая вами страница не найдена.';
  33.  
  34. break;
  35. case 500:
  36. $message = $e->getMessage();
  37. $jsonResponse = 429 === $e->getCode();
  38.  
  39. break;
  40. default:
  41. $message = '2 Невозможно обработать запрос.';
  42. }
  43.  
  44. return $jsonResponse
  45. ? $app->json(['message' => $message], $e->getCode())
  46. : $app['twig']->render('error-page.html.twig', ['message' =>$message]);
  47. });
  48.  
  49. /** @var $app SilexApplication */
  50. require_once __DIR__ . '/config/config.php';
  51.  
  52. $app->register(new SilexProviderTwigServiceProvider(), $configTwig);
  53. $app->register(new SilexProviderUrlGeneratorServiceProvider());
  54. $app->register(new SilexProviderSessionServiceProvider());
  55. $app->register(new SilexProviderSecurityServiceProvider(), $configSecurity);
  56. $app->register(new SilexProviderDoctrineServiceProvider(), $configDatabase);
  57. $app->register(new SilexProviderServiceControllerServiceProvider(), $configServiceControllerService);
  58. $app->register(new SilexProviderSwiftmailerServiceProvider(), $configSwiftmailer);
  59. $app->register(new AppServicesLoginServiceProvider());
  60.  
  61. $app['auth.validate.credentials'] = $app->protect(function ($user, $pass) {
  62. return new AppServicesLoginServiceProvider;//->validateCredentials($user,$pass);
  63. });
  64.  
  65. $app['auth.validate.token'] = $app->protect(function ($token) {
  66. return new AppServicesLoginServiceProvider;//->validateToken($token);
  67. });
  68.  
  69. $app['auth.new.token'] = $app->protect(function ($user) {
  70. return new AppServicesLoginServiceProvider;//->getNewTokenForUser($user);
  71. });
  72.  
  73. namespace AppProvider;
  74.  
  75. use SilexApplication;
  76. use SilexControllerProviderInterface;
  77. use SymfonyComponentHttpFoundationRequest;
  78. use SymfonyComponentHttpKernelExceptionAccessDeniedHttpException;
  79.  
  80. class LoginControllerProvider implements ControllerProviderInterface
  81. {
  82. const VALIDATE_CREDENTIALS = '/validateCredentials';
  83. const TOKEN_HEADER_KEY = 'X-Token';
  84. const TOKEN_REQUEST_KEY = '_token';
  85. private $baseRoute;
  86.  
  87. public function setBaseRoute($baseRoute) {
  88. $this->baseRoute = $baseRoute;
  89.  
  90. return $this;
  91. }
  92.  
  93. public function connect(Application $app) {
  94. $this->setUpMiddlewares($app);
  95.  
  96. return $this->extractControllers($app);
  97. }
  98.  
  99. private function setUpMiddlewares(Application $app) {
  100. $app->before(function (Request $request) use ($app) {
  101. if (!$this->isAuthRequiredForPath($request->getPathInfo())) {
  102. if (!$this->isValidTokenForApplication($app, $this->getTokenFromRequest($request))) {
  103. throw new AccessDeniedHttpException('Access Denied');
  104. }
  105. }
  106. }
  107. );
  108. }
  109.  
  110. private function isAuthRequiredForPath($path) {
  111. return in_array($path, [$this->baseRoute . self::VALIDATE_CREDENTIALS]);
  112. }
  113.  
  114. private function isValidTokenForApplication(Application $app, $token) {
  115. return $app['auth.validate.credentials']($token);
  116. }
  117.  
  118. private function getTokenFromRequest(Request $request) {
  119. return $request->headers->get(self::TOKEN_HEADER_KEY, $request->get(self::TOKEN_REQUEST_KEY));
  120. }
  121.  
  122. private function extractControllers(Application $app) {
  123. $controllers = $app['controllers_factory'];
  124. $controllers->get(self::VALIDATE_CREDENTIALS, function (Request $request) use ($app) {
  125. $user = $request->get('user');
  126. $pass = $request->get('pass');
  127. $status = $app['auth.validate.token']($user, $pass);
  128.  
  129. return $app->json([
  130. 'status' => $status,
  131. 'info' => $status ? ['token' => $app['auth.new.token']($user)] : []
  132. ]
  133. );
  134. }
  135. );
  136.  
  137. return $controllers;
  138. }
  139. }
  140.  
  141. namespace AppServices;
  142.  
  143. use SilexApplication;
  144. use SilexServiceProviderInterface;
  145.  
  146. class LoginServiceProvider implements ServiceProviderInterface
  147. {
  148.  
  149. public function register(Application $app) {
  150. $app['auth.validate.credentials'] = $app->protect(function ($user, $pass) {
  151. return $this->validateCredentials($user, $pass);
  152. });
  153.  
  154. $app['auth.validate.token'] = $app->protect(function ($token) {
  155. return $this->validateToken($token);
  156. });
  157.  
  158. $app['auth.new.token'] = $app->protect(function ($user) {
  159. return $this->getNewTokenForUser($user);
  160. });
  161.  
  162. }
  163.  
  164. public function validateCredentials($user, $pass) {
  165. return $user == $pass;
  166. }
  167.  
  168. public function validateToken($token) {
  169. return $token == 'a';
  170. }
  171.  
  172. public function getNewTokenForUser($user) {
  173. return 'a';
  174. }
  175.  
  176. public function boot(Application $app) {
  177. }
  178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement