PageRenderTime 25ms CodeModel.GetById 28ms RepoModel.GetById 0ms app.codeStats 0ms

/app/app.php

https://gitlab.com/YakovLachin/MiMaL
PHP | 182 lines | 102 code | 28 blank | 52 comment | 7 complexity | c9dd8733270ebd680d963d8df828aed0 MD5 | raw file
  1. <?php
  2. require_once __DIR__ . '/../vendor/autoload.php';
  3. use MiMaL\Core\Cause\CauseSilexProvider;
  4. use MiMaL\Core\Effect\EffectSilexProvider;
  5. use MiMaL\Core\User\UserSilexProvider;
  6. use MiMaL\Services\Security;
  7. use MiMaL\Services\Site;
  8. use MiMaL\Validation\Validators\BaseSymfonyValidator;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use MiMaL\Kernel;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\HttpFoundation\Cookie;
  13. $app = new Silex\Application();
  14. $app ['debug'] = true;
  15. $app->register(new Kernel());
  16. $app->before(function(Request $request) use ($app) {
  17. $uri = $request->getUri();
  18. $host = $request->getHost();
  19. $allowedUri = array (
  20. "signup" => "http://" . $host . "/api/signup",
  21. "signin" => "http://" . $host . "/api/signin"
  22. );
  23. if (in_array($uri, $allowedUri)) {
  24. return;
  25. }
  26. if ($request->cookies->get('Mimal-Access-Token')) {
  27. /**
  28. * @var \MiMaL\Services\Security $serviceSecurity
  29. */
  30. $serviceSecurity = $app->offsetGet("serviceSecurity");
  31. $accessToken = $request->cookies->get('Mimal-Access-Token');
  32. if (!$serviceSecurity->auntificateByToken($accessToken)) {
  33. throw new \MiMaL\Errors\AccessDenied;
  34. }
  35. return;
  36. }
  37. throw new \MiMaL\Errors\AccessDenied;
  38. });
  39. $app->after(function (Request $request, Response $response) use ($app) {
  40. /**
  41. * @var Site $siteService
  42. */
  43. $siteService = $app->offsetGet(Kernel::KERNEL_SITE);
  44. $expire = new \DateTime();
  45. $expire->modify("+1 week");
  46. $token = $siteService->getUserToken();
  47. if (!empty($token)) {
  48. $cookie = new Cookie("Mimal-Access-Token", $token , $expire, '');
  49. $response->headers->setCookie($cookie);
  50. }
  51. });
  52. //$app->error(function (\Exception $e, Request $request, $code) {
  53. // switch ($code) {
  54. // case 403:
  55. // $message = 'Acess Denied.';
  56. // break;
  57. // case 404:
  58. // $message = 'The requested page could not be found.';
  59. // break;
  60. // case 500:
  61. // $message = 'The Internal Error';
  62. // break;
  63. // default:
  64. // $message = 'We are sorry, but something went terribly wrong.';
  65. // }
  66. //
  67. // return new Response($message);
  68. //});
  69. /**
  70. * Авторизация пользователя.
  71. * url: "/signin"
  72. */
  73. $app->post('/api/signin', function (Request $request) use ($app) {
  74. $data = json_decode($request->getContent(), true);
  75. /**
  76. * @var MiMaL\Validation\Validators\BaseSymfonyValidator $validator
  77. */
  78. $validator = $app->offsetGet('validator.user');
  79. if (!$validator->isValid($data)) {
  80. throw new \MiMaL\Errors\Users\AuthorizeError($validator->getMessage());
  81. }
  82. /**
  83. * @var BaseSymfonyValidator $validator
  84. */
  85. $validator = $app->offsetGet('validator.user');
  86. if (!$validator->isValid($data)) {
  87. throw new Exception("invalid params");
  88. }
  89. /**
  90. * @var Security $serviceSecurity
  91. */
  92. $serviceSecurity = $app->offsetGet("serviceSecurity");
  93. try {
  94. $serviceSecurity->authorize($data["email"], $data["password"]);
  95. /**
  96. * @var Site $serviceSite
  97. */
  98. $serviceSite = $app->offsetGet("serviceSite");
  99. $user = $serviceSite->getUser();
  100. $token = $serviceSite->getUserToken();
  101. $response = array(
  102. "data" => $user->toArray(),
  103. "meta" => array(
  104. "token" => $token,
  105. ),
  106. );
  107. return json_encode($response);
  108. } catch (Exception $e) {
  109. return $e->getMessage();
  110. }
  111. }
  112. );
  113. /**
  114. * Регистрация
  115. * url: "/signup"
  116. */
  117. $app->post(
  118. '/api/signup', function (Request $request) use ($app) {
  119. $data = json_decode($request->getContent(), true);
  120. /**
  121. * @var MiMaL\Validation\Validators\BaseSymfonyValidator $validator
  122. */
  123. $validator = $app->offsetGet('validator.user');
  124. if (!$validator->isValid($data)) {
  125. throw new \MiMaL\Errors\Users\AuthorizeError($validator->getMessage());
  126. }
  127. /**
  128. * @var Security $security
  129. */
  130. $security = $app->offsetGet("serviceSecurity");
  131. try {
  132. $security->registrate($data["email"], $data['password']);
  133. /**
  134. * @var Site $serviceSite
  135. */
  136. $serviceSite = $app->offsetGet("serviceSite");
  137. $user = $serviceSite->getUser();
  138. $token = $serviceSite->getUserToken();
  139. $response = array(
  140. "data" => $user->toArray(),
  141. "meta" => array(
  142. "token" => $token,
  143. ),
  144. );
  145. return json_encode($response);
  146. } catch (Exception $e) {
  147. return $e->getMessage();
  148. }
  149. }
  150. );
  151. $app->mount("/api/cause", new CauseSilexProvider());
  152. $app->mount("/api/effect", new EffectSilexProvider());
  153. $app->mount("/api/user", new UserSilexProvider());
  154. return $app;