// package cokr.xit.ens.modules.kkotalk; // // import java.nio.charset.StandardCharsets; // import java.security.InvalidAlgorithmParameterException; // import java.security.InvalidKeyException; // import java.security.KeyFactory; // import java.security.MessageDigest; // import java.security.NoSuchAlgorithmException; // import java.security.spec.InvalidKeySpecException; // import java.security.spec.X509EncodedKeySpec; // import java.util.ArrayList; // import java.util.Base64; // import java.util.List; // import java.util.Locale; // import java.util.Random; // import java.util.Set; // import java.util.UUID; // // import javax.crypto.BadPaddingException; // import javax.crypto.Cipher; // import javax.crypto.IllegalBlockSizeException; // import javax.crypto.Mac; // import javax.crypto.NoSuchPaddingException; // import javax.crypto.SecretKey; // import javax.crypto.spec.IvParameterSpec; // import javax.crypto.spec.SecretKeySpec; // import javax.validation.ConstraintViolation; // import javax.validation.Validation; // import javax.validation.Validator; // // import org.apache.commons.lang3.ObjectUtils; // import org.apache.commons.lang3.StringUtils; // import org.springframework.util.Base64Utils; // // import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg; // // import cokr.xit.ens.core.exception.BizRuntimeException; // import cokr.xit.ens.core.utils.CoreSpringUtils; // import cokr.xit.ens.core.utils.MessageUtil; // import cokr.xit.ens.modules.kkotalk.model.CmmEnsRequestDTO; // import cokr.xit.ens.modules.kkotalk.model.CmmEnsRlaybsnmDTO; // import lombok.AccessLevel; // import lombok.NoArgsConstructor; // // /** // *
//  * description : ENS 공통 method
//  *
//  * packageName : kr.xit.ens.cmm
//  * fileName    : CmmNiceCiUtils
//  * author      : limju
//  * date        : 2023-09-19
//  * ======================================================================
//  * 변경일         변경자        변경 내용
//  * ----------------------------------------------------------------------
//  * 2023-09-19    limju       최초 생성
//  *
//  * 
// */ // // @NoArgsConstructor(access = AccessLevel.PRIVATE) // public class CmmEnsUtils { // private static final MessageUtil messageUtil = CoreSpringUtils.getMessageUtil(); // private static final ICmmEnsCacheService cacheService = ApiSpringUtils.getCmmEnsCacheService(); // private static final IBizKtBcService bizKtService = ApiSpringUtils.getBizKtMmsService(); // // /** // * 문서 중개자 인증 정보 조회 // * @param signguCode string // * @param ffnlgCode String // * @param seCode SndngSeCode 문서중개자 구분 코드 // * @return CmmEnsRlaybsnmDTO 문서중개자 정보 // */ // public static CmmEnsRlaybsnmDTO getRlaybsnmInfo(final String signguCode, final String ffnlgCode, final // SndngSeCode seCode) { // CmmEnsRequestDTO ensDTO = CmmEnsRequestDTO.builder() // .signguCode(signguCode) // .ffnlgCode(ffnlgCode) // .profile(ApiConstants.IS_PROFILE_LOCAL? "local" : "prod") // .build(); // // final CmmEnsRlaybsnmDTO dto = cacheService.getRlaybsnmInfoCache(ensDTO); // if(ObjectUtils.isEmpty(dto)) throw BizRuntimeException.create(messageUtil.getMessage("fail.api.rlaybsnm.info")); // // // KT인 경우 토큰유효기간 check // if(SndngSeCode.KT_BC.equals(seCode)){ // // if(StringUtils.isNotEmpty(dto.getKtTokenExpiresIn()) // && DateUtils.getTodayAndNowTime(ApiConstants.FMT_DT_STD).compareTo(dto.getKtTokenExpiresIn()) < 0 // && ObjectUtils.isNotEmpty(dto.getKtAccessToken()) // ) return dto; // // // 유효기간이 경과된 경우 재발급 // bizKtService.requestToken( // KtMnsRequest.builder() // .signguCode(signguCode) // .ffnlgCode(ffnlgCode) // .profile(ApiConstants.IS_PROFILE_LOCAL? "local" : "prod") // .build() // ); // return cacheService.getRlaybsnmInfoCache(ensDTO); // } // return dto; // } // // /** // *
//      * parameter validation check
//      * invalid parameter message -> String으로 BizRuntimeException throw
//      * @param t T
//      * 
// */ // public static void validate(T t) { // Locale.setDefault(Locale.KOREA); // final Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); // final Set> list = validator.validate(t); // // if (!list.isEmpty()) { // throw BizRuntimeException.create( // list.stream() // .map(row -> String.format("%s=%s", row.getPropertyPath(), row.getMessageTemplate())) // //.map(row -> String.format("%s=%s", row.getPropertyPath(), row.get()) ? row.getMessage(): row.getMessageTemplate())) // .toList().toString()); // } // } // // /** // * parameter validation check // * @param t T // * @return List // */ // public static List getValidateErrors(T t) { // Locale.setDefault(Locale.KOREA); // final Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); // final Set> list = validator.validate(t); // // if (!list.isEmpty()) { // return list.stream() // .map(row -> new ErrorMsg(String.format("%s=%s", row.getPropertyPath(), row.getMessageTemplate()))) // .toList(); // } // return new ArrayList<>(); // } // // /** // * length 길이의 UUID String return -> '-' remove // * @param length // * @return // */ // public static String generateLengthUuid(int length) { // final String allChars = UUID.randomUUID().toString().replace("-", ""); // final Random random = new Random(); // final char[] otp = new char[length]; // for (int i = 0; i < length; i++) { // otp[i] = allChars.charAt(random.nextInt(allChars.length())); // } // return String.valueOf(otp); // } // // /** // * 공개키로 암호화를 수행 // * // * @param publicKeyString String // * @param symkeyRegInfo String // * @return String // */ // public static String encSymkeyRegInfo(String publicKeyString, String symkeyRegInfo) { // try { // KeyFactory keyFactory = KeyFactory.getInstance("RSA"); // byte[] cipherEnc = Base64.getDecoder().decode(publicKeyString); // X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(cipherEnc); // java.security.PublicKey publicKey = keyFactory.generatePublic(publicKeySpec); // // Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); // cipher.init(Cipher.ENCRYPT_MODE, publicKey); // byte[] bytePlain = cipher.doFinal(symkeyRegInfo.getBytes()); // // return Base64Utils.encodeToString(bytePlain); // } catch (NoSuchAlgorithmException | InvalidKeySpecException | NoSuchPaddingException | // IllegalBlockSizeException | BadPaddingException | InvalidKeyException e){ // throw BizRuntimeException.create(e.getMessage()); // } // } // // /** // * sha256 암호화 // * // * @param text String // * @return String // */ // public static String hexSha256(final String text) { // final StringBuilder sbuf = new StringBuilder(); // // try { // final MessageDigest mDigest = MessageDigest.getInstance("SHA-256"); // mDigest.update(text.getBytes()); // // final byte[] msgStr = mDigest.digest(); // // for(final byte tmpStrByte : msgStr) { // final String tmpEncTxt = Integer.toString((tmpStrByte & 0xff) + 0x100, 16) // .substring(1); // // sbuf.append(tmpEncTxt); // } // } catch (NoSuchAlgorithmException nae){ // throw BizRuntimeException.create(nae.getMessage()); // } // return sbuf.toString(); // } // // // /** // *
//      * AES 암호화 -> Base64 encoding return
//      * -> Nice ci 데이타 암호화
//      *
//      * @param key String
//      * @param iv String
//      * @param planText String
//      * @return String  Base64 encoding data
//      * 
// */ // public static String encodeAesData(final String key, final String iv, final String planText) { // final SecretKey secureKey = new SecretKeySpec(key.getBytes(), "AES"); // try { // final Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); // cipher.init(Cipher.ENCRYPT_MODE, secureKey, new IvParameterSpec(iv.getBytes())); // // final byte[] encData = cipher.doFinal(planText.trim().getBytes(StandardCharsets.UTF_8)); // return Base64.getEncoder().encodeToString(encData); // // }catch (NoSuchPaddingException | NoSuchAlgorithmException | // InvalidAlgorithmParameterException | InvalidKeyException | // IllegalBlockSizeException | BadPaddingException e){ // throw BizRuntimeException.create(e.getMessage()); // } // } // // /** // *
//      * Hmac 무결성체크값(integrity_value) 생성
//      * @param hmacKey String
//      * @param message String
//      * @return String
//      * 
// */ // public static String encodeHmacSha256(final String hmacKey, final String message) { // try { // final Mac mac = Mac.getInstance("HmacSHA256"); // final SecretKeySpec sks = new SecretKeySpec(hmacKey.getBytes(), "HmacSHA256"); // mac.init(sks); // final byte[] hmac256 = mac.doFinal(message.getBytes()); // return Base64.getEncoder().encodeToString(hmac256); // // }catch (NoSuchAlgorithmException|InvalidKeyException e){ // throw BizRuntimeException.create(e.getMessage()); // } // } // // /** // * AES 복호화 // * @param encData String // * @param key String // * @param iv String // * @return String // */ // public static String decodeAesData(String encData, String key, String iv) { // // final byte[] respDataEnc = Base64.getDecoder().decode(encData.getBytes()); // final SecretKey secureKey = new SecretKeySpec(key.getBytes(), "AES"); // // try { // final Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); // cipher.init(Cipher.DECRYPT_MODE, secureKey, new IvParameterSpec(iv.getBytes())); // final byte[] decrypted = cipher.doFinal(respDataEnc); // return new String(decrypted); // // }catch (NoSuchPaddingException | NoSuchAlgorithmException | // InvalidAlgorithmParameterException | InvalidKeyException | // IllegalBlockSizeException | BadPaddingException e){ // throw BizRuntimeException.create(e.getMessage()); // } // } // }