package com.goldenchart.controller; import com.goldenchart.dto.MobileAppReleaseInfoDto; import com.goldenchart.service.MobileAppReleaseService; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import org.springframework.core.io.Resource; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/mobile-app") @RequiredArgsConstructor public class MobileAppReleaseController { private final MobileAppReleaseService releaseService; @GetMapping("/info") public MobileAppReleaseInfoDto info(HttpServletRequest request) { return releaseService.getInfo(resolvePublicBaseUrl(request)); } @GetMapping("/download/android") public ResponseEntity downloadAndroid() { return releaseService.downloadAndroid(); } private static String resolvePublicBaseUrl(HttpServletRequest request) { String forwardedProto = request.getHeader("X-Forwarded-Proto"); String forwardedHost = request.getHeader("X-Forwarded-Host"); if (forwardedHost != null && !forwardedHost.isBlank()) { String scheme = forwardedProto != null && !forwardedProto.isBlank() ? forwardedProto : "https"; return scheme + "://" + forwardedHost.split(",")[0].trim(); } String scheme = request.getScheme(); int port = request.getServerPort(); String host = request.getServerName(); boolean defaultPort = ("http".equals(scheme) && port == 80) || ("https".equals(scheme) && port == 443); return defaultPort ? scheme + "://" + host : scheme + "://" + host + ":" + port; } }