rsanchez
2014-09-25 b77838d1005c45740968816c70088dff2ad655d3
#2021 fix - Added API services and some minor enhancements
5 files modified
changed files
securis/src/main/java/net/curisit/securis/DefaultExceptionHandler.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/MainApp.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/services/ApiResource.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/services/LicenseResource.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/services/exception/SeCurisServiceException.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/DefaultExceptionHandler.java
....@@ -11,6 +11,7 @@
1111 import javax.ws.rs.ext.Provider;
1212
1313 import net.curisit.securis.services.exception.SeCurisServiceException;
14
+import net.curisit.securis.services.exception.SeCurisServiceException.ErrorCodes;
1415
1516 import org.apache.logging.log4j.LogManager;
1617 import org.apache.logging.log4j.Logger;
....@@ -19,7 +20,9 @@
1920 public class DefaultExceptionHandler implements ExceptionMapper<Exception> {
2021 private static final Logger LOG = LogManager.getLogger(DefaultExceptionHandler.class);
2122
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";
2326
2427 public DefaultExceptionHandler() {
2528 LOG.info("Creating DefaultExceptionHandler ");
....@@ -34,13 +37,17 @@
3437 public Response toResponse(Exception e) {
3538 if (e instanceof ForbiddenException) {
3639 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")
3843 .type(MediaType.APPLICATION_JSON).build();
3944 }
4045
4146 if (e instanceof SeCurisServiceException) {
4247 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())
4451 .type(MediaType.APPLICATION_JSON).build();
4552 }
4653
securis/src/main/java/net/curisit/securis/MainApp.java
....@@ -1,6 +1,7 @@
11 package net.curisit.securis;
22
33 import java.net.URI;
4
+import java.security.KeyStore;
45 import java.util.Properties;
56
67 import javax.inject.Inject;
....@@ -11,8 +12,14 @@
1112
1213 import org.apache.logging.log4j.LogManager;
1314 import org.apache.logging.log4j.Logger;
15
+import org.eclipse.jetty.http.HttpVersion;
1416 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;
1520 import org.eclipse.jetty.server.Server;
21
+import org.eclipse.jetty.server.ServerConnector;
22
+import org.eclipse.jetty.server.SslConnectionFactory;
1623 import org.eclipse.jetty.server.handler.ContextHandlerCollection;
1724 import org.eclipse.jetty.server.handler.ResourceHandler;
1825 import org.eclipse.jetty.servlet.ErrorPageErrorHandler;
....@@ -20,6 +27,8 @@
2027 import org.eclipse.jetty.servlet.ServletContextHandler;
2128 import org.eclipse.jetty.servlet.ServletHolder;
2229 import org.eclipse.jetty.util.resource.Resource;
30
+import org.eclipse.jetty.util.ssl.SslContextFactory;
31
+import org.eclipse.jetty.util.thread.QueuedThreadPool;
2332 import org.jboss.resteasy.plugins.guice.GuiceResteasyBootstrapServletContextListener;
2433 import org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher;
2534
....@@ -29,6 +38,7 @@
2938 import com.google.inject.name.Names;
3039 import com.google.inject.persist.PersistFilter;
3140 import com.google.inject.persist.jpa.JpaPersistModule;
41
+import com.itextpdf.text.pdf.security.KeyStoreUtil;
3242
3343 public class MainApp {
3444
....@@ -63,6 +73,9 @@
6373 private static void startServer(URI uri) throws Exception {
6474 System.out.println("Starting jetty...");
6575
76
+ QueuedThreadPool threadPool = new QueuedThreadPool();
77
+ threadPool.setMaxThreads(50);
78
+
6679 server = new Server(9997);
6780 ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
6881 context.setContextPath("/");
....@@ -90,10 +103,40 @@
90103 contexts.setHandlers(new Handler[] {
91104 staticResources, context
92105 });
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 );
93134
94135 server.setHandler(context);
136
+ server.setStopAtShutdown(true);
95137 server.start();
96138 server.join();
139
+
97140 LOG.info("Started server in: http://127.0.0.1:9997/");
98141 }
99142
securis/src/main/java/net/curisit/securis/services/ApiResource.java
....@@ -1,18 +1,47 @@
11 package net.curisit.securis.services;
22
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
+
310 import javax.inject.Inject;
411 import javax.inject.Provider;
512 import javax.persistence.EntityManager;
13
+import javax.ws.rs.Consumes;
614 import javax.ws.rs.GET;
15
+import javax.ws.rs.POST;
716 import javax.ws.rs.Path;
817 import javax.ws.rs.Produces;
18
+import javax.ws.rs.core.Context;
919 import javax.ws.rs.core.MediaType;
1020 import javax.ws.rs.core.Response;
1121
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;
1236 import net.curisit.securis.utils.TokenHelper;
1337
38
+import org.apache.commons.io.IOUtils;
39
+import org.apache.commons.lang.time.DateUtils;
1440 import org.apache.logging.log4j.LogManager;
1541 import org.apache.logging.log4j.Logger;
42
+import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;
43
+
44
+import com.google.inject.persist.Transactional;
1645
1746 /**
1847 * External API to be accessed by third parties
....@@ -31,6 +60,9 @@
3160 @Inject
3261 Provider<EntityManager> emProvider;
3362
63
+ @Inject
64
+ LicenseGenerator licenseGenerator;
65
+
3466 public ApiResource() {
3567 }
3668
....@@ -47,4 +79,177 @@
4779 return Response.ok("SeCuris API").build();
4880 }
4981
82
+
83
+ /**
84
+ * Request a new license file based in a RequestBean object sent as parameter
85
+ * @param mpfdi
86
+ * @param bsc
87
+ * @return
88
+ * @throws IOException
89
+ * @throws SeCurisServiceException
90
+ */
91
+ @POST
92
+ @Path("/request")
93
+ @Consumes(MediaType.APPLICATION_JSON)
94
+ //TODO: Enable this: @Securable
95
+ @Produces({
96
+ MediaType.APPLICATION_JSON
97
+ })
98
+ @Transactional
99
+ 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 file
115
+ * @param mpfdi
116
+ * @param bsc
117
+ * @return
118
+ * @throws IOException
119
+ * @throws SeCurisServiceException
120
+ * @throws SeCurisException
121
+ */
122
+ @POST
123
+ @Path("/request")
124
+ @Consumes(MediaType.MULTIPART_FORM_DATA)
125
+ @Securable
126
+ @Produces({
127
+ MediaType.APPLICATION_JSON
128
+ })
129
+ @Transactional
130
+ @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 one
145
+ *
146
+ * @param request
147
+ * @param bsc
148
+ * @return
149
+ * @throws IOException
150
+ * @throws SeCurisServiceException
151
+ * @throws SeCurisException
152
+ */
153
+ @POST
154
+ @Path("/renew")
155
+ @Consumes(MediaType.APPLICATION_JSON)
156
+ //TODO: Enable this: @Securable
157
+ @Produces({
158
+ MediaType.APPLICATION_JSON
159
+ })
160
+ @Transactional
161
+ 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 license
180
+ * @param mpfdi
181
+ * @param bsc
182
+ * @return
183
+ * @throws IOException
184
+ * @throws SeCurisServiceException
185
+ * @throws SeCurisException
186
+ */
187
+ @POST
188
+ @Path("/renew")
189
+ @Consumes(MediaType.MULTIPART_FORM_DATA)
190
+ @Securable
191
+ @Produces({
192
+ MediaType.APPLICATION_JSON
193
+ })
194
+ @Transactional
195
+ @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 parameters
199
+ 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 DB
218
+ 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 given
231
+ * @param req
232
+ * @return
233
+ * @throws SeCurisException
234
+ */
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 DB
238
+ 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
+
50255 }
securis/src/main/java/net/curisit/securis/services/LicenseResource.java
....@@ -28,14 +28,10 @@
2828 import net.curisit.integrity.commons.JsonUtils;
2929 import net.curisit.integrity.commons.Utils;
3030 import net.curisit.securis.DefaultExceptionHandler;
31
-import net.curisit.securis.LicenseGenerator;
32
-import net.curisit.securis.ReqGenerator;
3331 import net.curisit.securis.SeCurisException;
34
-import net.curisit.securis.beans.LicenseBean;
3532 import net.curisit.securis.beans.RequestBean;
3633 import net.curisit.securis.db.License;
3734 import net.curisit.securis.db.LicenseHistory;
38
-import net.curisit.securis.db.LicenseType;
3935 import net.curisit.securis.db.Pack;
4036 import net.curisit.securis.db.User;
4137 import net.curisit.securis.security.BasicSecurityContext;
....@@ -46,8 +42,6 @@
4642 import org.apache.commons.io.IOUtils;
4743 import org.apache.logging.log4j.LogManager;
4844 import org.apache.logging.log4j.Logger;
49
-import org.bouncycastle.jce.provider.asymmetric.ec.ECUtil;
50
-import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;
5145
5246 import com.google.inject.persist.Transactional;
5347
....@@ -67,9 +61,6 @@
6761
6862 @Inject
6963 Provider<EntityManager> emProvider;
70
-
71
- @Inject
72
- LicenseGenerator licenseGenerator;
7364
7465 /**
7566 *
....@@ -290,167 +281,7 @@
290281 return Response.ok(lic).build();
291282 }
292283
293
- /**
294
- * Extract the corresponding metadata for the Request license given
295
- * @param req
296
- * @return
297
- * @throws SeCurisException
298
- */
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 DB
302
- 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 DB
320
- 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 parameter
333
- * @param mpfdi
334
- * @param bsc
335
- * @return
336
- * @throws IOException
337
- * @throws SeCurisServiceException
338
- */
339
- @POST
340
- @Path("/request")
341
- @Consumes(MediaType.APPLICATION_JSON)
342
- //TODO: Enable this: @Securable
343
- @Produces({
344
- MediaType.APPLICATION_JSON
345
- })
346
- @Transactional
347
- public Response createFromRequest(RequestBean request, @Context BasicSecurityContext bsc) throws IOException, SeCurisServiceException, SeCurisException {
348
- LOG.info("Request to get license: {}", request);
349284
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 file
362
- * @param mpfdi
363
- * @param bsc
364
- * @return
365
- * @throws IOException
366
- * @throws SeCurisServiceException
367
- * @throws SeCurisException
368
- */
369
- @POST
370
- @Path("/request")
371
- @Consumes(MediaType.MULTIPART_FORM_DATA)
372
- @Securable
373
- @Produces({
374
- MediaType.APPLICATION_JSON
375
- })
376
- @Transactional
377
- @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 one
392
- *
393
- * @param request
394
- * @param bsc
395
- * @return
396
- * @throws IOException
397
- * @throws SeCurisServiceException
398
- * @throws SeCurisException
399
- */
400
- @POST
401
- @Path("/renew")
402
- @Consumes(MediaType.APPLICATION_JSON)
403
- //TODO: Enable this: @Securable
404
- @Produces({
405
- MediaType.APPLICATION_JSON
406
- })
407
- @Transactional
408
- 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 license
423
- * @param mpfdi
424
- * @param bsc
425
- * @return
426
- * @throws IOException
427
- * @throws SeCurisServiceException
428
- * @throws SeCurisException
429
- */
430
- @POST
431
- @Path("/renew")
432
- @Consumes(MediaType.MULTIPART_FORM_DATA)
433
- @Securable
434
- @Produces({
435
- MediaType.APPLICATION_JSON
436
- })
437
- @Transactional
438
- @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 parameters
442
- 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
-
454285
455286 @PUT
456287 @POST
securis/src/main/java/net/curisit/securis/services/exception/SeCurisServiceException.java
....@@ -20,4 +20,12 @@
2020 */
2121 private static final long serialVersionUID = 1L;
2222
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
+ }
2331 }