rsanchez
2014-10-23 bc2cedc83f6353259ea1364f98ce60bf11d7ecf4
securis/src/main/java/net/curisit/securis/services/LicenseResource.java
....@@ -31,9 +31,7 @@
3131 import javax.ws.rs.core.Response;
3232 import javax.ws.rs.core.Response.Status;
3333
34
-import net.curisit.integrity.commons.JsonUtils;
3534 import net.curisit.integrity.commons.Utils;
36
-import net.curisit.integrity.exception.CurisException;
3735 import net.curisit.securis.DefaultExceptionHandler;
3836 import net.curisit.securis.LicenseGenerator;
3937 import net.curisit.securis.SeCurisException;
....@@ -41,6 +39,7 @@
4139 import net.curisit.securis.beans.RequestBean;
4240 import net.curisit.securis.beans.SignedLicenseBean;
4341 import net.curisit.securis.db.Application;
42
+import net.curisit.securis.db.BlockedRequest;
4443 import net.curisit.securis.db.License;
4544 import net.curisit.securis.db.LicenseHistory;
4645 import net.curisit.securis.db.LicenseStatus;
....@@ -52,6 +51,7 @@
5251 import net.curisit.securis.services.exception.SeCurisServiceException;
5352 import net.curisit.securis.services.exception.SeCurisServiceException.ErrorCodes;
5453 import net.curisit.securis.utils.EmailManager;
54
+import net.curisit.securis.utils.JsonUtils;
5555 import net.curisit.securis.utils.Params;
5656 import net.curisit.securis.utils.TokenHelper;
5757
....@@ -331,8 +331,12 @@
331331 // directly to ACTIVE
332332 lic.setStatus(LicenseStatus.ACTIVE);
333333 try {
334
+ lic.setRequestData(JsonUtils.toJSON((RequestBean) signedLicense));
335
+ if (BlockedRequest.isRequestBlocked(lic.getRequestData(), em)) {
336
+ throw new SeCurisServiceException(ErrorCodes.BLOCKED_REQUEST_DATA, "Given request data is blocked and cannot be activate");
337
+ }
334338 lic.setLicenseData(JsonUtils.toJSON(signedLicense));
335
- } catch (CurisException e) {
339
+ } catch (SeCurisException e) {
336340 LOG.error("Error generaing license JSON", e);
337341 throw new SeCurisServiceException(ErrorCodes.INVALID_FORMAT, "Error generaing license JSON");
338342 }
....@@ -386,7 +390,7 @@
386390 RequestBean rb = null;
387391 try {
388392 rb = JsonUtils.json2object(requestData, RequestBean.class);
389
- } catch (CurisException e) {
393
+ } catch (SeCurisException e) {
390394 throw new SeCurisServiceException(ErrorCodes.INVALID_REQUEST_DATA_FORMAT, "Request data has not a valid format");
391395 }
392396
....@@ -422,14 +426,18 @@
422426 currentLicense.setCode(lic.getCode());
423427 currentLicense.setFullName(lic.getFullName());
424428 currentLicense.setEmail(lic.getEmail());
425
- if (lic.getRequestData() != null) {
429
+ if (lic.getRequestData() != null && currentLicense.getStatus() == LicenseStatus.CREATED) {
426430 SignedLicenseBean signedLicense = generateLicense(lic, em);
427
- // If user provide a request data the license status is passed
428
- // directly to ACTIVE
429431 lic.setStatus(LicenseStatus.ACTIVE);
430432 try {
433
+ // Next line is necessary to normalize the String that contains
434
+ // the request.
435
+ lic.setRequestData(JsonUtils.toJSON((RequestBean) signedLicense));
436
+ if (BlockedRequest.isRequestBlocked(lic.getRequestData(), em)) {
437
+ throw new SeCurisServiceException(ErrorCodes.BLOCKED_REQUEST_DATA, "Given request data is blocked and cannot be activate");
438
+ }
431439 lic.setLicenseData(JsonUtils.toJSON(signedLicense));
432
- } catch (CurisException e) {
440
+ } catch (SeCurisException e) {
433441 LOG.error("Error generaing license JSON", e);
434442 throw new SeCurisServiceException(ErrorCodes.INVALID_FORMAT, "Error generaing license JSON");
435443 }
....@@ -465,24 +473,32 @@
465473 }
466474
467475 @DELETE
468
- @Path("/{licId}")
476
+ @Path("/{licId}/block")
469477 @Transactional
470478 @Securable
471479 @Produces({
472480 MediaType.APPLICATION_JSON
473481 })
474482 public Response block(@PathParam("licId") Integer licId, @Context BasicSecurityContext bsc) throws SeCurisServiceException {
475
- LOG.info("Deleting license with id: {}", licId);
483
+ LOG.info("Blocking license with id: {}", licId);
476484 EntityManager em = emProvider.get();
477485 License lic = getCurrentLicense(licId, bsc, em);
478486
479
- if (lic.getStatus() != LicenseStatus.CANCELLED || lic.getStatus() != LicenseStatus.CREATED) {
480
- LOG.error("License {} can not be deleted with status {}", lic.getCode(), lic.getStatus());
481
- return Response.status(Status.FORBIDDEN)
482
- .header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, "License can not be deleted in current status").build();
487
+ if (lic.getStatus() != LicenseStatus.CANCELLED) {
488
+ LOG.error("License can only be blocked in CANCELLED status, current: {}", lic.getStatus().name());
489
+ throw new SeCurisServiceException(ErrorCodes.WRONG_STATUS, "License can only be blocked in CANCELLED status");
483490 }
491
+ if (BlockedRequest.isRequestBlocked(lic.getRequestData(), em)) {
492
+ throw new SeCurisServiceException(ErrorCodes.BLOCKED_REQUEST_DATA, "Given request data is already blocked");
493
+ }
494
+ BlockedRequest blockedReq = new BlockedRequest();
495
+ blockedReq.setCreationTimestamp(new Date());
496
+ blockedReq.setBlockedBy(getUser(bsc, em));
497
+ blockedReq.setRequestData(lic.getRequestData());
484498
485
- em.remove(lic);
499
+ em.persist(blockedReq);
500
+
501
+ em.persist(createLicenseHistoryAction(lic, getUser(bsc, em), LicenseHistory.Actions.BLOCK));
486502 return Response.ok(Utils.createMap("success", true, "id", licId)).build();
487503 }
488504