From 36edce38f6b17f73322fa38404d6e01818a44fd2 Mon Sep 17 00:00:00 2001
From: rsanchez <rsanchez@curisit.net>
Date: Thu, 11 Dec 2014 19:08:16 +0000
Subject: [PATCH] #2140 fix - Added renew period to pack, change on DB schema, fixed pack selection in listing, upgrade angular to 1.3.6 and other minor issues

---
 securis/src/main/java/net/curisit/securis/services/helpers/LicenseHelper.java |   81 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 81 insertions(+), 0 deletions(-)

diff --git a/securis/src/main/java/net/curisit/securis/services/helpers/LicenseHelper.java b/securis/src/main/java/net/curisit/securis/services/helpers/LicenseHelper.java
index e192200..f927a78 100644
--- a/securis/src/main/java/net/curisit/securis/services/helpers/LicenseHelper.java
+++ b/securis/src/main/java/net/curisit/securis/services/helpers/LicenseHelper.java
@@ -4,17 +4,25 @@
 import java.io.IOException;
 import java.nio.file.Files;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
 
 import javax.inject.Inject;
 import javax.inject.Singleton;
 import javax.persistence.EntityManager;
+import javax.persistence.TypedQuery;
 
+import net.curisit.securis.beans.LicenseBean;
 import net.curisit.securis.db.License;
 import net.curisit.securis.db.LicenseHistory;
 import net.curisit.securis.db.LicenseStatus;
+import net.curisit.securis.db.Pack;
+import net.curisit.securis.db.PackMetadata;
 import net.curisit.securis.db.User;
 import net.curisit.securis.security.BasicSecurityContext;
 import net.curisit.securis.services.exception.SeCurisServiceException;
+import net.curisit.securis.services.exception.SeCurisServiceException.ErrorCodes;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.logging.log4j.LogManager;
@@ -23,7 +31,10 @@
 @Singleton
 public class LicenseHelper {
 
+    @SuppressWarnings("unused")
     private static final Logger LOG = LogManager.getLogger(LicenseHelper.class);
+    private static final long MS_PER_DAY = 24L * 3600L * 1000L;
+    private static final int DEFAULT_VALID_LIC_PERIOD = 7;
 
     @Inject
     private UserHelper userHelper;
@@ -41,7 +52,25 @@
         em.persist(lic);
 
         em.persist(createLicenseHistoryAction(lic, userHelper.getUser(bsc, em), LicenseHistory.Actions.CANCEL, "Cancellation reason: " + reason));
+    }
 
+    /**
+     * Validates that the passed license is still valid
+     * 
+     * @param lic
+     * @param reason
+     * @param bsc
+     * @param em
+     * @throws SeCurisServiceException
+     */
+    public void assertLicenseStatusIsActive(LicenseBean licBean, EntityManager em) throws SeCurisServiceException {
+        License lic = License.findLicenseByCode(licBean.getLicenseCode(), em);
+        if (lic == null) {
+            throw new SeCurisServiceException(ErrorCodes.NOT_FOUND, "Current license code doesn't exist");
+        }
+        if (lic.getStatus() != LicenseStatus.ACTIVE && lic.getStatus() != LicenseStatus.PRE_ACTIVE) {
+            throw new SeCurisServiceException(ErrorCodes.INVALID_DATA, "Current license in not active");
+        }
     }
 
     public LicenseHistory createLicenseHistoryAction(License lic, User user, String action, String comments) {
@@ -58,10 +87,62 @@
         return createLicenseHistoryAction(lic, user, action, null);
     }
 
+    /**
+     * Create a license file in a temporary directory
+     * 
+     * @param lic
+     * @param licFileName
+     * @return
+     * @throws IOException
+     */
     public File createTemporaryLicenseFile(License lic, String licFileName) throws IOException {
         File f = Files.createTempDirectory("securis-server").toFile();
         f = new File(f, licFileName);
         FileUtils.writeStringToFile(f, lic.getLicenseData());
         return f;
     }
+
+    public Map<String, Object> extractPackMetadata(Set<PackMetadata> packMetadata) {
+        Map<String, Object> metadata = new HashMap<>();
+        for (PackMetadata md : packMetadata) {
+            metadata.put(md.getKey(), md.getValue());
+        }
+
+        return metadata;
+    }
+
+    /**
+     * If the action is a renew the expiration date is got form pack end valid
+     * date, if the action is a pre-activation the expiration date is calculated
+     * using the pack default valid period
+     * 
+     * @param pack
+     * @param isPreActivation
+     * @return
+     */
+    public Date getExpirationDateFromPack(Pack pack, boolean isPreActivation) {
+        Long validPeriod;
+        if (isPreActivation) {
+            validPeriod = pack.getPreactivationValidPeriod() * MS_PER_DAY;
+        } else {
+            validPeriod = pack.getRenewValidPeriod() * MS_PER_DAY;
+        }
+        Date expirationDate = new Date(new Date().getTime() + validPeriod);
+        return expirationDate;
+    }
+
+    /**
+     * Get the next free code suffis for a given Pack
+     * 
+     * @param packId
+     * @param em
+     * @return
+     */
+    public int getNextCodeSuffix(int packId, EntityManager em) {
+        TypedQuery<Integer> query = em.createNamedQuery("last-code-suffix-used-in-pack", Integer.class);
+        query.setParameter("packId", packId);
+        Integer lastCodeSuffix = query.getSingleResult();
+        return lastCodeSuffix == null ? 1 : lastCodeSuffix + 1;
+    }
+
 }

--
Gitblit v1.3.2