delUser.php 2.4 KB

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