package net.curisit.securis; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import net.curisit.securis.beans.RequestBean; import net.curisit.securis.utils.JsonUtils; import net.curisit.securis.utils.LicUtils; import org.apache.commons.io.IOUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class LicenseValidator { private static final Logger LOG = LogManager.getLogger(LicenseValidator.class); private static LicenseValidator singleton = new LicenseValidator(); protected static byte[] LOGO_SECRET; static { try { LOGO_SECRET = "Logo ipsum s3cr3t test áíóú".getBytes("utf-8"); } catch (UnsupportedEncodingException e) { LOG.error("Unexpected error getting LOGO secret", e); } } private LicenseValidator() { } public static LicenseValidator getInstance() { return singleton; } /** * @return CRC string for customer logo */ public String getCrcLogo() { InputStream is = getClass().getClassLoader().getResourceAsStream("images/logo_customer.png"); try { String shaLogo = LicUtils.sha256(IOUtils.toByteArray(is), LOGO_SECRET); return shaLogo; } catch (IOException e) { LOG.warn("Customer logo was not found in images/logo_customer.png"); return null; } } public void validateLogo(RequestBean reqBean) throws SeCurisException { if (reqBean.getCrcLogo() == null) { LOG.info("Customer logo is not included in license file and won't be validated"); } else { String currentCRC = getCrcLogo(); if (!currentCRC.equals(reqBean.getCrcLogo())) throw new SeCurisException("License logo validation failed for request data: " + JsonUtils.toJSON(reqBean)); } } public void validateHW(RequestBean reqBean, String appCode, String customerCode) throws SeCurisException { RequestBean currentHW = ReqGenerator.getInstance().createRequest(appCode, customerCode); if (!currentHW.match(reqBean)) { throw new SeCurisException("Current System info mismatch the License System info:\n Licensed: " + JsonUtils.toJSON(reqBean, true) + "\n Expected: " + JsonUtils.toJSON(currentHW, true)); } } }