delUser.php 2.3 KB

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