UserController.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Competence;
  4. use App\Invite;
  5. use App\User;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\Hash;
  8. use PhpParser\Node\Expr\Cast\Object_;
  9. use Validator;
  10. use Illuminate\Support\Str;
  11. use Illuminate\Support\Facades\Storage;
  12. use PDF;
  13. class UserController extends Controller
  14. {
  15. private $inviteCode = NULL;
  16. public function test()
  17. {
  18. return view('certificate');
  19. }
  20. public function down()
  21. {
  22. //return view('certificate');
  23. $pdf = PDF::loadView('diploma');
  24. return $pdf->download('test.pdf');
  25. }
  26. /**
  27. * Метод для авторизации по логину и паролю
  28. * @param Request $request
  29. * @return \Illuminate\Http\JsonResponse
  30. */
  31. public function auth(Request $request)
  32. {
  33. /*
  34. * Валидация полей
  35. */
  36. $validator = Validator::make(
  37. $request->all(),
  38. [
  39. "username" => ['required'],
  40. "password" => ['required', 'min:5']
  41. ]
  42. );
  43. /*
  44. * Проверяем результаты валидации
  45. */
  46. if ($validator->fails())
  47. return response()->json(["status" => false, "errors" => $validator->messages()])->setStatusCode(400, "Error fields");
  48. /*
  49. * Ищем пользователя по логину
  50. */
  51. $userCheck = User::where('username', $request->username)->first();
  52. /*
  53. * Если пользователь найден сравниваем пароли
  54. */
  55. if ($userCheck) {
  56. if (Hash::check($request->password, $userCheck->password)) {
  57. $token = Str::random(300);
  58. $userCheck->token = $token;
  59. $userCheck->save();
  60. return response()->json(["status" => true, "token" => $token]);
  61. } else {
  62. return response()->json(["status" => false, "message" => "Wrong password"], 401);
  63. }
  64. } else {
  65. return response()->json(["status" => false, "message" => "User not found"], 401);
  66. }
  67. }
  68. /**
  69. * Проверка наличия авторизации по токену
  70. * @param Request $request
  71. * @return \Illuminate\Http\JsonResponse
  72. */
  73. public function check(Request $request)
  74. {
  75. /*
  76. * Получаем токен
  77. */
  78. $token = $request->bearerToken();
  79. /*
  80. * Ищем пользователя
  81. */
  82. $userCheck = User::where('token', $token)->first();
  83. /*
  84. * Проверяем наличие пользователя
  85. */
  86. if ($userCheck) {
  87. return response()->json([
  88. "id" => $userCheck->id,
  89. "name" => $userCheck->name
  90. ]);
  91. } else {
  92. return response()->json([
  93. "status" => false,
  94. "message" => "User not found"
  95. ])->setStatusCode(401);
  96. }
  97. }
  98. /**
  99. * Регистрация пользователя по инвайтам
  100. * @param Request $request
  101. * @return \Illuminate\Http\JsonResponse
  102. */
  103. public function register(Request $request)
  104. {
  105. /*
  106. * Переносим инвайт в $this->inviteCode из заголовка "Invite-code"
  107. */
  108. $this->inviteCode = $request->header('Invite-code');
  109. /*
  110. * Проверяем наличие валидного инвайта в базе данных
  111. */
  112. if ($this->invite() === false)
  113. return response()->json(["status" => false, "message" => "Invalid invite"])->setStatusCode(400, "Invalid invite");
  114. /*
  115. * Валидация полей
  116. */
  117. $validator = Validator::make(
  118. $request->all(),
  119. [
  120. "name" => ['required'],
  121. "username" => ['required', 'unique:users'],
  122. "password" => ['required', 'confirmed', 'min:5'],
  123. "password_confirmation" => ['required', 'min:5'],
  124. "сompetence" => ['required', 'numeric'],
  125. "position" => ['required', 'numeric']
  126. ]
  127. );
  128. /*
  129. * Проверяем результаты валидации
  130. */
  131. if ($validator->fails())
  132. return response()->json(["status" => false, "errors" => $validator->messages()])->setStatusCode(400, "Error fields");
  133. /*
  134. * Добавлем пользователя в базу данных
  135. */
  136. $user = new User();
  137. $user->fill([
  138. "name" => $request->name,
  139. "username" => $request->username,
  140. "password" => Hash::make($request->password),
  141. "сompetence" => $request->сompetence,
  142. "position" => $request->position
  143. ]);
  144. $user->save();
  145. /*
  146. * Успешный ответ
  147. */
  148. return response()->json(["status" => true]);
  149. }
  150. /**
  151. * Получение данных о пользователе по токену
  152. * @param Request $request
  153. * @return \Illuminate\Http\JsonResponse
  154. */
  155. public function getUser(Request $request)
  156. {
  157. /*
  158. * Получаем токен
  159. */
  160. $token = $request->bearerToken();
  161. /*
  162. * Ищем пользователя
  163. */
  164. $user = User::where('token', $token)->first();
  165. /*
  166. * Проверяем наличие пользователя и выводим
  167. */
  168. if ($user) {
  169. return response()->json([
  170. "id" => $user->id,
  171. "name" => $user->name,
  172. "username" => $user->username,
  173. "сompetence_number" => $user->сompetence,
  174. "сompetence_title" => Competence::where('number', $user->сompetence)->first()->title,
  175. "position" => $user->position
  176. ], 200);
  177. }
  178. /*
  179. * Ответ при безуспешном поиске пользователя
  180. */
  181. return response()->json([
  182. "status" => false,
  183. "message" => "User not found"
  184. ], 404);
  185. }
  186. public static function getUserByToken($token) {
  187. /*
  188. * Ищем пользователя
  189. */
  190. $user = User::where('token', $token)->first();
  191. /*
  192. * Проверяем наличие пользователя и выводим
  193. */
  194. $user = [
  195. "id" => $user->id,
  196. "name" => $user->name,
  197. "username" => $user->username,
  198. "сompetence_number" => $user->сompetence,
  199. "сompetence_title" => Competence::where('number', $user->сompetence)->first()->title,
  200. "position" => $user->position
  201. ];
  202. return (object)$user;
  203. }
  204. /**
  205. * Проварка инвайт-кода на валидность
  206. * @return bool
  207. */
  208. private function invite()
  209. {
  210. $invite = Invite::where('code', $this->inviteCode)->first();
  211. return $invite ? true : false;
  212. }
  213. }