From b77838d1005c45740968816c70088dff2ad655d3 Mon Sep 17 00:00:00 2001
From: rsanchez <rsanchez@curisit.net>
Date: Thu, 25 Sep 2014 16:41:34 +0000
Subject: [PATCH] #2021 fix - Added API services and some minor enhancements

---
 securis/src/main/java/net/curisit/securis/DefaultExceptionHandler.java                    |   13 +
 securis/src/main/java/net/curisit/securis/services/ApiResource.java                       |  205 +++++++++++++++++++++++++
 securis/src/main/java/net/curisit/securis/MainApp.java                                    |   43 +++++
 securis/src/main/java/net/curisit/securis/services/LicenseResource.java                   |  169 ---------------------
 securis/src/main/java/net/curisit/securis/services/exception/SeCurisServiceException.java |    8 +
 5 files changed, 266 insertions(+), 172 deletions(-)

diff --git a/securis/src/main/java/net/curisit/securis/DefaultExceptionHandler.java b/securis/src/main/java/net/curisit/securis/DefaultExceptionHandler.java
index 6d2ed11..fc29955 100644
--- a/securis/src/main/java/net/curisit/securis/DefaultExceptionHandler.java
+++ b/securis/src/main/java/net/curisit/securis/DefaultExceptionHandler.java
@@ -11,6 +11,7 @@
 import javax.ws.rs.ext.Provider;
 
 import net.curisit.securis.services.exception.SeCurisServiceException;
