blob: 8776e36ee3474dc31e654b2d2ffd5e4abb7ed855 [file] [log] [blame]
wuchimedes223bfab2025-04-04 17:16:05 +08001package com.example.g8backend.controller;
2
wuchimedesdb9fe682025-04-22 19:24:11 +08003import com.example.g8backend.dto.AnnounceRequestDTO;
4import com.example.g8backend.dto.AnnounceResponseDTO;
5import jakarta.servlet.http.HttpServletRequest;
22301071f1381f82025-06-06 21:32:34 +08006import org.slf4j.Logger;
7import org.slf4j.LoggerFactory;
wuchimedes223bfab2025-04-04 17:16:05 +08008import org.springframework.beans.factory.annotation.Autowired;
9import org.springframework.http.ResponseEntity;
wuchimedesa0649c62025-04-05 15:53:39 +080010import org.springframework.web.bind.annotation.*;
wuchimedes223bfab2025-04-04 17:16:05 +080011import com.example.g8backend.service.ITrackerService;
12
13@RestController
wuchimedesa0649c62025-04-05 15:53:39 +080014@RequestMapping("/tracker")
wuchimedes223bfab2025-04-04 17:16:05 +080015public class TrackerController {
16
wuchimedesa0649c62025-04-05 15:53:39 +080017 @Autowired
18 private ITrackerService trackerService;
19
wuchimedesb06716b2025-04-08 19:48:24 +080020 @GetMapping("/announce/{passkey}")
wuchimedesdb9fe682025-04-22 19:24:11 +080021 public ResponseEntity<AnnounceResponseDTO> getAnnouncements(
22 HttpServletRequest request,
23 @RequestParam("info_hash") String infoHash,
24 @RequestParam("peer_id") String peerId,
25 @RequestParam("port") int port,
26 @RequestParam("uploaded") double uploaded,
27 @RequestParam("downloaded") double downloaded,
28 @RequestParam(value = "event", required = false) String event,
29 @RequestParam(value = "left", required = false) Double left,
30 @RequestParam(value = "compact", required = false) Integer compact,
wuchimedesa0649c62025-04-05 15:53:39 +080031 @PathVariable String passkey) {
32
22301071f1381f82025-06-06 21:32:34 +080033 Logger logger = LoggerFactory.getLogger(this.getClass());
34
wuchimedesdb9fe682025-04-22 19:24:11 +080035 AnnounceRequestDTO requestDTO = new AnnounceRequestDTO();
36 requestDTO.setPasskey(passkey);
37 requestDTO.setInfoHash(infoHash);
38 requestDTO.setPeerId(peerId);
39 requestDTO.setPort(port);
40 requestDTO.setUploaded(uploaded);
41 requestDTO.setDownloaded(downloaded);
42 requestDTO.setEvent(event);
43 requestDTO.setLeft(left);
44 requestDTO.setCompact(compact);
45
22301071f1381f82025-06-06 21:32:34 +080046 logger.info(requestDTO.toString());
47
wuchimedesdb9fe682025-04-22 19:24:11 +080048 String ipAddress = request.getHeader("X-Forwarded-For");
49 if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
50 ipAddress = request.getHeader("Proxy-Client-IP");
51 }
52 if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
53 ipAddress = request.getHeader("WL-Proxy-Client-IP");
54 }
55 if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
56 ipAddress = request.getRemoteAddr();
57 }
58 requestDTO.setIp(ipAddress.split(",")[0]);
59 return ResponseEntity.ok(trackerService.handleAnnounce(requestDTO));
wuchimedesa0649c62025-04-05 15:53:39 +080060 }
wuchimedes223bfab2025-04-04 17:16:05 +080061}