From 3de8fa2128c740e131676683dec649bb44c8ea73 Mon Sep 17 00:00:00 2001
From: Roberto Sánchez <roberto.sanchez@curisit.net>
Date: Mon, 24 Feb 2014 13:22:01 +0000
Subject: [PATCH] #593 feature - Changed log lib to log4j2 and bugfixing

---
 src/main/java/net/curisit/securis/utils/LicUtils.java    |    6 +-
 src/main/java/net/curisit/securis/HWInfo.java            |    6 +-
 src/main/resources/securis-client.properties             |    4 +
 pom.xml                                                  |    5 -
 src/main/resources/log4j2.xml                            |   16 +++++
 src/main/java/net/curisit/securis/License.java           |   35 +++++++++--
 src/main/java/net/curisit/securis/beans/LicenseBean.java |    2 
 /dev/null                                                |   26 --------
 src/main/java/net/curisit/securis/utils/Params.java      |    8 +-
 src/main/java/net/curisit/securis/CryptoHelper.java      |    6 +-
 src/main/java/net/curisit/securis/utils/JsonUtils.java   |    6 +-
 src/main/java/net/curisit/securis/SignatureHelper.java   |   11 +--
 src/main/java/net/curisit/securis/ReqGenerator.java      |   18 ++++-
 src/patch/java/net/curisit/securis/LicenseGenerator.java |   25 ++++++--
 14 files changed, 103 insertions(+), 71 deletions(-)

diff --git a/pom.xml b/pom.xml
index 2ee657e..1ce4609 100644
--- a/pom.xml
+++ b/pom.xml
@@ -43,11 +43,6 @@
   	</dependency>
   	<dependency>
   		<groupId>org.apache.logging.log4j</groupId>
-  		<artifactId>log4j-slf4j-impl</artifactId>
-  		<version>2.0-rc1</version>
-  	</dependency>
-  	<dependency>
-  		<groupId>org.apache.logging.log4j</groupId>
   		<artifactId>log4j-core</artifactId>
   		<version>2.0-rc1</version>
   	</dependency>
