diff --git a/src/main/java/com/jetbrains/help/route/IndexController.java b/src/main/java/com/jetbrains/help/route/IndexController.java index 984b6f2..bfaf61e 100644 --- a/src/main/java/com/jetbrains/help/route/IndexController.java +++ b/src/main/java/com/jetbrains/help/route/IndexController.java @@ -4,15 +4,19 @@ import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.digest.DigestUtil; import com.jetbrains.help.JetbrainsHelpApplication; import com.jetbrains.help.context.AgentContextHolder; import com.jetbrains.help.context.PluginsContextHolder; import com.jetbrains.help.context.ProductsContextHolder; import com.jetbrains.help.properties.JetbrainsHelpProperties; +import jakarta.servlet.http.HttpServletRequest; import lombok.AllArgsConstructor; import lombok.RequiredArgsConstructor; +import org.springframework.cglib.core.Local; import org.springframework.core.io.InputStreamResource; import org.springframework.core.io.Resource; +import org.springframework.http.HttpRequest; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; @@ -20,11 +24,13 @@ import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; +import org.thymeleaf.util.DateUtils; import java.io.File; -import java.util.List; +import java.util.*; import static org.springframework.http.HttpHeaders.CONTENT_DISPOSITION; +import static org.springframework.http.MediaType.APPLICATION_JSON; import static org.springframework.http.MediaType.APPLICATION_OCTET_STREAM; @Controller @@ -43,6 +49,26 @@ public class IndexController { return "index"; } + @GetMapping("/scoop/ja-netfilter") + @ResponseBody + public ResponseEntity> scoopInstall(HttpServletRequest request) { + String basePath = (request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath()); + Map json = new HashMap<>(); + String version = DateUtils.format(new Date(),"yyyyMMdd", Locale.getDefault()); + json.put("version", version); + json.put("description", "JetBrains' dragon slayer"); + json.put("homepage", "https://cikaros.top"); + json.put("license", "MIT"); + json.put("url", String.format("%s/ja-netfilter#dl.zip", basePath)); + json.put("extract_to", Arrays.asList("", "config-jetbrains", "plugins-jetbrains", "scripts", "vmoptions")); + json.put("hash", DigestUtil.sha256Hex(AgentContextHolder.jaNetfilterZipFile())); + json.put("post_install", "cscript $dir/scripts/install-current-user.vbs"); + json.put("pre_uninstall", "cscript $dir/scripts/uninstall-current-user.vbs"); + return ResponseEntity.ok() + .contentType(APPLICATION_JSON) + .body(json); + } + @GetMapping("search") public String index(@RequestParam(required = false) String search, Model model) { List productCacheList = ProductsContextHolder.productCacheList(); @@ -70,4 +96,5 @@ public class IndexController { .contentType(APPLICATION_OCTET_STREAM) .body(new InputStreamResource(FileUtil.getInputStream(jaNetfilterZipFile))); } + }