blob: 4e26abb0d17f33242392ba36e24f82523fd0d636 [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;
wuchimedes223bfab2025-04-04 17:16:05 +08006import org.springframework.beans.factory.annotation.Autowired;
7import org.springframework.http.ResponseEntity;
wuchimedesa0649c62025-04-05 15:53:39 +08008import org.springframework.web.bind.annotation.*;
wuchimedes223bfab2025-04-04 17:16:05 +08009import com.example.g8backend.service.ITrackerService;
10
11@RestController
wuchimedesa0649c62025-04-05 15:53:39 +080012@RequestMapping("/tracker")
wuchimedes223bfab2025-04-04 17:16:05 +080013public class TrackerController {
14
wuchimedesa0649c62025-04-05 15:53:39 +080015 @Autowired
16 private ITrackerService trackerService;
17
wuchimedesb06716b2025-04-08 19:48:24 +080018 @GetMapping("/announce/{passkey}")
wuchimedesdb9fe682025-04-22 19:24:11 +080019 public ResponseEntity<AnnounceResponseDTO> getAnnouncements(
20 HttpServletRequest request,
21 @RequestParam("info_hash") String infoHash,
22 @RequestParam("peer_id") String peerId,
23 @RequestParam("port") int port,
24 @RequestParam("uploaded") double uploaded,
25 @RequestParam("downloaded") double downloaded,
26 @RequestParam(value = "event", required = false) String event,
27 @RequestParam(value = "left", required = false) Double left,
28 @RequestParam(value = "compact", required = false) Integer compact,
wuchimedesa0649c62025-04-05 15:53:39 +080029 @PathVariable String passkey) {
30
wuchimedesdb9fe682025-04-22 19:24:11 +080031 AnnounceRequestDTO requestDTO = new AnnounceRequestDTO();
32 requestDTO.setPasskey(passkey);
33 requestDTO.setInfoHash(infoHash);
34 requestDTO.setPeerId(peerId);
35 requestDTO.setPort(port);
36 requestDTO.setUploaded(uploaded);
37 requestDTO.setDownloaded(downloaded);
38 requestDTO.setEvent(event);
39 requestDTO.setLeft(left);
40 requestDTO.setCompact(compact);
41
42 String ipAddress = request.getHeader("X-Forwarded-For");
43 if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
44 ipAddress = request.getHeader("Proxy-Client-IP");
45 }
46 if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
47 ipAddress = request.getHeader("WL-Proxy-Client-IP");
48 }
49 if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
50 ipAddress = request.getRemoteAddr();
51 }
52 requestDTO.setIp(ipAddress.split(",")[0]);
53 return ResponseEntity.ok(trackerService.handleAnnounce(requestDTO));
wuchimedesa0649c62025-04-05 15:53:39 +080054 }
wuchimedes223bfab2025-04-04 17:16:05 +080055}