diff --git a/src/main/java/net/curisit/securis/CryptoHelper.java b/src/main/java/net/curisit/securis/CryptoHelper.java
index dd55a09..8ba7532 100644
--- a/src/main/java/net/curisit/securis/CryptoHelper.java
+++ b/src/main/java/net/curisit/securis/CryptoHelper.java
@@ -18,14 +18,14 @@
 import javax.crypto.spec.SecretKeySpec;
 
 import org.apache.commons.net.util.Base64;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 //import net.curisit.common.ui.Dialogs;
 
 public class CryptoHelper {
 
-	private static final Logger log = LoggerFactory.getLogger(SignatureHelper.class);
+	private static final Logger log = LogManager.getLogger(SignatureHelper.class);
 
 	private static final String KEY_FACTORY = "PBEWITHHMACSHA1";
 	private static final String PPROVIDER = "BC";
diff --git a/src/main/java/net/curisit/securis/HWInfo.java b/src/main/java/net/curisit/securis/HWInfo.java
index a0f9e65..053d260 100644
--- a/src/main/java/net/curisit/securis/HWInfo.java
+++ b/src/main/java/net/curisit/securis/HWInfo.java
@@ -8,8 +8,8 @@
 import java.util.Collections;
 import java.util.List;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 /**
  * Retrieve HW info
@@ -19,7 +19,7 @@
  */
 public class HWInfo {
 
-	private static final Logger log = LoggerFactory.getLogger(HWInfo.class);
+	private static final Logger log = LogManager.getLogger(HWInfo.class);
 
 	public static String getOsName() {
 		return System.getProperty("os.name");
diff --git a/src/main/java/net/curisit/securis/License.java b/src/main/java/net/curisit/securis/License.java
index 87fd7b7..dd634bb 100644
--- a/src/main/java/net/curisit/securis/License.java
+++ b/src/main/java/net/curisit/securis/License.java
@@ -1,6 +1,8 @@
 package net.curisit.securis;
 
 import java.io.File;
+import java.net.URISyntaxException;
+import java.util.Date;
 
 import net.curisit.securis.utils.Params;
 
@@ -11,8 +13,8 @@
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
 import org.apache.commons.cli.PosixParser;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 public class License {
 
@@ -22,10 +24,14 @@
 		// LogManager.getRootLogger().
 	}
 
-	private static final Logger log = LoggerFactory.getLogger(License.class);
+	// private static final Logger log = LoggerFactory.getLogger(License.class);
+	private static final Logger log = LogManager.getLogger(License.class);
 
-	public static void main(String[] args) {
-		log.info("Tool init");
+	public static void main(String[] args) throws URISyntaxException {
+		// Configuration conf = XMLConfigurationFactory.getInstance().getConfiguration("config", License.class.getResource("/log4j.xml").toURI());
+
+		log.info("Tool init {}", new Date());
+
 		checkConfigFile();
 		CommandLine cmd = getCommandLine(args);
 
@@ -34,7 +40,24 @@
 				String filename = cmd.getOptionValue("rfile");
 				if (filename == null)
 					filename = "./license.req";
-				LicenseManager.getInstance().createRequestFile(new File(filename));
+				File file = new File(filename);
+				LicenseManager.getInstance().createRequestFile(file);
+				log.info("Request file {} generated OK", file.getAbsolutePath());
+				System.exit(0);
+			}
+
+			if (cmd.hasOption('l')) {
+				String filename = cmd.getOptionValue("validate");
+				if (filename == null)
+					filename = "./license.lic";
+				File file = new File(filename);
+				try {
+					LicenseManager.getInstance().validateLicense(file);
+					log.info("License file {} is valid", file.getAbsolutePath());
+				} catch (SeCurisException e) {
+					log.info("License file {} is NOT valid", file.getAbsolutePath());
+				}
+
 				System.exit(0);
 			}
 
diff --git a/src/main/java/net/curisit/securis/ReqGenerator.java b/src/main/java/net/curisit/securis/ReqGenerator.java
index a329031..09545fd 100644
--- a/src/main/java/net/curisit/securis/ReqGenerator.java
+++ b/src/main/java/net/curisit/securis/ReqGenerator.java
@@ -13,13 +13,12 @@
 import net.curisit.securis.utils.LicUtils;
 
 import org.apache.commons.io.IOUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 public class ReqGenerator {
 
-	@SuppressWarnings("unused")
-	private static final Logger log = LoggerFactory.getLogger(ReqGenerator.class);
+	private static final Logger log = LogManager.getLogger(ReqGenerator.class);
 
 	private static ReqGenerator singleton = new ReqGenerator();
 
@@ -50,6 +49,17 @@
 		return req;
 	}
 
+	public RequestBean loadRequest(File requestFile) throws SeCurisException {
+		try {
+			String json = new String(Files.readAllBytes(Paths.get(requestFile.toURI())), "utf-8");
+			RequestBean req = JsonUtils.json2object(json, RequestBean.class);
+			return req;
+		} catch (IOException e) {
+			log.error("Request file {} was not found or is not accesible");
+			throw new SeCurisException("ERROR accesing request file: " + requestFile.getAbsolutePath(), e);
+		}
+	}
+
 	/**
 	 * Generate a request file using a {@link RequestBean}
 	 * 
diff --git a/src/main/java/net/curisit/securis/SignatureHelper.java b/src/main/java/net/curisit/securis/SignatureHelper.java
index e25f28e..bdd968f 100644
--- a/src/main/java/net/curisit/securis/SignatureHelper.java
+++ b/src/main/java/net/curisit/securis/SignatureHelper.java
@@ -26,10 +26,8 @@
 
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.net.util.Base64;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-//import net.curisit.common.ui.Dialogs;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 /**
  * digital Signature utilities
@@ -38,7 +36,7 @@
  */
 public class SignatureHelper {
 
-	private static final Logger log = LoggerFactory.getLogger(SignatureHelper.class);
+	private static final Logger log = LogManager.getLogger(SignatureHelper.class);
 	private static String AUX = "hEDhryRjs2QRE";
 
 	private static SignatureHelper singleton = new SignatureHelper();
@@ -58,6 +56,7 @@
 			log.info("JSON: {}", JsonUtils.toJSON(licBean));
 			signature.update(JsonUtils.toJSON(licBean).getBytes("utf-8"));
 			signature.update(AUX.getBytes("utf-8"));
+
 		} catch (SignatureException | UnsupportedEncodingException e) {
 			throw new SeCurisException("Error generating or validating signature", e);
 		}
@@ -140,7 +139,7 @@
 		metadata.put("Basdads", 5000);
 		metadata.put("aasdads", 5000);
 		metadata.put("maxInstances", 50);
-		LicenseBean lic = lg.generateLicense(req, metadata, new Date(new Date().getTime() + 24 * 3600 * 1000 * 10), "LIC-TEST-001");
+		LicenseBean lic = lg.generateLicense(req, metadata, new Date(new Date().getTime() + 24 * 3600 * 1000 * 10), "L01", "LIC-TEST-001");
 		System.out.println(JsonUtils.toJSON(lic, true));
 		System.out.println(JsonUtils.toJSON(new SignedLicenseBean(lic), true));
 	}
diff --git a/src/main/java/net/curisit/securis/beans/LicenseBean.java b/src/main/java/net/curisit/securis/beans/LicenseBean.java
index e009277..6986590 100644
--- a/src/main/java/net/curisit/securis/beans/LicenseBean.java
+++ b/src/main/java/net/curisit/securis/beans/LicenseBean.java
@@ -5,6 +5,7 @@
 import java.util.TreeMap;
 
 import org.codehaus.jackson.annotate.JsonIgnore;
+import org.codehaus.jackson.annotate.JsonProperty;
 import org.codehaus.jackson.annotate.JsonPropertyOrder;
 
 @JsonPropertyOrder(
@@ -45,6 +46,7 @@
 		return signature;
 	}
 
+	@JsonProperty("signature")
 	public void setSignature(String signature) {
 		this.signature = signature;
 	}
diff --git a/src/main/java/net/curisit/securis/utils/JsonUtils.java b/src/main/java/net/curisit/securis/utils/JsonUtils.java
index 397a0e0..15f6216 100644
--- a/src/main/java/net/curisit/securis/utils/JsonUtils.java
+++ b/src/main/java/net/curisit/securis/utils/JsonUtils.java
@@ -6,14 +6,14 @@
 
 import net.curisit.securis.SeCurisException;
 
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.codehaus.jackson.JsonParseException;
 import org.codehaus.jackson.JsonParser;
 import org.codehaus.jackson.JsonProcessingException;
 import org.codehaus.jackson.map.ObjectMapper;
 import org.codehaus.jackson.map.SerializationConfig;
 import org.codehaus.jackson.type.TypeReference;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Helper method to perform JSON tasks
@@ -22,7 +22,7 @@
  */
 public class JsonUtils {
 
-	private static final Logger log = LoggerFactory.getLogger(JsonUtils.class);
+	private static final Logger log = LogManager.getLogger(JsonUtils.class);
 
 	final private static ObjectMapper MAPPER = new ObjectMapper();
 
diff --git a/src/main/java/net/curisit/securis/utils/LicUtils.java b/src/main/java/net/curisit/securis/utils/LicUtils.java
index bb5a3e3..c3e19cd 100644
--- a/src/main/java/net/curisit/securis/utils/LicUtils.java
+++ b/src/main/java/net/curisit/securis/utils/LicUtils.java
@@ -4,12 +4,12 @@
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 public class LicUtils {
 
-	private static final Logger log = LoggerFactory.getLogger(LicUtils.class);
+	private static final Logger log = LogManager.getLogger(LicUtils.class);
 
 	public static String md5(String str) {
 		try {
diff --git a/src/main/java/net/curisit/securis/utils/Params.java b/src/main/java/net/curisit/securis/utils/Params.java
index b6479ee..5349a79 100644
--- a/src/main/java/net/curisit/securis/utils/Params.java
+++ b/src/main/java/net/curisit/securis/utils/Params.java
@@ -7,8 +7,8 @@
 import java.util.List;
 import java.util.Properties;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 /**
  * Class that loads and serves global config parameters.
@@ -17,7 +17,7 @@
  */
 public class Params {
 
-	private static Logger log = LoggerFactory.getLogger(Params.class);
+	private static Logger log = LogManager.getLogger(Params.class);
 
 	/**
 	 * Key used to store config file resource location. In a web application, can be set as initial parameter in a servlet loaded on startup
@@ -51,7 +51,7 @@
 		try {
 
 			params.load(fileis);
-			log.info("Params loaded OK");
+			log.debug("Params loaded OK from {}", resource);
 		} catch (IOException e) {
 			log.error("Error loading config file: " + e);
 			params = null;
diff --git a/src/main/resources/log4j.xml b/src/main/resources/log4j.xml
deleted file mode 100644
index 6298f36..0000000
--- a/src/main/resources/log4j.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-
-<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
-
-    <appender name="console" class="org.apache.log4j.ConsoleAppender">
-        <param name="Target" value="System.out"/>
-        <layout class="org.apache.log4j.PatternLayout">
-            <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
-        </layout>
-    </appender>
-
-    <logger name="net.curisit">
-        <level value="INFO"/>
-    </logger>
-
-    <logger name="sandbox">
-        <level value="DEBUG"/>
-    </logger>
-
-    <root>
-        <priority value ="INFO" />
-        <appender-ref ref="console" />
-    </root>
-
-</log4j:configuration>
\ No newline at end of file
diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..74f7466
--- /dev/null
+++ b/src/main/resources/log4j2.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration>
+  <Appenders>
+    <Console name="STDOUT" target="SYSTEM_OUT">
+      <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
+    </Console>
+  </Appenders>
+  <Loggers>
+    
+    <Logger name="net.curisit" level="info"/>
+    
+    <Root level="debug">
+      <AppenderRef ref="STDOUT"/>
+    </Root>
+  </Loggers>
+</Configuration>
diff --git a/src/main/resources/securis-client.properties b/src/main/resources/securis-client.properties
index a6a2ed3..2212669 100644
--- a/src/main/resources/securis-client.properties
+++ b/src/main/resources/securis-client.properties
@@ -1 +1,3 @@
-public.key.file = /Users/cproberto/Documents/wsPython/doky/tests/mykey.pub
\ No newline at end of file
+public.key.file = /Users/cproberto/Documents/wsPython/doky/tests/mykey.pub
+app.code = CurisIntegrity
+customer.code = ROB
\ No newline at end of file
diff --git a/src/patch/java/net/curisit/securis/LicenseGenerator.java b/src/patch/java/net/curisit/securis/LicenseGenerator.java
index cd696ff..72da188 100644
--- a/src/patch/java/net/curisit/securis/LicenseGenerator.java
+++ b/src/patch/java/net/curisit/securis/LicenseGenerator.java
@@ -8,21 +8,22 @@
 import java.nio.file.StandardOpenOption;
 import java.security.InvalidKeyException;
 import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
 import java.security.Signature;
 import java.security.SignatureException;
 import java.security.spec.InvalidKeySpecException;
 import java.text.MessageFormat;
 import java.util.Date;
 import java.util.Map;
+import java.util.TreeMap;
 
 import net.curisit.securis.beans.LicenseBean;
 import net.curisit.securis.beans.RequestBean;
+import net.curisit.securis.beans.SignedLicenseBean;
 import net.curisit.securis.utils.JsonUtils;
 
 import org.apache.commons.net.util.Base64;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 /**
  * License generator and signer
@@ -31,7 +32,7 @@
  */
 public class LicenseGenerator {
 
-	private static final Logger log = LoggerFactory.getLogger(LicenseGenerator.class);
+	private static final Logger log = LogManager.getLogger(LicenseGenerator.class);
 
 	private static LicenseGenerator singleton = new LicenseGenerator();
 
@@ -55,9 +56,10 @@
 	 * @return
 	 * @throws SeCurisException
 	 */
-	public LicenseBean generateLicense(RequestBean req, Map<String, Object> metadata, Date expirationDate, String licenseCode) throws SeCurisException {
+	public LicenseBean generateLicense(RequestBean req, Map<String, Object> metadata, Date expirationDate, String licenseType, String licenseCode) throws SeCurisException {
 		log.info(MessageFormat.format("Generating license: MAC: {0}, Customer code: {1}, AppCode: {2}", req.getMacAddresses(), req.getCustomerCode(), req.getAppCode()));
 		LicenseBean license = new LicenseBean(req);
+		license.setLicenseType(licenseType);
 		license.setLicenseCode(licenseCode);
 		license.setExpirationDate(expirationDate);
 		license.setMetadata(metadata);
@@ -74,9 +76,10 @@
 	 * @throws SeCurisException
 	 */
 	public void save(LicenseBean license, File file) throws SeCurisException {
+		SignedLicenseBean signedLic = new SignedLicenseBean(license);
 		byte[] json;
 		try {
-			json = JsonUtils.toJSON(license, true).getBytes("utf-8");
+			json = JsonUtils.toJSON(signedLic, true).getBytes("utf-8");
 			Files.write(Paths.get(file.toURI()), json, StandardOpenOption.CREATE);
 		} catch (UnsupportedEncodingException e) {
 			log.error("Error creating json doc from license: " + license, e);
@@ -128,7 +131,15 @@
 		throw new SeCurisException("License could not be generated");
 	}
 
-	public static void main(String[] args) throws IOException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchProviderException, InvalidKeyException, SignatureException {
+	public static void main(String[] args) throws SeCurisException {
+		Paths.get(new File("/Users/cproberto/Documents/wsCurisIT/SeCurisClient/license.req").toURI());
+
+		RequestBean req = ReqGenerator.getInstance().loadRequest(new File("/Users/cproberto/Documents/wsCurisIT/SeCurisClient/license.req"));
+		Map<String, Object> metadata = new TreeMap<>();
+		metadata.put("maxUsers", 23);
+		metadata.put("maxInstances", 12);
+		LicenseBean lic = LicenseGenerator.getInstance().generateLicense(req, metadata, new Date(new Date().getTime() + 3600 * 1000), "L01", "LIC-9812987123-12837129873");
+		LicenseGenerator.getInstance().save(lic, new File("/Users/cproberto/Documents/wsCurisIT/SeCurisClient/license.lic"));
 
 		System.out.print("os.arch: " + System.getProperty("os.arch") + " " + System.getProperty("os.name"));
 

--
Gitblit v1.3.2