From 85e2a65874fcd41771b30ebfff93f86edd4f32b3 Mon Sep 17 00:00:00 2001
From: rsanchez <rsanchez@curisit.net>
Date: Mon, 01 Dec 2014 14:59:34 +0000
Subject: [PATCH] #396 fix - Added automated license code generation and other minor fixes

---
 securis/src/main/java/net/curisit/securis/services/LicenseResource.java |   41 ++++++++++++++++++++++++++++-------------
 1 files changed, 28 insertions(+), 13 deletions(-)

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 927122e..d3165b4 100644
--- a/securis/src/main/java/net/curisit/securis/services/LicenseResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/LicenseResource.java
@@ -2,7 +2,6 @@
 
 import java.io.File;
 import java.io.IOException;
-import java.nio.file.Files;
 import java.text.MessageFormat;
 import java.util.Date;
 import java.util.HashMap;
@@ -55,6 +54,7 @@
 import net.curisit.securis.utils.Config;
 import net.curisit.securis.utils.EmailManager;
 import net.curisit.securis.utils.JsonUtils;
+import net.curisit.securis.utils.LicUtils;
 import net.curisit.securis.utils.TokenHelper;
 
 import org.apache.commons.io.IOUtils;
@@ -320,6 +320,23 @@
         return Response.ok(lic).build();
     }
 
+    /**
+     * Check if there is some pack with the same code
+     * 
+     * @param code
+     *            Pack code
+     * @param em
+     *            DB session object
+     * @return <code>true</code> if code is already used, <code>false</code>
+     *         otherwise
+     */
+    private boolean checkIfCodeExists(String code, EntityManager em) {
+        TypedQuery<License> query = em.createNamedQuery("license-by-code", License.class);
+        query.setParameter("code", code);
+        int lics = query.getResultList().size();
+        return lics > 0;
+    }
+
     @POST
     @Path("/")
     @Consumes(MediaType.APPLICATION_JSON)
@@ -330,6 +347,14 @@
     @Transactional
     public Response create(License lic, @Context BasicSecurityContext bsc) throws SeCurisServiceException {
         EntityManager em = emProvider.get();
+
+        if (checkIfCodeExists(lic.getCode(), em)) {
+            throw new SeCurisServiceException(ErrorCodes.INVALID_DATA, "The license code is already used in an existing license");
+        }
+        if (!LicUtils.checkValidLicenseCodeCrc(lic.getCode())) {
+            throw new SeCurisServiceException(ErrorCodes.INVALID_DATA, "The license code is not valid");
+        }
+
         Pack pack = null;
         if (lic.getPackId() != null) {
             pack = em.find(Pack.class, lic.getPackId());
@@ -376,18 +401,16 @@
         } else {
             lic.setStatus(LicenseStatus.CREATED);
         }
+        lic.setCodeSuffix(LicUtils.getLicenseCodeSuffix(lic.getCode()));
         lic.setCreatedBy(createdBy);
         lic.setCreationTimestamp(new Date());
         lic.setModificationTimestamp(lic.getCreationTimestamp());
-        LOG.info("LICENSE: {}", lic);
+
         em.persist(lic);
-        LOG.info("LICENSE on HISTORY create");
         em.persist(licenseHelper.createLicenseHistoryAction(lic, createdBy, LicenseHistory.Actions.CREATE));
         if (lic.getStatus() == LicenseStatus.ACTIVE) {
-            LOG.info("LICENSE ACTIVATION on HISTORY create");
             em.persist(licenseHelper.createLicenseHistoryAction(lic, createdBy, LicenseHistory.Actions.CREATE, "Activated on creation"));
         }
-        LOG.info("LICENSE created oK ??");
 
         return Response.ok(lic).build();
     }
@@ -599,14 +622,6 @@
             throw new SeCurisServiceException(Status.UNAUTHORIZED.getStatusCode(), "Unathorized access to license data");
         }
         return lic;
-    }
-
-    public static void main(String[] args) throws IOException {
-        File f = Files.createTempDirectory("securis-server").toFile();
-
-        LOG.info("f: {}", f);
-        f = new File(f, "config-server.lic");
-        LOG.info("f: {}", f);
     }
 
     @JsonAutoDetect

--
Gitblit v1.3.2