123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- package com.genersoft.iot.vmp.conf;
- import com.alibaba.fastjson2.JSON;
- import com.genersoft.iot.vmp.utils.DateUtil;
- import net.roseboy.classfinal.util.IoUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.util.Base64Utils;
- import java.io.File;
- public class AuthorizeApprove {
- // 机器码
- private String machineCode;
- // 加密后的授权数据
- private String encryptAuthorData;
- // 请求生成时间
- private String requestTime;
- // 批准生成时间
- private String approveTime;
- // 批准人
- private String approver;
- // 授权天数
- private int authorizeDay;
- public final static String baseAuthorizeApproveFilePath = "authorize/authorizeApprove.hfy";
- private final static Logger logger = LoggerFactory.getLogger(AuthorizeApprove.class);
- // 读取授权文件
- private static byte[] readAuthorizeApproveFile(String path) {
- if(path == null) {
- path = baseAuthorizeApproveFilePath;
- }
- // logger.info("path: {}", path);
- File file = new File(path);
- if(!file.exists()) {
- logger.error("无法解析授权请求文件");
- return null;
- }
- byte[] data = IoUtils.readFileToByte(file);
- // 解析授权文件
- return data;
- }
- public static String getApprovePasswd(AuthorData authorData, String machineCode) {
- return authorData.getPassword() + machineCode + authorData.getAuthorizeTime();
- }
- // 加密并保存授权批准文件
- public static boolean saveAuthorizeApproveFile(AuthorizeApprove authorizeApprove,AuthorData authorData, String targetPath) {
- if (authorizeApprove == null) {
- logger.error("授权批准文件为空, 无法保存");
- return false;
- }
- if (targetPath == null) {
- logger.error("请输入授权文件保存路径");
- return false;
- }
- // 生成授权批准文件
- String approveStr = JSON.toJSONString(authorizeApprove);
- String password = getApprovePasswd(authorData, authorData.getMachineCode());
- try{
- // 加密授权文件
- String encryptStr = AesUtils.encrypt(approveStr, password);
- // 使用 base64 转换文本
- byte[] approveData = encryptStr.getBytes();
- byte[] approveByte = Base64Utils.encode(approveData);
- // 保存授权文件
- File file = new File(targetPath);
- if (file.exists()) {
- file.delete();
- logger.info("授权批准文件已存在, 正在覆盖");
- }
- file.createNewFile();
- IoUtils.writeTxtFile(file, approveByte.toString());
- return true;
- }catch(Exception e)
- {
- logger.error("授权批准文件生成失败. 请检查练习管理员进行排查. ");
- logger.error("错误信息: {}", e.getMessage());
- return false;
- }
- }
- // 生成授权文件
- public static AuthorizeApprove generateAuthorizeApprove(String machineCode, String authorizeFilePath, String approver, int p_authorizeDay ) {
- // 获取密文
- String encryptAuthorData = Authorize.getEncryptAuthorData(authorizeFilePath);
- // 读取授权文件
- AuthorData authorData = Authorize.parseBaseAuthorizeFile(machineCode, authorizeFilePath);
- if (authorData == null) {
- logger.error("授权文件解析失败,请检查对应文件是否正确");
- return null;
- }
- // 判断机器码是否一致
- if (!authorData.getMachineCode().equals(machineCode)) {
- logger.error("授权文件机器码不一致,请检查对应文件是否正确");
- return null;
- }
- // 生成授权批准文件
- AuthorizeApprove authorizeApprove = new AuthorizeApprove();
- // 机器码
- authorizeApprove.setMachineCode(machineCode);
- // 授权请求时间
- authorizeApprove.setRequestTime(authorData.getAuthorizeTime());
- // 授权发布时间
- authorizeApprove.setRequestTime(DateUtil.getNowForISO8601());
- // 请求密文
- authorizeApprove.setEncryptAuthorData(encryptAuthorData);
- // 授权天数
- authorizeApprove.setAuthorizeDay(p_authorizeDay);
- // 批准人
- authorizeApprove.setApprover(approver);
- return authorizeApprove;
- }
- /**
- * 解析授权批准文件
- * @param machineCode 机器码
- * @param authorData 授权数据
- * @return
- */
- public static AuthorizeApprove parseAuthorizeApprove (String authorizeApproveFilePath, String machineCode, AuthorData authorData) {
- if (authorData == null) {
- logger.info("授权数据解析失败");
- return null;
- }
- authorizeApproveFilePath = authorizeApproveFilePath == null ? baseAuthorizeApproveFilePath : authorizeApproveFilePath;
- // 读取授权批准文件
- byte[] approveByte = readAuthorizeApproveFile(authorizeApproveFilePath);
- if (approveByte == null) {
- logger.info("授权批准文件读取失败,请检查对应文件是否正确");
- return null;
- }
- // 解析授权批准文件
- AuthorizeApprove authorizeApprove = null;
- // 使用 base64 转换文本
- byte[] approveData = Base64Utils.decode(approveByte);
- String code = new String(approveData);
- // 解密授权文件
- String password = getApprovePasswd(authorData, machineCode);
- try
- {
- String decryptStr = AesUtils.decrypt(code, password);
- authorizeApprove = JSON.parseObject(decryptStr, AuthorizeApprove.class);
- return authorizeApprove;
- }catch(Exception e)
- {
- logger.error("授权授权请求文件解析失败. 请检查练习管理员进行排查. ");
- logger.error("错误信息: {}", e.getMessage());
- return null;
- }
- }
- public String getMachineCode() {
- return machineCode;
- }
- public void setMachineCode(String machineCode) {
- this.machineCode = machineCode;
- }
- public String getEncryptAuthorData() {
- return encryptAuthorData;
- }
- public void setEncryptAuthorData(String encryptAuthorData) {
- this.encryptAuthorData = encryptAuthorData;
- }
- public String getRequestTime() {
- return requestTime;
- }
- public void setRequestTime(String requestTime) {
- this.requestTime = requestTime;
- }
- public String getApproveTime() {
- return approveTime;
- }
- public void setApproveTime(String approveTime) {
- this.approveTime = approveTime;
- }
- public String getApprover() {
- return approver;
- }
- public void setApprover(String approver) {
- this.approver = approver;
- }
- public int getAuthorizeDay() {
- return authorizeDay;
- }
- public void setAuthorizeDay(int authorizeDay) {
- this.authorizeDay = authorizeDay;
- }
- }
|