products;
private String metadata = "0120230914PSAX000005";
}
@Data
public static class Product {
private String code;
private String fallbackDate;
private String paidUpTo;
}
```
**此处留一个问题**
> 那就是关于LicensePart中的metadata字段,似乎是必要条件,而根据致谢热佬的解答只能通过正版激活码反解析获得,所以这个字段值目前是写死的
>
> 我个人还是比较好奇生成规则的,如果有热佬研究出来可以自定义那就更好了
>
> 我会持续关注的
> 以上代码调用流程图如下

> OKOK
>
> 核心core相关的代码都已经整理好了
>
> 接下来就是页面的展示了
>
> index.html还是套用的现成的热佬文件
> **但是我加入了一些东西**
https://github.com/NotoChen/Jetbrains-Help/blob/main/src/main/resources/templates/index.html
> 首先是ja-netfilter.zip文件的下载功能
```
🇨🇳 Download ja-netfilter.zip
```
> 然后是vmoptions的配置拷贝 (点击即可alter展示可拷贝配置项)
```
configure your JetBrains's vmoptions!
```
> 接着是自定义LicenseInfo,可以自定义激活信息和时间等
```
🇨🇳 Also you can Refill license information to customizer your license!
```
当然这些都是热佬的肩膀
> **我另外额外添加了**
> 搜索功能, 可以实时输入并检索IDE和PLUGIN,实时展示
```
```
```
document.getElementById('search').oninput = function (e) {
$("#product-list").load('/search?search=' + e.target.value)
}
```
就是简单的oninput监听,以及结合thymeleaf的局部刷新实现的,源码很简单
```
@GetMapping
public String index(Model model) {
List productCacheList = ProductsContextHolder.productCacheList();
List pluginCacheList = PluginsContextHolder.pluginCacheList();
model.addAttribute("products", productCacheList);
model.addAttribute("plugins", pluginCacheList);
model.addAttribute("defaults", jetbrainsHelpProperties);
return "index";
}
@GetMapping("search")
public String index(@RequestParam(required = false) String search, Model model) {
List productCacheList = ProductsContextHolder.productCacheList();
List pluginCacheList = PluginsContextHolder.pluginCacheList();
if (CharSequenceUtil.isNotBlank(search)) {
productCacheList = productCacheList.stream()
.filter(productCache -> CharSequenceUtil.containsIgnoreCase(productCache.getName(), search))
.toList();
pluginCacheList = pluginCacheList.stream()
.filter(pluginCache -> CharSequenceUtil.containsIgnoreCase(pluginCache.getName(), search))
.toList();
}
model.addAttribute("products", productCacheList);
model.addAttribute("plugins", pluginCacheList);
model.addAttribute("defaults", jetbrainsHelpProperties);
return "index::product-list";
}
```
## 重磅

### 我加入了一个新的Card

> 也就是前面提到的,单码全家桶激活
>
> 本质上就是直接拿所有已知的code去生成LicenseCode
> 因为不善于前端
>
> 所以对于html的改动不多
>
> UI也暂时没有想法优化
>
> 还是老老实实站在热佬的肩膀上舒服
> 另外就是把CSS/JS都单独拎出来,来简化HTML的代码,看起来更舒服了
>
> 以上差不多就是全部
>
> 更多的小改动,可配置化的东西,还是看代码实现吧
> 服务端口号定义的是10768
>
> 因为我觉得768是Jetbrains的谐音,hhhh
> 剩下的再补充吧
>
> 暂时没有测试打包成Jar是否仍然支持(因为涉及到,读取文件是否存在问题)
>
> 后续待改进
>
> 因此暂时也没有测试是否可以支持Docker
>
> 后续待改进
# FAQ (实时记录)
# UPDATE HISTORY
## 2024年04月11日 22:15
> **修复licenseName错误传参问题**
## 2024年04月12日 00:40
> **修复瞬间出现"we could not validate your license"的问题**