package net.geedge.confagent.util; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.core.annotation.Order; import cn.hutool.core.io.IORuntimeException; import cn.hutool.log.Log; @Configuration @Order(value = 1) public class ConfagentUtil { private final static Log log = Log.get(); @Value("${confagent.tokenFile:config/token.auth}") protected String tokenFile; //token文件位置 @Value("${confagent.versionFile:promtail.version}") private String versionFile; private static String rootPath = Tool.WebPathUtil.getRootPath(); /** * @Description 读取token文件中的token * @Author rui * @Date 2021/3/25 */ public String readToken() throws IORuntimeException { File tf = Tool.FileUtil.file(rootPath, tokenFile); log.info("token file path : {}" ,tf.getAbsolutePath()); String token = Tool.FileUtil.readString(tf, Tool.CharsetUtil.UTF_8); return token; } /** * @Description 读取version * @Author rui * @Date 2021/3/25 */ public String readVersion() throws IORuntimeException { String version = "1"; File tf = Tool.FileUtil.file(rootPath, versionFile); if(tf!=null && tf.exists()) { log.info("version file path : {}" ,tf.getAbsolutePath()); version = Tool.FileUtil.readString(tf, Tool.CharsetUtil.UTF_8); } return version; } /** * @Description 检查token 是否和文件中的一致 * @Author rui * @Date 2021/3/25 */ public R checkToken(String token){ if(Tool.StrUtil.isBlank(token)){ return R.error(RCode.AUTH_TOKEN_ISNULL); } try{ String readToken = this.readToken(); if(Tool.StrUtil.equals(readToken,token)){ return R.ok(); } return R.error(RCode.AUTH_TOKEN_INVALID); }catch (IORuntimeException e){ log.error("read token file failed",e); return R.error(RCode.AUTH_READ_TOKEN_FAILD); } } /** * @Description 加载service EnvironmentFile中的内容,并整理为map * @Author rui * @Date 2021/3/24 */ public static Map loadServiceConfigFile(String path){ File file = Tool.FileUtil.file(path); if(!Tool.FileUtil.exist(file)){ return null; } String readLine = Tool.FileUtil.readUtf8String(file); //匹配有参类型 --[\w\.-]+?\s 可匹配无参类型 Pattern pattern = Pattern.compile("--([\\w\\.-]+?)='?(.+?)'?\\s+?"); Matcher matcher = pattern.matcher(readLine); Map result = new HashMap<>(); while(matcher.find()){ result.put(matcher.group(1).trim(),matcher.group(2).trim()); } return result; } /** * @Description 获取配置在config.conf启动参数文件中的端口 * @Author rui * @Date 2021/3/25 */ public static Integer getConfFilePort(String path,String key,Integer defaultValue){ Map configs = loadServiceConfigFile(path); if(configs!=null) { String address = configs.get(key); String[] split = address.split(":"); return Tool.StrUtil.isNotBlank(split[1])? Integer.parseInt(split[1]):defaultValue; }else { return defaultValue; } } public static void writeResponse(HttpServletResponse response, Object o) { OutputStream outputStream = null; try { outputStream = response.getOutputStream(); Tool.IoUtil.writeUtf8 (outputStream,true, Tool.JSONUtil.parseObj(o).toString()); outputStream.flush(); }catch (IOException e){ log.error("write response failed :",e); }finally { Tool.IoUtil.close(outputStream); } } }