delUser.php 2.2 KB

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