From 7d9055a4985cdad24c23dfe53a5b0d2ba046bd7c Mon Sep 17 00:00:00 2001
From: Roberto Sánchez <roberto.sanchez@curisit.net>
Date: Fri, 19 Sep 2014 14:50:56 +0000
Subject: [PATCH] #396 feature - Added license generation from request file/content
---
securis/pom.xml | 8 +-
securis/src/main/java/net/curisit/securis/services/LicenseResource.java | 129 ++++++++++++++++++++++++++++++++++++++----
securis/src/main/java/net/curisit/securis/LicenseGenerator.java | 10 ++-
3 files changed, 125 insertions(+), 22 deletions(-)
diff --git a/securis/pom.xml b/securis/pom.xml
index 37c405a..a9933b3 100644
--- a/securis/pom.xml
+++ b/securis/pom.xml
@@ -24,22 +24,22 @@
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-guice</artifactId>
- <version>3.0.5.Final</version>
+ <version>3.0.9.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson-provider</artifactId>
- <version>3.0.5.Final</version>
+ <version>3.0.9.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-multipart-provider</artifactId>
- <version>3.0.5.Final</version>
+ <version>3.0.9.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
- <version>3.0.5.Final</version>
+ <version>3.0.9.Final</version>
</dependency>
<dependency>
<groupId>net.curisit</groupId>
diff --git a/securis/src/patch/java/net/curisit/securis/LicenseGenerator.java b/securis/src/main/java/net/curisit/securis/LicenseGenerator.java
similarity index 95%
rename from securis/src/patch/java/net/curisit/securis/LicenseGenerator.java
rename to securis/src/main/java/net/curisit/securis/LicenseGenerator.java
index 272a652..74d170d 100644
--- a/securis/src/patch/java/net/curisit/securis/LicenseGenerator.java
+++ b/securis/src/main/java/net/curisit/securis/LicenseGenerator.java
@@ -26,19 +26,19 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import com.google.inject.Singleton;
+
/**
* License generator and signer
*
* @author roberto <roberto.sanchez@curisit.net>
*/
+@Singleton
public class LicenseGenerator {
private static final Logger LOG = LogManager.getLogger(LicenseGenerator.class);
private static LicenseGenerator singleton = new LicenseGenerator();
-
- private LicenseGenerator() {
- }
public static LicenseGenerator getInstance() {
return singleton;
@@ -113,7 +113,7 @@
Signature signature;
try {
signature = Signature.getInstance(SignatureHelper.SIGNATURE_GENERATION_ALGORITHM);
- signature.initSign(sh.generatePrivateKey(new File("/Users/cproberto/Documents/wsPython/doky/tests/securis_private_key.pkcs8")));
+ signature.initSign(sh.generatePrivateKey(new File(System.getProperty("user.home") + File.separator + ".SeCuris" + File.separator + "keys" + File.separator + "securis_private_key.pkcs8")));
sh.prepareSignature(signature, licBean);
@@ -147,6 +147,7 @@
metadata.put("timeThreshold", 0);
metadata.put("datasetPrefix", "BP");
metadata.put("extendedMode", true);
+
Date expirationDate = new Date(new Date().getTime() + (1000L * 3600 * 24 * 365 * 10));
LicenseBean lic = LicenseGenerator.getInstance().generateLicense(req, metadata, expirationDate, "CI-01", "LIC-CURISTEC-0001");
LicenseGenerator.getInstance().save(lic, new File("/Users/cproberto/Desktop/AxelLicCI.lic"));
@@ -155,3 +156,4 @@
}
}
+
diff --git a/securis/src/main/java/net/curisit/securis/services/LicenseResource.java b/securis/src/main/java/net/curisit/securis/services/LicenseResource.java
index 8869c03..ba65000 100644
--- a/securis/src/main/java/net/curisit/securis/services/LicenseResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/LicenseResource.java
@@ -1,8 +1,11 @@
package net.curisit.securis.services;
+import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
import javax.inject.Inject;
import javax.inject.Provider;
@@ -22,10 +25,17 @@
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
+import net.curisit.integrity.commons.JsonUtils;
import net.curisit.integrity.commons.Utils;
import net.curisit.securis.DefaultExceptionHandler;
+import net.curisit.securis.LicenseGenerator;
+import net.curisit.securis.ReqGenerator;
+import net.curisit.securis.SeCurisException;
+import net.curisit.securis.beans.LicenseBean;
+import net.curisit.securis.beans.RequestBean;
import net.curisit.securis.db.License;
import net.curisit.securis.db.LicenseHistory;
+import net.curisit.securis.db.LicenseType;
import net.curisit.securis.db.Pack;
import net.curisit.securis.db.User;
import net.curisit.securis.security.BasicSecurityContext;
@@ -33,8 +43,10 @@
import net.curisit.securis.services.exception.SeCurisServiceException;
import net.curisit.securis.utils.TokenHelper;
+import org.apache.commons.io.IOUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.bouncycastle.jce.provider.asymmetric.ec.ECUtil;
import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;
import com.google.inject.persist.Transactional;
@@ -56,8 +68,8 @@
@Inject
Provider<EntityManager> emProvider;
- public LicenseResource() {
- }
+ @Inject
+ LicenseGenerator licenseGenerator;
/**
*
@@ -138,6 +150,13 @@
return Response.ok(lic.getLicenseData()).build();
}
+ /**
+ * Activate the given license
+ * @param licId
+ * @param bsc
+ * @return
+ * @throws SeCurisServiceException
+ */
@PUT
@POST
@Path("/{licId}/activate")
@@ -166,6 +185,13 @@
return Response.ok(lic).build();
}
+ /**
+ * Send license file by email to the organization
+ * @param licId
+ * @param bsc
+ * @return
+ * @throws SeCurisServiceException
+ */
@PUT
@POST
@Path("/{licId}/send")
@@ -188,6 +214,13 @@
return Response.ok(lic).build();
}
+ /**
+ * Cancel given license
+ * @param licId
+ * @param bsc
+ * @return
+ * @throws SeCurisServiceException
+ */
@PUT
@POST
@Path("/{licId}/cancel")
@@ -246,7 +279,7 @@
User createdBy = getUser(bsc.getUserPrincipal().getName(), em);
- // ODO: Manage status if request data is set
+ // TODO: Manage status if request data is set
lic.setCreatedBy(createdBy);
lic.setStatus(License.Status.CREATED);
lic.setCreationTimestamp(new Date());
@@ -256,27 +289,95 @@
return Response.ok(lic).build();
}
-
+
+ /**
+ * Extract the corresponding metadata for the Request license given
+ * @param req
+ * @return
+ * @throws SeCurisException
+ */
+ @SuppressWarnings("unchecked")
+ private Map<String, Object> getLicenseMetadata(RequestBean req) throws SeCurisException {
+ // TODO: The dummy metadata file is temporal, this info should be read from DB
+ File dummyMetadata = new File(System.getProperty("user.home") + File.separator + ".SeCuris" + File.separator + "dummy_metadata.json");
+ Map<String, Object> metadata = null;
+ try {
+ String metadataJson = IOUtils.toString(dummyMetadata.toURI());
+ metadata = new TreeMap<>((Map<String, Object>)JsonUtils.json2map(metadataJson).get(req.getAppCode()));
+ } catch (IOException e) {
+ LOG.error("Error reading dummy metadata file", e);
+ throw new SeCurisException("Error reading dummy metadata file");
+ }
+
+ return metadata;
+ }
+ private License getLicenseData(RequestBean req) throws SeCurisException {
+ // TODO: The dummy expiration date is temporal, this info should be read from DB
+ License lic = new License();
+ lic.setExpirationDate(new Date(new Date().getTime() + (1000L * 3600 * 24 * 365 * 10)));
+ lic.setCode(req.getAppCode() + "-LIC-INTERNAL");
+ LicenseType lt = new LicenseType();
+ lt.setCode("TYPE-" + req.getAppCode());
+ Pack pack = new Pack();
+ pack.setLicenseType(lt);
+ lic.setPack(pack);
+ return lic;
+ }
+
+ /**
+ * Request a new license file based in a RequestBean object sent as parameter
+ * @param mpfdi
+ * @param bsc
+ * @return
+ * @throws IOException
+ * @throws SeCurisServiceException
+ */
@POST
- @Path("/")
+ @Path("/request")
+ @Consumes(MediaType.APPLICATION_JSON)
+ //TODO: Enable this: @Securable
+ @Produces({
+ MediaType.APPLICATION_JSON
+ })
+ @Transactional
+ public Response createFromRequest(RequestBean request, @Context BasicSecurityContext bsc) throws IOException, SeCurisServiceException, SeCurisException {
+ LOG.info("Request to get license: {}", request);
+
+ Map<String, Object> metadata = getLicenseMetadata(request);
+ License licDB = getLicenseData(request);
+
+ Date expirationDate = licDB.getExpirationDate();
+ String licenseTypeCode = licDB.getPack().getLicenseType().getCode();
+ String licenseCode = licDB.getCode();
+ LicenseBean lic = licenseGenerator.generateLicense(request, metadata, expirationDate, licenseTypeCode, licenseCode);
+ return Response.ok(lic).build();
+ }
+
+ @POST
+ @Path("/request")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Securable
@Produces({
MediaType.APPLICATION_JSON
})
@Transactional
- public Response createWithFile(MultipartFormDataInput mpfdi, @Context BasicSecurityContext bsc) throws IOException, SeCurisServiceException {
- License lic = new License();
- lic.setCode(mpfdi.getFormDataPart("code", String.class, null));
- lic.setRequestData(mpfdi.getFormDataPart("request_data", String.class, null));
- lic.setPackId(mpfdi.getFormDataPart("pack_id", Integer.class, null));
- lic.setFullName(mpfdi.getFormDataPart("full_name", String.class, null));
- lic.setEmail(mpfdi.getFormDataPart("email", String.class, null));
- lic.setComments(mpfdi.getFormDataPart("comments", String.class, null));
+ @SuppressWarnings("unchecked")
+ public Response createFromRequestFile(MultipartFormDataInput mpfdi, @Context BasicSecurityContext bsc) throws IOException, SeCurisServiceException, SeCurisException {
+ RequestBean req = new RequestBean();
+ req.setAppCode(mpfdi.getFormDataPart("appCode", String.class, null));
+ req.setArch(mpfdi.getFormDataPart("arch", String.class, null));
+ req.setCrcLogo(mpfdi.getFormDataPart("crcLogo", String.class, null));
+ req.setCustomerCode(mpfdi.getFormDataPart("customerCode", String.class, null));
+ req.setMacAddresses(mpfdi.getFormDataPart("macAddresses", List.class, null));
+ req.setOsName(mpfdi.getFormDataPart("osName", String.class, null));
- return create(lic, bsc);
+ return createFromRequest(req, bsc);
}
+
+
+
+
@PUT
@POST
@Path("/{licId}")
--
Gitblit v1.3.2