WebApi.php 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. namespace App\Http\Middleware;
  3. use App\Models\Node;
  4. use App\Models\NodeAuth;
  5. use Closure;
  6. use Illuminate\Http\JsonResponse;
  7. use Response;
  8. class WebApi {
  9. /**
  10. * Handle an incoming request.
  11. *
  12. * @param $request
  13. * @param Closure $next
  14. *
  15. * @return mixed
  16. */
  17. public function handle($request, Closure $next) {
  18. $id = $request->id;
  19. $key = $request->header('key');
  20. $time = $request->header('timestamp');
  21. if(!isset($key)){// 未提供 key
  22. return $this->returnData('Your key is null!');
  23. }
  24. if(!isset($id)){// 未提供 node
  25. return $this->returnData('Your Node Id is null!');
  26. }
  27. $node = Node::find($id);
  28. if(!$node){// node不存在
  29. return $this->returnData('Unknown Node!');
  30. }
  31. $nodeAuth = NodeAuth::query()->whereNodeId($id)->first();
  32. if(!$nodeAuth || $key != $nodeAuth->key){// key不存在/不匹配
  33. return $this->returnData('Token is invalid!');
  34. }
  35. if(abs($time - time()) >= 300){// 时差超过5分钟
  36. return $this->returnData('Please resynchronize the server time!');
  37. }
  38. return $next($request);
  39. }
  40. // 返回数据
  41. public function returnData($message): JsonResponse {
  42. return Response::json(['status' => 'fail', 'code' => 404, 'message' => $message]);
  43. }
  44. }