delUser.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. namespace App\Jobs\VNet;
  3. use Arr;
  4. use Http;
  5. use Illuminate\Bus\Queueable;
  6. use Illuminate\Contracts\Queue\ShouldQueue;
  7. use Illuminate\Foundation\Bus\Dispatchable;
  8. use Illuminate\Queue\InteractsWithQueue;
  9. use Illuminate\Queue\SerializesModels;
  10. use Log;
  11. use Throwable;
  12. class delUser implements ShouldQueue
  13. {
  14. use Dispatchable;
  15. use InteractsWithQueue;
  16. use Queueable;
  17. use SerializesModels;
  18. private $userIds;
  19. private $nodes;
  20. public function __construct($userIds, $nodes)
  21. {
  22. $this->userIds = $userIds;
  23. $this->nodes = $nodes;
  24. }
  25. public function handle(): void
  26. {
  27. foreach ($this->nodes as $node) {
  28. if ($node->is_ddns) {
  29. $this->send($node->server.':'.$node->push_port, $node->auth->secret);
  30. } else { // 多IP支持
  31. foreach ($node->ips() as $ip) {
  32. $this->send($ip.':'.$node->push_port, $node->auth->secret);
  33. }
  34. }
  35. }
  36. }
  37. private function send(string $host, string $secret): void
  38. {
  39. $request = Http::baseUrl($host)->timeout(15)->withHeaders(['secret' => $secret]);
  40. if (is_array($this->userIds)) {
  41. $response = $request->post('api/v2/user/del/list', $this->userIds);
  42. } else {
  43. $response = $request->post('api/user/del/'.$this->userIds);
  44. }
  45. $message = $response->json();
  46. if ($message && Arr::has($message, ['success', 'content']) && $response->ok()) {
  47. if ($message['success'] === 'false') {
  48. Log::alert("【删除用户】推送失败(推送地址:{$host},返回内容:".$message['content'].')');
  49. } else {
  50. Log::notice("【删除用户】推送成功(推送地址:{$host},内容:".json_encode($this->userIds, true).')');
  51. }
  52. }
  53. }
  54. // 队列失败处理
  55. public function failed(Throwable $exception)
  56. {
  57. Log::alert('【删除用户】推送异常:'.$exception->getMessage());
  58. }
  59. }