feat:暂存

This commit is contained in:
2025-09-23 11:02:19 +08:00
parent 11367c4f54
commit b9f44d34f1
6 changed files with 79 additions and 11 deletions

View File

@@ -0,0 +1,15 @@
package org.nl.api;
import lombok.Data;
import java.io.Serializable;
/**
* 激活参数
* @Author: lyd
* @Date: 2025/9/23
*/
@Data
public class LicenseActivityParam implements Serializable {
private String code;
}

View File

@@ -0,0 +1,34 @@
package org.nl.api;
import lombok.AllArgsConstructor;
import org.nl.core.LicenseResult;
import org.nl.core.LicenseVerifier;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
/**
* 主要做的是激活的功能
* @Author: lyd
* @Date: 2025/9/22
*/
@RestController
@RequestMapping("/api/verify")
@AllArgsConstructor
public class LicenseController {
private final LicenseVerifier verifier;
@PostMapping("/activity")
public ResponseEntity<Object> activity(@RequestBody LicenseActivityParam param) {
if (null == param.getCode()) {
throw new RuntimeException("激活码不能为空!");
}
// 校验激活码是否正确
LicenseResult verify = verifier.verify(param.getCode());
if (true == verify.getResult()) {
// 存到文件中
}
return new ResponseEntity<>(verify, HttpStatus.OK);
}
}

View File

@@ -28,8 +28,8 @@ public class LicenseAutoConfiguration implements WebMvcConfigurer {
@Bean
@ConditionalOnMissingBean
public LicenseVerifier licenseVerifier(RSAUtil rsaUtil) {
return new LicenseVerifier(rsaUtil);
public LicenseVerifier licenseVerifier(RSAUtil rsaUtil, LicenseProperties properties) {
return new LicenseVerifier(rsaUtil, properties);
}
@Bean

View File

@@ -13,6 +13,7 @@ public class LicenseProperties {
private String header = "cdk";
/** 私钥资源位置,默认 classpath:private_key.txt */
private String privateKeyLocation = "classpath:private_key.txt";
private String sdkLocation = "classpath:sdk.txt";
public String getHeader() {
return header;
@@ -29,4 +30,12 @@ public class LicenseProperties {
public void setPrivateKeyLocation(String privateKeyLocation) {
this.privateKeyLocation = privateKeyLocation;
}
public String getSdkLocation() {
return sdkLocation;
}
public void setSdkLocation(String sdkLocation) {
this.sdkLocation = sdkLocation;
}
}

View File

@@ -12,8 +12,11 @@ import java.time.format.DateTimeFormatter;
public class LicenseVerifier {
private final RSAUtil rsaUtil;
public LicenseVerifier(RSAUtil rsaUtil) {
private final LicenseProperties properties;
public LicenseVerifier(RSAUtil rsaUtil, LicenseProperties properties) {
this.rsaUtil = rsaUtil;
this.properties = properties;
}
public LicenseResult verify(String authCode) {
@@ -23,15 +26,24 @@ public class LicenseVerifier {
try {
String expirationStr = rsaUtil.decrypt(authCode);
if ("-1".equals(expirationStr)) {
return LicenseResult.requestOk("永久授权", expirationStr);
return LicenseResult.requestOk("永久授权", authCode);
}
LocalDate expirationDate = LocalDate.parse(expirationStr, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
if (LocalDate.now().isAfter(expirationDate)) {
return LicenseResult.requestResult(false, "授权码已到期", expirationStr);
return LicenseResult.requestResult(false, "授权码已到期", authCode);
}
return LicenseResult.requestOk("授权码有效", expirationStr);
return LicenseResult.requestOk("授权码有效", authCode);
} catch (Exception e) {
return LicenseResult.requestResult(false, "解密失败或格式错误", null);
return LicenseResult.requestResult(false, "解密失败或格式错误", authCode);
}
}
public void install(String authCode) {
// 存储SDK到文件中没有文件则创建
String sdkLocation = properties.getSdkLocation();
}
public void unInstall(LicenseResult result) {
}
}

View File

@@ -3,11 +3,9 @@ package org.nl.util;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.util.ResourceUtils;
import javax.crypto.Cipher;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
@@ -37,8 +35,8 @@ public class RSAUtil {
if (privateKey == null) {
Resource resource = resourceLoader.getResource(privateKeyLocation);
try (InputStream is = resource.getInputStream();
InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
BufferedReader reader = new BufferedReader(isr)) {
InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
BufferedReader reader = new BufferedReader(isr)) {
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {