package com.zy.system.controller;
|
|
import com.core.common.R;
|
import com.zy.system.entity.LicenseInfos;
|
import com.zy.system.entity.license.*;
|
import com.zy.system.service.LicenseInfosService;
|
import com.zy.system.timer.LicenseTimer;
|
import de.schlichtherle.license.LicenseContent;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.http.MediaType;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RestController;
|
|
import java.text.SimpleDateFormat;
|
import java.util.Date;
|
|
/**
|
*
|
* 用于生成证书文件,不能放在给客户部署的代码里
|
*/
|
@RestController
|
@RequestMapping("/license")
|
public class LicenseCreatorController {
|
|
@Value("${license.subject}")
|
private String licenseSubject;
|
@Value("${license.publicAlias}")
|
private String publicAlias;
|
@Value("${license.storePass}")
|
private String storePass;
|
@Value("${license.licensePath}")
|
private String licensePath;
|
@Value("${license.publicKeysStorePath}")
|
private String publicKeysStorePath;
|
@Autowired
|
private LicenseCheckListener licenseCheckListener;
|
@Autowired
|
private LicenseTimer licenseTimer;
|
@Autowired
|
private LicenseInfosService licenseInfosService;
|
/**
|
* 获取服务器硬件信息
|
* @param osName 操作系统类型,如果为空则自动判断
|
*/
|
@RequestMapping(value = "/getServerInfos",produces = {MediaType.APPLICATION_JSON_UTF8_VALUE})
|
public LicenseCheck getServerInfos(@RequestParam(value = "osName",required = false) String osName) {
|
return LicenseUtils.getServerInfos();
|
}
|
|
/**
|
* 获取请求码。
|
*/
|
@RequestMapping(value = "/getRequestCode")
|
public R getRequestCode() {
|
return R.ok(LicenseUtils.buildRequestCode(licenseSubject));
|
}
|
|
/**
|
* 获取许可证有效期天数
|
*/
|
@RequestMapping(value = "/getLicenseDays")
|
public R getLicenseDays() {
|
int licenseDays = licenseTimer.getLicenseDays();
|
if (!licenseTimer.getSystemSupport()) {
|
licenseDays = -1;
|
}
|
return R.ok().add(licenseDays);
|
}
|
|
@RequestMapping(value = "/updateLicense", produces = {MediaType.APPLICATION_JSON_UTF8_VALUE})
|
public R updateLicense(@RequestBody LicenseUploadParam param){
|
if (param == null || param.getLicense() == null || param.getLicense().trim().isEmpty()) {
|
return R.error("许可证内容不能为空");
|
}
|
|
String licenseBase64 = param.getLicense().trim();
|
LicenseVerifyParam verifyParam = buildVerifyParam();
|
LicenseVerify licenseVerify = new LicenseVerify();
|
LicenseContent install = licenseVerify.install(verifyParam, licenseBase64);
|
if (install == null) {
|
return R.error("许可证内容无效");
|
}
|
|
LicenseInfos licenseInfos = new LicenseInfos();
|
licenseInfos.setLicense(licenseBase64);
|
licenseInfos.setLicenseTime(formatLicenseTime(install));
|
licenseInfos.setRequestCode(LicenseUtils.buildRequestCode(licenseSubject));
|
licenseInfos.setCreateTime(new Date());
|
if (!licenseInfosService.insert(licenseInfos)) {
|
return R.error("许可证保存失败");
|
}
|
|
boolean loadedLicense = licenseCheckListener.loadLicense(false);
|
if (!loadedLicense) {
|
return R.error("许可证激活失败");
|
}
|
licenseTimer.verify();
|
if (!licenseTimer.getSystemSupport()) {
|
return R.error("许可证校验失败");
|
}
|
return R.ok();
|
}
|
|
@RequestMapping(value = "/activate")
|
public R activate() {
|
licenseTimer.timer();
|
if (!licenseTimer.getSystemSupport()) {
|
return R.error("许可证激活失败");
|
}
|
return R.ok();
|
}
|
|
@RequestMapping(value = "/getProjectName")
|
public R getProjectName() {
|
return R.ok(licenseSubject);
|
}
|
|
private LicenseVerifyParam buildVerifyParam() {
|
LicenseVerifyParam param = new LicenseVerifyParam();
|
param.setSubject(licenseSubject);
|
param.setPublicAlias(publicAlias);
|
param.setStorePass(storePass);
|
param.setLicensePath(licensePath);
|
param.setPublicKeysStorePath(publicKeysStorePath);
|
return param;
|
}
|
|
private String formatLicenseTime(LicenseContent install) {
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
return format.format(install.getNotBefore()) + " - " + format.format(install.getNotAfter());
|
}
|
|
}
|