securis/src/main/java/net/curisit/securis/DefaultExceptionHandler.java
.. .. @@ -11,6 +11,7 @@ 11 11 import javax.ws.rs.ext.Provider; 12 12 13 13 import net.curisit.securis.services.exception.SeCurisServiceException; 14 +import net.curisit.securis.services.exception.SeCurisServiceException.ErrorCodes;14 15 15 16 import org.apache.logging.log4j.LogManager; 16 17 import org.apache.logging.log4j.Logger; .. .. @@ -19,7 +20,9 @@ 19 20 public class DefaultExceptionHandler implements ExceptionMapper<Exception> { 20 21 private static final Logger LOG = LogManager.getLogger(DefaultExceptionHandler.class); 21 22 22 - public static final String ERROR_MESSAGE_HEADER = "X-SECURIS-ERROR";23 + public static final int DEFAULT_APP_ERROR_STATUS_CODE = 418;24 + public static final String ERROR_MESSAGE_HEADER = "X-SECURIS-ERROR-MSG";25 + public static final String ERROR_CODE_MESSAGE_HEADER = "X-SECURIS-ERROR-CODE";23 26 24 27 public DefaultExceptionHandler() { 25 28 LOG.info("Creating DefaultExceptionHandler "); .. .. @@ -34,13 +37,17 @@ 34 37 public Response toResponse(Exception e) { 35 38 if (e instanceof ForbiddenException) { 36 39 LOG.warn("Unauthorized access to {}, user: {}", request.getPathInfo(), bsc.getUserPrincipal()); 37 - return Response.status(Status.UNAUTHORIZED).header(ERROR_MESSAGE_HEADER, "Unathorized access to the application")40 + return Response.status(Status.UNAUTHORIZED)41 + .header(ERROR_CODE_MESSAGE_HEADER, ErrorCodes.INVALID_CREDENTIALS)42 + .header(ERROR_MESSAGE_HEADER, "Unathorized access to the application")38 43 .type(MediaType.APPLICATION_JSON).build(); 39 44 } 40 45 41 46 if (e instanceof SeCurisServiceException) { 42 47 LOG.warn("SeCurisServiceException accessing to {}, user: {}", request.getPathInfo(), bsc.getUserPrincipal()); 43 - return Response.status(Status.fromStatusCode(((SeCurisServiceException) e).getStatus())).header(ERROR_MESSAGE_HEADER, e.getMessage())48 + return Response.status(DEFAULT_APP_ERROR_STATUS_CODE)49 + .header(ERROR_CODE_MESSAGE_HEADER, ((SeCurisServiceException) e).getStatus())50 + .header(ERROR_MESSAGE_HEADER, e.getMessage())44 51 .type(MediaType.APPLICATION_JSON).build(); 45 52 } 46 53 securis/src/main/java/net/curisit/securis/MainApp.java
.. .. @@ -1,6 +1,7 @@ 1 1 package net.curisit.securis; 2 2 3 3 import java.net.URI; 4 +import java.security.KeyStore;4 5 import java.util.Properties; 5 6 6 7 import javax.inject.Inject; .. .. @@ -11,8 +12,14 @@ 11 12 12 13 import org.apache.logging.log4j.LogManager; 13 14 import org.apache.logging.log4j.Logger; 15 +import org.eclipse.jetty.http.HttpVersion;14 16 import org.eclipse.jetty.server.Handler; 17 +import org.eclipse.jetty.server.HttpConfiguration;18 +import org.eclipse.jetty.server.HttpConnectionFactory;19 +import org.eclipse.jetty.server.SecureRequestCustomizer;15 20 import org.eclipse.jetty.server.Server; 21 +import org.eclipse.jetty.server.ServerConnector;22 +import org.eclipse.jetty.server.SslConnectionFactory;16 23 import org.eclipse.jetty.server.handler.ContextHandlerCollection; 17 24 import org.eclipse.jetty.server.handler.ResourceHandler; 18 25 import org.eclipse.jetty.servlet.ErrorPageErrorHandler; .. .. @@ -20,6 +27,8 @@ 20 27 import org.eclipse.jetty.servlet.ServletContextHandler; 21 28 import org.eclipse.jetty.servlet.ServletHolder; 22 29 import org.eclipse.jetty.util.resource.Resource; 30 +import org.eclipse.jetty.util.ssl.SslContextFactory;31 +import org.eclipse.jetty.util.thread.QueuedThreadPool;23 32 import org.jboss.resteasy.plugins.guice.GuiceResteasyBootstrapServletContextListener; 24 33 import org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher; 25 34 .. .. @@ -29,6 +38,7 @@ 29 38 import com.google.inject.name.Names; 30 39 import com.google.inject.persist.PersistFilter; 31 40 import com.google.inject.persist.jpa.JpaPersistModule; 41 +import com.itextpdf.text.pdf.security.KeyStoreUtil;32 42 33 43 public class MainApp { 34 44 .. .. @@ -63,6 +73,9 @@ 63 73 private static void startServer(URI uri) throws Exception { 64 74 System.out.println("Starting jetty..."); 65 75 76 + QueuedThreadPool threadPool = new QueuedThreadPool();77 + threadPool.setMaxThreads(50);78 +66 79 server = new Server(9997); 67 80 ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); 68 81 context.setContextPath("/"); .. .. @@ -90,10 +103,40 @@ 90 103 contexts.setHandlers(new Handler[] { 91 104 staticResources, context 92 105 }); 106 +107 + HttpConfiguration http_config = new HttpConfiguration();108 + http_config.setSecureScheme("https");109 + http_config.setSecurePort(8443);110 + http_config.setOutputBufferSize(32768);111 + http_config.setSendServerVersion(true);112 + http_config.setSendDateHeader(false);113 +114 +115 + HttpConfiguration https_config = new HttpConfiguration(http_config);116 + https_config.addCustomizer(new SecureRequestCustomizer());117 +118 + SslContextFactory sslContextFactory = new SslContextFactory();119 + sslContextFactory.setKeyStorePath("/Users/rob/.ssh/keys/securis.pkcs12");120 + sslContextFactory.setKeyStoreType("PKCS12");121 + sslContextFactory.setKeyStorePassword("curist3c");122 + //sslContextFactory.setCertAlias("1");123 +// sslContextFactory.setKeyManagerPassword("curist3c");124 +// sslContextFactory.setTrustStorePath("/Users/rob/.ssh/keys/keystore");125 +// sslContextFactory.setTrustStorePassword("curist3c");126 + sslContextFactory.checkKeyStore();127 + sslContextFactory.setNeedClientAuth(false);128 + LOG.info("Protocol: {}", sslContextFactory.getProtocol());129 +130 + ServerConnector sslConnector = new ServerConnector(server, new SslConnectionFactory(sslContextFactory,HttpVersion.HTTP_1_1.asString()), new HttpConnectionFactory(https_config));131 + sslConnector.setPort(8443);132 + sslConnector.setHost("securis.curistec.com");133 + server.addConnector( sslConnector );93 134 94 135 server.setHandler(context); 136 + server.setStopAtShutdown(true);95 137 server.start(); 96 138 server.join(); 139 +97 140 LOG.info("Started server in: http://127.0.0.1:9997/"); 98 141 } 99 142 securis/src/main/java/net/curisit/securis/services/ApiResource.java
.. .. @@ -1,18 +1,47 @@ 1 1 package net.curisit.securis.services; 2 2 3 +import java.io.File;4 +import java.io.IOException;5 +import java.util.Date;6 +import java.util.List;7 +import java.util.Map;8 +import java.util.TreeMap;9 +3 10 import javax.inject.Inject; 4 11 import javax.inject.Provider; 5 12 import javax.persistence.EntityManager; 13 +import javax.ws.rs.Consumes;6 14 import javax.ws.rs.GET; 15 +import javax.ws.rs.POST;7 16 import javax.ws.rs.Path; 8 17 import javax.ws.rs.Produces; 18 +import javax.ws.rs.core.Context;9 19 import javax.ws.rs.core.MediaType; 10 20 import javax.ws.rs.core.Response; 11 21 22 +import net.curisit.integrity.commons.JsonUtils;23 +import net.curisit.integrity.commons.Utils;24 +import net.curisit.securis.LicenseGenerator;25 +import net.curisit.securis.SeCurisException;26 +import net.curisit.securis.beans.LicenseBean;27 +import net.curisit.securis.beans.RequestBean;28 +import net.curisit.securis.beans.SignedLicenseBean;29 +import net.curisit.securis.db.License;30 +import net.curisit.securis.db.LicenseType;31 +import net.curisit.securis.db.Pack;32 +import net.curisit.securis.security.BasicSecurityContext;33 +import net.curisit.securis.security.Securable;34 +import net.curisit.securis.services.exception.SeCurisServiceException;35 +import net.curisit.securis.services.exception.SeCurisServiceException.ErrorCodes;12 36 import net.curisit.securis.utils.TokenHelper; 13 37 38 +import org.apache.commons.io.IOUtils;39 +import org.apache.commons.lang.time.DateUtils;14 40 import org.apache.logging.log4j.LogManager; 15 41 import org.apache.logging.log4j.Logger; 42 +import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;43 +44 +import com.google.inject.persist.Transactional;16 45 17 46 /** 18 47 * External API to be accessed by third parties .. .. @@ -31,6 +60,9 @@ 31 60 @Inject 32 61 Provider<EntityManager> emProvider; 33 62 63 + @Inject64 + LicenseGenerator licenseGenerator;65 +34 66 public ApiResource() { 35 67 } 36 68 .. .. @@ -47,4 +79,177 @@ 47 79 return Response.ok("SeCuris API").build(); 48 80 } 49 81 82 +83 + /**84 + * Request a new license file based in a RequestBean object sent as parameter85 + * @param mpfdi86 + * @param bsc87 + * @return88 + * @throws IOException89 + * @throws SeCurisServiceException90 + */91 + @POST92 + @Path("/request")93 + @Consumes(MediaType.APPLICATION_JSON)94 + //TODO: Enable this: @Securable95 + @Produces({96 + MediaType.APPLICATION_JSON97 + })98 + @Transactional99 + public Response createFromRequest(RequestBean request, @Context BasicSecurityContext bsc) throws IOException, SeCurisServiceException, SeCurisException {100 + LOG.info("Request to get license: {}", request);101 +102 + Map<String, Object> metadata = getLicenseMetadata(request);103 + License licDB = getLicenseData(request);104 +105 + Date expirationDate = licDB.getExpirationDate();106 + String licenseTypeCode = licDB.getPack().getLicenseType().getCode();107 + String licenseCode = licDB.getCode();108 + LicenseBean lic = licenseGenerator.generateLicense(request, metadata, expirationDate, licenseTypeCode, licenseCode);109 + SignedLicenseBean signedLic = new SignedLicenseBean(lic);110 + return Response.ok(signedLic).build();111 + }112 +113 + /**114 + * Returns a License file in JSON format from an uploaded Request file115 + * @param mpfdi116 + * @param bsc117 + * @return118 + * @throws IOException119 + * @throws SeCurisServiceException120 + * @throws SeCurisException121 + */122 + @POST123 + @Path("/request")124 + @Consumes(MediaType.MULTIPART_FORM_DATA)125 + @Securable126 + @Produces({127 + MediaType.APPLICATION_JSON128 + })129 + @Transactional130 + @SuppressWarnings("unchecked")131 + public Response createFromRequestFile(MultipartFormDataInput mpfdi, @Context BasicSecurityContext bsc) throws IOException, SeCurisServiceException, SeCurisException {132 + RequestBean req = new RequestBean();133 + req.setAppCode(mpfdi.getFormDataPart("appCode", String.class, null));134 + req.setArch(mpfdi.getFormDataPart("arch", String.class, null));135 + req.setCrcLogo(mpfdi.getFormDataPart("crcLogo", String.class, null));136 + req.setCustomerCode(mpfdi.getFormDataPart("customerCode", String.class, null));137 + req.setMacAddresses(mpfdi.getFormDataPart("macAddresses", List.class, null));138 + req.setOsName(mpfdi.getFormDataPart("osName", String.class, null));139 +140 + return createFromRequest(req, bsc);141 + }142 +143 + /**144 + * Create a new License file based in a previous one145 + *146 + * @param request147 + * @param bsc148 + * @return149 + * @throws IOException150 + * @throws SeCurisServiceException151 + * @throws SeCurisException152 + */153 + @POST154 + @Path("/renew")155 + @Consumes(MediaType.APPLICATION_JSON)156 + //TODO: Enable this: @Securable157 + @Produces({158 + MediaType.APPLICATION_JSON159 + })160 + @Transactional161 + public Response renewFromPreviousLicense(LicenseBean previousLic, @Context BasicSecurityContext bsc) throws IOException, SeCurisServiceException, SeCurisException {162 + LOG.info("Renew license: {}", previousLic);163 +164 + if (previousLic.getExpirationDate().after(DateUtils.addMonths(new Date(), 1))) {165 + throw new SeCurisServiceException(ErrorCodes.LICENSE_NOT_READY_FOR_RENEW, "The license is still valid, not ready for renew");166 + }167 +168 + Map<String, Object> metadata = getLicenseMetadata(previousLic);169 + License licDB = getLicenseData(previousLic);170 +171 + Date expirationDate = licDB.getExpirationDate();172 + String licenseTypeCode = licDB.getPack().getLicenseType().getCode();173 + String licenseCode = licDB.getCode();174 + LicenseBean lic = licenseGenerator.generateLicense(previousLic, metadata, expirationDate, licenseTypeCode, licenseCode);175 + return Response.ok(lic).build();176 + }177 +178 + /**179 + * Returns a new License file in JSON format based in a previous license180 + * @param mpfdi181 + * @param bsc182 + * @return183 + * @throws IOException184 + * @throws SeCurisServiceException185 + * @throws SeCurisException186 + */187 + @POST188 + @Path("/renew")189 + @Consumes(MediaType.MULTIPART_FORM_DATA)190 + @Securable191 + @Produces({192 + MediaType.APPLICATION_JSON193 + })194 + @Transactional195 + @SuppressWarnings("unchecked")196 + public Response renewFromLicenseFile(MultipartFormDataInput mpfdi, @Context BasicSecurityContext bsc) throws IOException, SeCurisServiceException, SeCurisException {197 + LicenseBean lic = new LicenseBean();198 + // TODO: Add more license parameters199 + lic.setAppCode(mpfdi.getFormDataPart("appCode", String.class, null));200 + lic.setArch(mpfdi.getFormDataPart("arch", String.class, null));201 + lic.setCrcLogo(mpfdi.getFormDataPart("crcLogo", String.class, null));202 + lic.setCustomerCode(mpfdi.getFormDataPart("customerCode", String.class, null));203 + lic.setMacAddresses(mpfdi.getFormDataPart("macAddresses", List.class, null));204 + lic.setOsName(mpfdi.getFormDataPart("osName", String.class, null));205 + lic.setExpirationDate(mpfdi.getFormDataPart("expirationDate", Date.class, null));206 + LOG.info("Lic expires at: {}", lic.getExpirationDate());207 + if (lic.getExpirationDate().after(DateUtils.addMonths(new Date(), 1))) {208 + throw new SeCurisServiceException(ErrorCodes.LICENSE_NOT_READY_FOR_RENEW, "The license is still valid, not ready for renew");209 + }210 +211 + return createFromRequest(lic, bsc);212 + }213 +214 +215 +216 + private License getLicenseData(RequestBean req) throws SeCurisException {217 + // TODO: The dummy expiration date is temporal, this info should be read from DB218 + License lic = new License();219 + lic.setExpirationDate(new Date(new Date().getTime() + (1000L * 3600 * 24 * 365 * 10)));220 + lic.setCode(req.getAppCode() + "-LIC-INTERNAL");221 + LicenseType lt = new LicenseType();222 + lt.setCode("TYPE-" + req.getAppCode());223 + Pack pack = new Pack();224 + pack.setLicenseType(lt);225 + lic.setPack(pack);226 + return lic;227 + }228 +229 + /**230 + * Extract the corresponding metadata for the Request license given231 + * @param req232 + * @return233 + * @throws SeCurisException234 + */235 + @SuppressWarnings("unchecked")236 + private Map<String, Object> getLicenseMetadata(RequestBean req) throws SeCurisException {237 + // TODO: The dummy metadata file is temporal, this info should be read from DB238 + File dummyMetadata = new File(System.getProperty("user.home") + File.separator + ".SeCuris" + File.separator + "dummy_metadata.json");239 + Map<String, Object> metadata = null;240 + try {241 + String metadataJson = IOUtils.toString(dummyMetadata.toURI());242 + metadata = (Map<String, Object>)JsonUtils.json2map(metadataJson).get(req.getAppCode());243 + if (metadata == null)244 + throw new SeCurisException("App code in request is unknown: " + req.getAppCode());245 + metadata = new TreeMap<>(metadata);246 + } catch (IOException e) {247 + LOG.error("Error reading dummy metadata file", e);248 + throw new SeCurisException("Error reading dummy metadata file");249 + }250 +251 + return metadata;252 + }253 +254 +50 255 } securis/src/main/java/net/curisit/securis/services/LicenseResource.java
.. .. @@ -28,14 +28,10 @@ 28 28 import net.curisit.integrity.commons.JsonUtils; 29 29 import net.curisit.integrity.commons.Utils; 30 30 import net.curisit.securis.DefaultExceptionHandler; 31 -import net.curisit.securis.LicenseGenerator;32 -import net.curisit.securis.ReqGenerator;33 31 import net.curisit.securis.SeCurisException; 34 -import net.curisit.securis.beans.LicenseBean;35 32 import net.curisit.securis.beans.RequestBean; 36 33 import net.curisit.securis.db.License; 37 34 import net.curisit.securis.db.LicenseHistory; 38 -import net.curisit.securis.db.LicenseType;39 35 import net.curisit.securis.db.Pack; 40 36 import net.curisit.securis.db.User; 41 37 import net.curisit.securis.security.BasicSecurityContext; .. .. @@ -46,8 +42,6 @@ 46 42 import org.apache.commons.io.IOUtils; 47 43 import org.apache.logging.log4j.LogManager; 48 44 import org.apache.logging.log4j.Logger; 49 -import org.bouncycastle.jce.provider.asymmetric.ec.ECUtil;50 -import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;51 45 52 46 import com.google.inject.persist.Transactional; 53 47 .. .. @@ -67,9 +61,6 @@ 67 61 68 62 @Inject 69 63 Provider<EntityManager> emProvider; 70 -71 - @Inject72 - LicenseGenerator licenseGenerator;73 64 74 65 /** 75 66 * .. .. @@ -290,167 +281,7 @@ 290 281 return Response.ok(lic).build(); 291 282 } 292 283 293 - /**294 - * Extract the corresponding metadata for the Request license given295 - * @param req296 - * @return297 - * @throws SeCurisException298 - */299 - @SuppressWarnings("unchecked")300 - private Map<String, Object> getLicenseMetadata(RequestBean req) throws SeCurisException {301 - // TODO: The dummy metadata file is temporal, this info should be read from DB302 - File dummyMetadata = new File(System.getProperty("user.home") + File.separator + ".SeCuris" + File.separator + "dummy_metadata.json");303 - Map<String, Object> metadata = null;304 - try {305 - String metadataJson = IOUtils.toString(dummyMetadata.toURI());306 - metadata = (Map<String, Object>)JsonUtils.json2map(metadataJson).get(req.getAppCode());307 - if (metadata == null)308 - throw new SeCurisException("App code in request is unknown: " + req.getAppCode());309 - metadata = new TreeMap<>(metadata);310 - } catch (IOException e) {311 - LOG.error("Error reading dummy metadata file", e);312 - throw new SeCurisException("Error reading dummy metadata file");313 - }314 -315 - return metadata;316 - }317 -318 - private License getLicenseData(RequestBean req) throws SeCurisException {319 - // TODO: The dummy expiration date is temporal, this info should be read from DB320 - License lic = new License();321 - lic.setExpirationDate(new Date(new Date().getTime() + (1000L * 3600 * 24 * 365 * 10)));322 - lic.setCode(req.getAppCode() + "-LIC-INTERNAL");323 - LicenseType lt = new LicenseType();324 - lt.setCode("TYPE-" + req.getAppCode());325 - Pack pack = new Pack();326 - pack.setLicenseType(lt);327 - lic.setPack(pack);328 - return lic;329 - }330 -331 - /**332 - * Request a new license file based in a RequestBean object sent as parameter333 - * @param mpfdi334 - * @param bsc335 - * @return336 - * @throws IOException337 - * @throws SeCurisServiceException338 - */339 - @POST340 - @Path("/request")341 - @Consumes(MediaType.APPLICATION_JSON)342 - //TODO: Enable this: @Securable343 - @Produces({344 - MediaType.APPLICATION_JSON345 - })346 - @Transactional347 - public Response createFromRequest(RequestBean request, @Context BasicSecurityContext bsc) throws IOException, SeCurisServiceException, SeCurisException {348 - LOG.info("Request to get license: {}", request);349 284 350 - Map<String, Object> metadata = getLicenseMetadata(request);351 - License licDB = getLicenseData(request);352 -353 - Date expirationDate = licDB.getExpirationDate();354 - String licenseTypeCode = licDB.getPack().getLicenseType().getCode();355 - String licenseCode = licDB.getCode();356 - LicenseBean lic = licenseGenerator.generateLicense(request, metadata, expirationDate, licenseTypeCode, licenseCode);357 - return Response.ok(lic).build();358 - }359 -360 - /**361 - * Returns a License file in JSON format from an uploaded Request file362 - * @param mpfdi363 - * @param bsc364 - * @return365 - * @throws IOException366 - * @throws SeCurisServiceException367 - * @throws SeCurisException368 - */369 - @POST370 - @Path("/request")371 - @Consumes(MediaType.MULTIPART_FORM_DATA)372 - @Securable373 - @Produces({374 - MediaType.APPLICATION_JSON375 - })376 - @Transactional377 - @SuppressWarnings("unchecked")378 - public Response createFromRequestFile(MultipartFormDataInput mpfdi, @Context BasicSecurityContext bsc) throws IOException, SeCurisServiceException, SeCurisException {379 - RequestBean req = new RequestBean();380 - req.setAppCode(mpfdi.getFormDataPart("appCode", String.class, null));381 - req.setArch(mpfdi.getFormDataPart("arch", String.class, null));382 - req.setCrcLogo(mpfdi.getFormDataPart("crcLogo", String.class, null));383 - req.setCustomerCode(mpfdi.getFormDataPart("customerCode", String.class, null));384 - req.setMacAddresses(mpfdi.getFormDataPart("macAddresses", List.class, null));385 - req.setOsName(mpfdi.getFormDataPart("osName", String.class, null));386 -387 - return createFromRequest(req, bsc);388 - }389 -390 - /**391 - * Create a new License file based in a previous one392 - *393 - * @param request394 - * @param bsc395 - * @return396 - * @throws IOException397 - * @throws SeCurisServiceException398 - * @throws SeCurisException399 - */400 - @POST401 - @Path("/renew")402 - @Consumes(MediaType.APPLICATION_JSON)403 - //TODO: Enable this: @Securable404 - @Produces({405 - MediaType.APPLICATION_JSON406 - })407 - @Transactional408 - public Response renewFromPreviousLicense(LicenseBean previousLic, @Context BasicSecurityContext bsc) throws IOException, SeCurisServiceException, SeCurisException {409 - LOG.info("Request to get license: {}", previousLic);410 -411 - Map<String, Object> metadata = getLicenseMetadata(previousLic);412 - License licDB = getLicenseData(previousLic);413 -414 - Date expirationDate = licDB.getExpirationDate();415 - String licenseTypeCode = licDB.getPack().getLicenseType().getCode();416 - String licenseCode = licDB.getCode();417 - LicenseBean lic = licenseGenerator.generateLicense(previousLic, metadata, expirationDate, licenseTypeCode, licenseCode);418 - return Response.ok(lic).build();419 - }420 -421 - /**422 - * Returns a new License file in JSON format based in a previous license423 - * @param mpfdi424 - * @param bsc425 - * @return426 - * @throws IOException427 - * @throws SeCurisServiceException428 - * @throws SeCurisException429 - */430 - @POST431 - @Path("/renew")432 - @Consumes(MediaType.MULTIPART_FORM_DATA)433 - @Securable434 - @Produces({435 - MediaType.APPLICATION_JSON436 - })437 - @Transactional438 - @SuppressWarnings("unchecked")439 - public Response renewFromLicenseFile(MultipartFormDataInput mpfdi, @Context BasicSecurityContext bsc) throws IOException, SeCurisServiceException, SeCurisException {440 - LicenseBean lic = new LicenseBean();441 - // TODO: Add more license parameters442 - lic.setAppCode(mpfdi.getFormDataPart("appCode", String.class, null));443 - lic.setArch(mpfdi.getFormDataPart("arch", String.class, null));444 - lic.setCrcLogo(mpfdi.getFormDataPart("crcLogo", String.class, null));445 - lic.setCustomerCode(mpfdi.getFormDataPart("customerCode", String.class, null));446 - lic.setMacAddresses(mpfdi.getFormDataPart("macAddresses", List.class, null));447 - lic.setOsName(mpfdi.getFormDataPart("osName", String.class, null));448 -449 - return createFromRequest(lic, bsc);450 - }451 -452 -453 -454 285 455 286 @PUT 456 287 @POST securis/src/main/java/net/curisit/securis/services/exception/SeCurisServiceException.java
.. .. @@ -20,4 +20,12 @@ 20 20 */ 21 21 private static final long serialVersionUID = 1L; 22 22 23 + public static class ErrorCodes {24 + public static int UNEXPECTED_ERROR = 1000;25 + public static int INVALID_CREDENTIALS = 1001;26 + public static int UNAUTHORIZED_ACCESS = 1002;27 +28 + public static int INVALID_LICENSE_REQUEST_DATA = 1100;29 + public static int LICENSE_NOT_READY_FOR_RENEW = 1101;30 + }23 31 }