+import net.curisit.securis.services.exception.SeCurisServiceException.ErrorCodes;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -19,7 +20,9 @@
 public class DefaultExceptionHandler implements ExceptionMapper<Exception> {
     private static final Logger LOG = LogManager.getLogger(DefaultExceptionHandler.class);
 
-    public static final String ERROR_MESSAGE_HEADER = "X-SECURIS-ERROR";
+    public static final int DEFAULT_APP_ERROR_STATUS_CODE = 418;
+    public static final String ERROR_MESSAGE_HEADER = "X-SECURIS-ERROR-MSG";
+    public static final String ERROR_CODE_MESSAGE_HEADER = "X-SECURIS-ERROR-CODE";
 
     public DefaultExceptionHandler() {
         LOG.info("Creating DefaultExceptionHandler ");
@@ -34,13 +37,17 @@
     public Response toResponse(Exception e) {
         if (e instanceof ForbiddenException) {
             LOG.warn("Unauthorized access to {}, user: {}", request.getPathInfo(), bsc.getUserPrincipal());
-            return Response.status(Status.UNAUTHORIZED).header(ERROR_MESSAGE_HEADER, "Unathorized access to the application")
+            return Response.status(Status.UNAUTHORIZED)
+                    .header(ERROR_CODE_MESSAGE_HEADER, ErrorCodes.INVALID_CREDENTIALS)
+                    .header(ERROR_MESSAGE_HEADER, "Unathorized access to the application")
                     .type(MediaType.APPLICATION_JSON).build();
         }
 
         if (e instanceof SeCurisServiceException) {
             LOG.warn("SeCurisServiceException accessing to {}, user: {}", request.getPathInfo(), bsc.getUserPrincipal());
-            return Response.status(Status.fromStatusCode(((SeCurisServiceException) e).getStatus())).header(ERROR_MESSAGE_HEADER, e.getMessage())
+            return Response.status(DEFAULT_APP_ERROR_STATUS_CODE)
+                    .header(ERROR_CODE_MESSAGE_HEADER, ((SeCurisServiceException) e).getStatus())
+                    .header(ERROR_MESSAGE_HEADER, e.getMessage())
                     .type(MediaType.APPLICATION_JSON).build();
         }
 
diff --git a/securis/src/main/java/net/curisit/securis/MainApp.java b/securis/src/main/java/net/curisit/securis/MainApp.java
index affe104..96cadaa 100644
--- a/securis/src/main/java/net/curisit/securis/MainApp.java
+++ b/securis/src/main/java/net/curisit/securis/MainApp.java
@@ -1,6 +1,7 @@
 package net.curisit.securis;
 
 import java.net.URI;
+import java.security.KeyStore;
 import java.util.Properties;
 
 import javax.inject.Inject;
@@ -11,8 +12,14 @@
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
+import org.eclipse.jetty.http.HttpVersion;
 import org.eclipse.jetty.server.Handler;
+import org.eclipse.jetty.server.HttpConfiguration;
+import org.eclipse.jetty.server.HttpConnectionFactory;
+import org.eclipse.jetty.server.SecureRequestCustomizer;
 import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.ServerConnector;
+import org.eclipse.jetty.server.SslConnectionFactory;
 import org.eclipse.jetty.server.handler.ContextHandlerCollection;
 import org.eclipse.jetty.server.handler.ResourceHandler;
 import org.eclipse.jetty.servlet.ErrorPageErrorHandler;
@@ -20,6 +27,8 @@
 import org.eclipse.jetty.servlet.ServletContextHandler;
 import org.eclipse.jetty.servlet.ServletHolder;
 import org.eclipse.jetty.util.resource.Resource;
+import org.eclipse.jetty.util.ssl.SslContextFactory;
+import org.eclipse.jetty.util.thread.QueuedThreadPool;
 import org.jboss.resteasy.plugins.guice.GuiceResteasyBootstrapServletContextListener;
 import org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher;
 
@@ -29,6 +38,7 @@
 import com.google.inject.name.Names;
 import com.google.inject.persist.PersistFilter;
 import com.google.inject.persist.jpa.JpaPersistModule;
+import com.itextpdf.text.pdf.security.KeyStoreUtil;
 
 public class MainApp {
 
@@ -63,6 +73,9 @@
     private static void startServer(URI uri) throws Exception {
         System.out.println("Starting jetty...");
 
+        QueuedThreadPool threadPool = new QueuedThreadPool();
+        threadPool.setMaxThreads(50);
+        
         server = new Server(9997);
         ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
         context.setContextPath("/");
@@ -90,10 +103,40 @@
         contexts.setHandlers(new Handler[] {
                 staticResources, context
         });
+        
+        HttpConfiguration http_config = new HttpConfiguration();
+        http_config.setSecureScheme("https");
+        http_config.setSecurePort(8443);
+        http_config.setOutputBufferSize(32768);
+        http_config.setSendServerVersion(true);
+        http_config.setSendDateHeader(false);
+        
+        
+        HttpConfiguration https_config = new HttpConfiguration(http_config);
+        https_config.addCustomizer(new SecureRequestCustomizer());
+        
+        SslContextFactory sslContextFactory = new SslContextFactory();
+        sslContextFactory.setKeyStorePath("/Users/rob/.ssh/keys/securis.pkcs12");
+        sslContextFactory.setKeyStoreType("PKCS12");
+        sslContextFactory.setKeyStorePassword("curist3c");
+        //sslContextFactory.setCertAlias("1");
+//        sslContextFactory.setKeyManagerPassword("curist3c");
+//        sslContextFactory.setTrustStorePath("/Users/rob/.ssh/keys/keystore");
+//        sslContextFactory.setTrustStorePassword("curist3c");
+        sslContextFactory.checkKeyStore();
+        sslContextFactory.setNeedClientAuth(false);
+        LOG.info("Protocol: {}", sslContextFactory.getProtocol());
+        
+        ServerConnector sslConnector = new ServerConnector(server, new SslConnectionFactory(sslContextFactory,HttpVersion.HTTP_1_1.asString()), new HttpConnectionFactory(https_config));
+        sslConnector.setPort(8443);
+        sslConnector.setHost("securis.curistec.com");
+        server.addConnector( sslConnector );
 
         server.setHandler(context);
+        server.setStopAtShutdown(true);
         server.start();
         server.join();
+
         LOG.info("Started server in: http://127.0.0.1:9997/");
     }
 
diff --git a/securis/src/main/java/net/curisit/securis/services/ApiResource.java b/securis/src/main/java/net/curisit/securis/services/ApiResource.java
index 89ecae5..876410c 100644
--- a/securis/src/main/java/net/curisit/securis/services/ApiResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/ApiResource.java
@@ -1,18 +1,47 @@
 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;
 import javax.persistence.EntityManager;
+import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
+import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
+import net.curisit.integrity.commons.JsonUtils;
+import net.curisit.integrity.commons.Utils;
+import net.curisit.securis.LicenseGenerator;
+import net.curisit.securis.SeCurisException;
+import net.curisit.securis.beans.LicenseBean;
+import net.curisit.securis.beans.RequestBean;
+import net.curisit.securis.beans.SignedLicenseBean;
+import net.curisit.securis.db.License;
+import net.curisit.securis.db.LicenseType;
+import net.curisit.securis.db.Pack;
+import net.curisit.securis.security.BasicSecurityContext;
+import net.curisit.securis.security.Securable;
+import net.curisit.securis.services.exception.SeCurisServiceException;
+import net.curisit.securis.services.exception.SeCurisServiceException.ErrorCodes;
 import net.curisit.securis.utils.TokenHelper;
 
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.time.DateUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
+import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;
+
+import com.google.inject.persist.Transactional;
 
 /**
  * External API to be accessed by third parties
@@ -31,6 +60,9 @@
     @Inject
     Provider<EntityManager> emProvider;
 
+    @Inject
+    LicenseGenerator licenseGenerator;
+
     public ApiResource() {
     }
 
@@ -47,4 +79,177 @@
         return Response.ok("SeCuris API").build();
     }
 
+
+    /**
+     * Request a new license file based in a RequestBean object sent as parameter 
+     * @param mpfdi
+     * @param bsc
+     * @return
+     * @throws IOException
+     * @throws SeCurisServiceException
+     */
+    @POST
+    @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);
+        SignedLicenseBean signedLic = new SignedLicenseBean(lic);
+        return Response.ok(signedLic).build();
+    }
+    
+    /**
+     * Returns a License file in JSON format from an uploaded Request file
+     * @param mpfdi
+     * @param bsc
+     * @return
+     * @throws IOException
+     * @throws SeCurisServiceException
+     * @throws SeCurisException
+     */
+    @POST
+    @Path("/request")
+    @Consumes(MediaType.MULTIPART_FORM_DATA)
+    @Securable
+    @Produces({
+        MediaType.APPLICATION_JSON
+    })
+    @Transactional
+    @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 createFromRequest(req, bsc);
+    }
+
+    /**
+     * Create a new License file based in a previous one
+     * 
+     * @param request
+     * @param bsc
+     * @return
+     * @throws IOException
+     * @throws SeCurisServiceException
+     * @throws SeCurisException
+     */
+    @POST
+    @Path("/renew")
+    @Consumes(MediaType.APPLICATION_JSON)
+    //TODO: Enable this: @Securable
+    @Produces({
+        MediaType.APPLICATION_JSON
+    })
+    @Transactional
+    public Response renewFromPreviousLicense(LicenseBean previousLic, @Context BasicSecurityContext bsc) throws IOException, SeCurisServiceException, SeCurisException {
+        LOG.info("Renew license: {}", previousLic);
+
+        if (previousLic.getExpirationDate().after(DateUtils.addMonths(new Date(), 1))) {
+            throw new SeCurisServiceException(ErrorCodes.LICENSE_NOT_READY_FOR_RENEW, "The license is still valid, not ready for renew");
+        }
+
+        Map<String, Object> metadata = getLicenseMetadata(previousLic);
+        License licDB = getLicenseData(previousLic);
+        
+        Date expirationDate = licDB.getExpirationDate();
+        String licenseTypeCode = licDB.getPack().getLicenseType().getCode();
+        String licenseCode = licDB.getCode();
+        LicenseBean lic = licenseGenerator.generateLicense(previousLic, metadata, expirationDate, licenseTypeCode, licenseCode);
+        return Response.ok(lic).build();
+    }
+    
+    /**
+     * Returns a new License file in JSON format based in a previous license
+     * @param mpfdi
+     * @param bsc
+     * @return
+     * @throws IOException
+     * @throws SeCurisServiceException
+     * @throws SeCurisException
+     */
+    @POST
+    @Path("/renew")
+    @Consumes(MediaType.MULTIPART_FORM_DATA)
+    @Securable
+    @Produces({
+        MediaType.APPLICATION_JSON
+    })
+    @Transactional
+    @SuppressWarnings("unchecked")
+    public Response renewFromLicenseFile(MultipartFormDataInput mpfdi, @Context BasicSecurityContext bsc) throws IOException, SeCurisServiceException, SeCurisException {
+        LicenseBean lic = new LicenseBean();
+        // TODO: Add more license parameters
+        lic.setAppCode(mpfdi.getFormDataPart("appCode", String.class, null));
+        lic.setArch(mpfdi.getFormDataPart("arch", String.class, null));
+        lic.setCrcLogo(mpfdi.getFormDataPart("crcLogo", String.class, null));
+        lic.setCustomerCode(mpfdi.getFormDataPart("customerCode", String.class, null));
+        lic.setMacAddresses(mpfdi.getFormDataPart("macAddresses", List.class, null));
+        lic.setOsName(mpfdi.getFormDataPart("osName", String.class, null));
+        lic.setExpirationDate(mpfdi.getFormDataPart("expirationDate", Date.class, null));
+        LOG.info("Lic expires at: {}", lic.getExpirationDate());
+        if (lic.getExpirationDate().after(DateUtils.addMonths(new Date(), 1))) {
+            throw new SeCurisServiceException(ErrorCodes.LICENSE_NOT_READY_FOR_RENEW, "The license is still valid, not ready for renew");
+        }
+
+        return createFromRequest(lic, bsc);
+    }
+    
+    
+    
+    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;
+    }
+        
+    /**
+     * 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 = (Map<String, Object>)JsonUtils.json2map(metadataJson).get(req.getAppCode());
+            if (metadata == null)
+                throw new SeCurisException("App code in request is unknown: " + req.getAppCode());
+            metadata = new TreeMap<>(metadata);
+        } catch (IOException e) {
+            LOG.error("Error reading dummy metadata file", e);
+            throw new SeCurisException("Error reading dummy metadata file");
+        }
+        
+        return metadata;
+    }
+
+        
 }
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 bf3ecdc..4032651 100644
--- a/securis/src/main/java/net/curisit/securis/services/LicenseResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/LicenseResource.java
@@ -28,14 +28,10 @@
 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;
@@ -46,8 +42,6 @@
 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;
 
@@ -67,9 +61,6 @@
 
     @Inject
     Provider<EntityManager> emProvider;
-
-    @Inject
-    LicenseGenerator licenseGenerator;
 
     /**
      * 
@@ -290,167 +281,7 @@
         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 = (Map<String, Object>)JsonUtils.json2map(metadataJson).get(req.getAppCode());
-            if (metadata == null)
-                throw new SeCurisException("App code in request is unknown: " + req.getAppCode());
-            metadata = new TreeMap<>(metadata);
-        } 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("/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();
-    }
-    
-    /**
-     * Returns a License file in JSON format from an uploaded Request file
-     * @param mpfdi
-     * @param bsc
-     * @return
-     * @throws IOException
-     * @throws SeCurisServiceException
-     * @throws SeCurisException
-     */
-    @POST
-    @Path("/request")
-    @Consumes(MediaType.MULTIPART_FORM_DATA)
-    @Securable
-    @Produces({
-        MediaType.APPLICATION_JSON
-    })
-    @Transactional
-    @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 createFromRequest(req, bsc);
-    }
-
-    /**
-     * Create a new License file based in a previous one
-     * 
-     * @param request
-     * @param bsc
-     * @return
-     * @throws IOException
-     * @throws SeCurisServiceException
-     * @throws SeCurisException
-     */
-    @POST
-    @Path("/renew")
-    @Consumes(MediaType.APPLICATION_JSON)
-    //TODO: Enable this: @Securable
-    @Produces({
-        MediaType.APPLICATION_JSON
-    })
-    @Transactional
-    public Response renewFromPreviousLicense(LicenseBean previousLic, @Context BasicSecurityContext bsc) throws IOException, SeCurisServiceException, SeCurisException {
-        LOG.info("Request to get license: {}", previousLic);
-
-        Map<String, Object> metadata = getLicenseMetadata(previousLic);
-        License licDB = getLicenseData(previousLic);
-        
-        Date expirationDate = licDB.getExpirationDate();
-        String licenseTypeCode = licDB.getPack().getLicenseType().getCode();
-        String licenseCode = licDB.getCode();
-        LicenseBean lic = licenseGenerator.generateLicense(previousLic, metadata, expirationDate, licenseTypeCode, licenseCode);
-        return Response.ok(lic).build();
-    }
-    
-    /**
-     * Returns a new License file in JSON format based in a previous license
-     * @param mpfdi
-     * @param bsc
-     * @return
-     * @throws IOException
-     * @throws SeCurisServiceException
-     * @throws SeCurisException
-     */
-    @POST
-    @Path("/renew")
-    @Consumes(MediaType.MULTIPART_FORM_DATA)
-    @Securable
-    @Produces({
-        MediaType.APPLICATION_JSON
-    })
-    @Transactional
-    @SuppressWarnings("unchecked")
-    public Response renewFromLicenseFile(MultipartFormDataInput mpfdi, @Context BasicSecurityContext bsc) throws IOException, SeCurisServiceException, SeCurisException {
-        LicenseBean lic = new LicenseBean();
-        // TODO: Add more license parameters
-        lic.setAppCode(mpfdi.getFormDataPart("appCode", String.class, null));
-        lic.setArch(mpfdi.getFormDataPart("arch", String.class, null));
-        lic.setCrcLogo(mpfdi.getFormDataPart("crcLogo", String.class, null));
-        lic.setCustomerCode(mpfdi.getFormDataPart("customerCode", String.class, null));
-        lic.setMacAddresses(mpfdi.getFormDataPart("macAddresses", List.class, null));
-        lic.setOsName(mpfdi.getFormDataPart("osName", String.class, null));
-
-        return createFromRequest(lic, bsc);
-    }
-    
-    
-    
     
     @PUT
     @POST
diff --git a/securis/src/main/java/net/curisit/securis/services/exception/SeCurisServiceException.java b/securis/src/main/java/net/curisit/securis/services/exception/SeCurisServiceException.java
index 2b49081..49f7de5 100644
--- a/securis/src/main/java/net/curisit/securis/services/exception/SeCurisServiceException.java
+++ b/securis/src/main/java/net/curisit/securis/services/exception/SeCurisServiceException.java
@@ -20,4 +20,12 @@
 	 */
     private static final long serialVersionUID = 1L;
 
+    public static class ErrorCodes {
+        public static int UNEXPECTED_ERROR = 1000;
+        public static int INVALID_CREDENTIALS = 1001;
+        public static int UNAUTHORIZED_ACCESS = 1002;
+        
+        public static int INVALID_LICENSE_REQUEST_DATA = 1100;
+        public static int LICENSE_NOT_READY_FOR_RENEW = 1101;
+    }
 }

--
Gitblit v1.3.2