From bc2cedc83f6353259ea1364f98ce60bf11d7ecf4 Mon Sep 17 00:00:00 2001
From: rsanchez <rsanchez@curisit.net>
Date: Thu, 23 Oct 2014 12:06:14 +0000
Subject: [PATCH] #2021 feature - Upgtaded Jackson annotations version and added request data hash management
---
securis/src/main/java/net/curisit/securis/db/BlockedRequest.java | 31 ++++-
securis/src/main/java/net/curisit/securis/db/User.java | 11 +-
securis/src/main/java/net/curisit/securis/db/Application.java | 18 +-
securis/src/main/java/net/curisit/securis/db/PackStatus.java | 4
securis/src/main/java/net/curisit/securis/db/LicenseTypeMetadata.java | 19 +--
securis/src/main/java/net/curisit/securis/db/ApplicationMetadata.java | 22 ++--
securis/src/main/java/net/curisit/securis/db/Pack.java | 13 +-
securis/src/main/java/net/curisit/securis/services/PackResource.java | 1
securis/src/main/java/net/curisit/securis/db/License.java | 38 ++++++-
securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java | 1
securis/src/main/resources/lic_email.template.en | 9 +
securis/src/main/java/net/curisit/securis/db/Organization.java | 12 +-
securis/src/main/java/net/curisit/securis/db/LicenseStatus.java | 4
securis/src/main/java/net/curisit/securis/db/LicenseHistory.java | 13 +-
securis/src/main/java/net/curisit/securis/services/LicenseResource.java | 46 ++++++---
securis/src/main/java/net/curisit/securis/db/LicenseType.java | 26 ++--
securis/src/main/java/net/curisit/securis/db/PackMetadata.java | 20 ++--
securis/src/main/java/net/curisit/securis/services/exception/SeCurisServiceException.java | 3
securis/src/main/resources/db/schema.sql | 9 +
19 files changed, 186 insertions(+), 114 deletions(-)
diff --git a/securis/src/main/java/net/curisit/securis/db/Application.java b/securis/src/main/java/net/curisit/securis/db/Application.java
index 566398a..46d896d 100644
--- a/securis/src/main/java/net/curisit/securis/db/Application.java
+++ b/securis/src/main/java/net/curisit/securis/db/Application.java
@@ -14,18 +14,18 @@
import javax.persistence.OneToMany;
import javax.persistence.Table;
-import org.codehaus.jackson.annotate.JsonAutoDetect;
-import org.codehaus.jackson.annotate.JsonIgnore;
-import org.codehaus.jackson.annotate.JsonProperty;
-import org.codehaus.jackson.map.annotate.JsonSerialize;
-
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
/**
* Entity implementation class for Entity: application
*
*/
@JsonAutoDetect
-@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
+@JsonInclude(Include.NON_NULL)
@Entity
@Table(name = "application")
@NamedQueries({
@@ -113,13 +113,13 @@
public boolean equals(Object obj) {
if (!(obj instanceof Application))
return false;
- Application other = (Application)obj;
+ Application other = (Application) obj;
return id.equals(other.id);
}
-
+
@Override
public int hashCode() {
-
+
return (id == null ? 0 : id.hashCode());
}
diff --git a/securis/src/main/java/net/curisit/securis/db/ApplicationMetadata.java b/securis/src/main/java/net/curisit/securis/db/ApplicationMetadata.java
index 7431471..634cf10 100644
--- a/securis/src/main/java/net/curisit/securis/db/ApplicationMetadata.java
+++ b/securis/src/main/java/net/curisit/securis/db/ApplicationMetadata.java
@@ -5,7 +5,6 @@
import javax.persistence.Column;
import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
@@ -13,17 +12,18 @@
import javax.persistence.NamedQuery;
import javax.persistence.Table;
-import org.codehaus.jackson.annotate.JsonAutoDetect;
-import org.codehaus.jackson.annotate.JsonIgnore;
-import org.codehaus.jackson.annotate.JsonProperty;
-import org.codehaus.jackson.map.annotate.JsonSerialize;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
/**
* Entity implementation class for Entity: application_metadata
*
*/
@JsonAutoDetect
-@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
+@JsonInclude(Include.NON_NULL)
@Entity
@Table(name = "application_metadata")
@NamedQueries({
@@ -49,7 +49,6 @@
@Column(name = "creation_timestamp")
private Date creationTimestamp;
-
public String getKey() {
return key;
}
@@ -73,7 +72,6 @@
public void setCreationTimestamp(Date creationTimestamp) {
this.creationTimestamp = creationTimestamp;
}
-
@JsonProperty("application_id")
public Integer getApplicationId() {
@@ -105,18 +103,18 @@
public void setMandatory(boolean mandatory) {
this.mandatory = mandatory;
}
-
+
@Override
public boolean equals(Object obj) {
if (!(obj instanceof ApplicationMetadata))
return false;
- ApplicationMetadata other = (ApplicationMetadata)obj;
+ ApplicationMetadata other = (ApplicationMetadata) obj;
return key.equals(other.key) && (application == null || application.equals(other.application));
}
-
+
@Override
public int hashCode() {
-
+
return key.hashCode() + (application == null ? 0 : application.hashCode());
}
diff --git a/securis/src/main/java/net/curisit/securis/db/BlockedRequest.java b/securis/src/main/java/net/curisit/securis/db/BlockedRequest.java
index 2233432..51eac7e 100644
--- a/securis/src/main/java/net/curisit/securis/db/BlockedRequest.java
+++ b/securis/src/main/java/net/curisit/securis/db/BlockedRequest.java
@@ -5,23 +5,27 @@
import javax.persistence.Column;
import javax.persistence.Entity;
+import javax.persistence.EntityManager;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
-import org.codehaus.jackson.annotate.JsonAutoDetect;
-import org.codehaus.jackson.annotate.JsonIgnore;
-import org.codehaus.jackson.annotate.JsonIgnoreProperties;
-import org.codehaus.jackson.annotate.JsonProperty;
-import org.codehaus.jackson.map.annotate.JsonSerialize;
+import net.curisit.integrity.commons.Utils;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
/**
* Entity implementation class for Entity: pack
*
*/
@JsonAutoDetect
-@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
+@JsonInclude(Include.NON_NULL)
@Entity
@Table(name = "blocked_request")
@JsonIgnoreProperties(ignoreUnknown = true)
@@ -58,7 +62,7 @@
if (!(obj instanceof BlockedRequest))
return false;
BlockedRequest other = (BlockedRequest) obj;
- return hash.equals(other.hash);
+ return (hash == null && other.hash == null) || hash.equals(other.hash);
}
@Override
@@ -73,6 +77,7 @@
public void setRequestData(String requestData) {
this.requestData = requestData;
+ this.hash = generateHash(this.requestData);
}
public User getBlockedBy() {
@@ -82,4 +87,16 @@
public void setBlockedBy(User blockedBy) {
this.blockedBy = blockedBy;
}
+
+ public static String generateHash(String reqData) {
+ String hash = reqData != null ? Utils.sha256(reqData) : null;
+ return hash;
+ }
+
+ public static boolean isRequestBlocked(String requestData, EntityManager em) {
+ String hash = generateHash(requestData);
+ BlockedRequest br = em.find(BlockedRequest.class, hash);
+ return br != null;
+ }
+
}
diff --git a/securis/src/main/java/net/curisit/securis/db/License.java b/securis/src/main/java/net/curisit/securis/db/License.java
index 239797c..e8ce296 100644
--- a/securis/src/main/java/net/curisit/securis/db/License.java
+++ b/securis/src/main/java/net/curisit/securis/db/License.java
@@ -8,6 +8,7 @@
import javax.persistence.Column;
import javax.persistence.Entity;
+import javax.persistence.EntityManager;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@@ -17,14 +18,15 @@
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
+import javax.persistence.TypedQuery;
import net.curisit.integrity.commons.Utils;
-import org.codehaus.jackson.annotate.JsonAutoDetect;
-import org.codehaus.jackson.annotate.JsonIgnore;
-import org.codehaus.jackson.annotate.JsonIgnoreProperties;
-import org.codehaus.jackson.annotate.JsonProperty;
-import org.codehaus.jackson.map.annotate.JsonSerialize;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
/**
* Entity implementation class for Entity: license
@@ -36,7 +38,8 @@
@Table(name = "license")
@JsonIgnoreProperties(ignoreUnknown = true)
@NamedQueries({
- @NamedQuery(name = "list-licenses-by-pack", query = "SELECT l FROM License l where l.pack.id = :packId")
+ @NamedQuery(name = "list-licenses-by-pack", query = "SELECT l FROM License l where l.pack.id = :packId"),
+ @NamedQuery(name = "list-active-licenses-by-req-data", query = "SELECT l FROM License l where l.reqDataHash = :hash and l.status in ('AC', 'PA')")
})
public class License implements Serializable {
@@ -74,6 +77,10 @@
@Column(name = "request_data")
@JsonProperty("request_data")
private String requestData;
+
+ @Column(name = "request_data_hash")
+ @JsonIgnore
+ private String reqDataHash;
@Column(name = "license_data")
@JsonProperty("license_data")
@@ -286,6 +293,7 @@
public static final int DOWNLOAD = 5;
public static final int CANCEL = 6;
public static final int DELETE = 7;
+ public static final int BLOCK = 8;
}
public static class Status {
@@ -296,8 +304,8 @@
Action.SEND, Arrays.asList(LicenseStatus.ACTIVE, LicenseStatus.PRE_ACTIVE), //
Action.DOWNLOAD, Arrays.asList(LicenseStatus.ACTIVE, LicenseStatus.PRE_ACTIVE), //
Action.CANCEL, Arrays.asList(LicenseStatus.ACTIVE, LicenseStatus.PRE_ACTIVE, LicenseStatus.REQUESTED, LicenseStatus.EXPIRED), //
- Action.DELETE, Arrays.asList(LicenseStatus.CANCELLED, LicenseStatus.CREATED) //
-
+ Action.DELETE, Arrays.asList(LicenseStatus.CANCELLED, LicenseStatus.CREATED), //
+ Action.BLOCK, Arrays.asList(LicenseStatus.CANCELLED) //
);
/**
@@ -314,4 +322,18 @@
return validStatuses != null && validStatuses.contains(currentStatus);
}
}
+
+ public License findLicenseByRequestData(String requestData, EntityManager em) {
+ TypedQuery<License> query = em.createNamedQuery("list-active-licenses-by-req-data", License.class);
+ query.setParameter("hash", BlockedRequest.generateHash(requestData));
+ return null;
+ }
+
+ public String getReqDataHash() {
+ return reqDataHash;
+ }
+
+ public void setReqDataHash(String reqDataHash) {
+ this.reqDataHash = reqDataHash;
+ }
}
diff --git a/securis/src/main/java/net/curisit/securis/db/LicenseHistory.java b/securis/src/main/java/net/curisit/securis/db/LicenseHistory.java
index 63590f5..2c25dc5 100644
--- a/securis/src/main/java/net/curisit/securis/db/LicenseHistory.java
+++ b/securis/src/main/java/net/curisit/securis/db/LicenseHistory.java
@@ -12,18 +12,19 @@
import javax.persistence.NamedQuery;
import javax.persistence.Table;
-import org.codehaus.jackson.annotate.JsonAutoDetect;
-import org.codehaus.jackson.annotate.JsonIgnore;
-import org.codehaus.jackson.annotate.JsonIgnoreProperties;
-import org.codehaus.jackson.annotate.JsonProperty;
-import org.codehaus.jackson.map.annotate.JsonSerialize;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
/**
* Entity implementation class for Entity: license
*
*/
@JsonAutoDetect
-@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
+@JsonInclude(Include.NON_NULL)
@Entity
@Table(name = "license_history")
@JsonIgnoreProperties(ignoreUnknown = true)
diff --git a/securis/src/main/java/net/curisit/securis/db/LicenseStatus.java b/securis/src/main/java/net/curisit/securis/db/LicenseStatus.java
index ff8b51f..1b07361 100644
--- a/securis/src/main/java/net/curisit/securis/db/LicenseStatus.java
+++ b/securis/src/main/java/net/curisit/securis/db/LicenseStatus.java
@@ -1,7 +1,7 @@
package net.curisit.securis.db;
-import org.codehaus.jackson.annotate.JsonCreator;
-import org.codehaus.jackson.annotate.JsonValue;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
/**
* Contains the possible license statuses. For further details:
diff --git a/securis/src/main/java/net/curisit/securis/db/LicenseType.java b/securis/src/main/java/net/curisit/securis/db/LicenseType.java
index 21d5225..3196743 100644
--- a/securis/src/main/java/net/curisit/securis/db/LicenseType.java
+++ b/securis/src/main/java/net/curisit/securis/db/LicenseType.java
@@ -18,24 +18,26 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import org.codehaus.jackson.annotate.JsonAutoDetect;
-import org.codehaus.jackson.annotate.JsonIgnore;
-import org.codehaus.jackson.annotate.JsonIgnoreProperties;
-import org.codehaus.jackson.annotate.JsonProperty;
-import org.codehaus.jackson.map.annotate.JsonSerialize;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
/**
* Entity implementation class for Entity: license_type
*
*/
@JsonAutoDetect
-@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
+@JsonInclude(Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@Entity
@Table(name = "license_type")
@NamedQueries({
- @NamedQuery(name = "list-license_types", query = "SELECT lt FROM LicenseType lt"),
- @NamedQuery(name = "list-application-license_types", query = "SELECT lt FROM LicenseType lt where lt.application.id = :appId")
+ @NamedQuery(name = "list-license_types", query = "SELECT lt FROM LicenseType lt"),
+ @NamedQuery(name = "list-application-license_types", query = "SELECT lt FROM LicenseType lt where lt.application.id = :appId")
})
public class LicenseType implements Serializable {
@@ -62,7 +64,7 @@
@OneToMany(fetch = FetchType.LAZY, mappedBy = "licenseType")
private Set<LicenseTypeMetadata> metadata;
-
+
public Set<LicenseTypeMetadata> getMetadata() {
return metadata;
}
@@ -143,13 +145,13 @@
public boolean equals(Object obj) {
if (!(obj instanceof LicenseType))
return false;
- LicenseType other = (LicenseType)obj;
+ LicenseType other = (LicenseType) obj;
return id.equals(other.id);
}
-
+
@Override
public int hashCode() {
-
+
return (id == null ? 0 : id.hashCode());
}
}
diff --git a/securis/src/main/java/net/curisit/securis/db/LicenseTypeMetadata.java b/securis/src/main/java/net/curisit/securis/db/LicenseTypeMetadata.java
index 471c355..c3b5525 100644
--- a/securis/src/main/java/net/curisit/securis/db/LicenseTypeMetadata.java
+++ b/securis/src/main/java/net/curisit/securis/db/LicenseTypeMetadata.java
@@ -3,7 +3,6 @@
import java.io.Serializable;
import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
@@ -11,18 +10,18 @@
import javax.persistence.NamedQuery;
import javax.persistence.Table;
-import org.codehaus.jackson.annotate.JsonAutoDetect;
-import org.codehaus.jackson.annotate.JsonIgnore;
-import org.codehaus.jackson.annotate.JsonIgnoreProperties;
-import org.codehaus.jackson.annotate.JsonProperty;
-import org.codehaus.jackson.map.annotate.JsonSerialize;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
/**
* Entity implementation class for Entity: licensetype_metadata
*
*/
@JsonAutoDetect
-@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
+@JsonInclude(Include.NON_NULL)
@Entity
@Table(name = "licensetype_metadata")
@NamedQueries({
@@ -88,13 +87,13 @@
public boolean equals(Object obj) {
if (!(obj instanceof LicenseTypeMetadata))
return false;
- LicenseTypeMetadata other = (LicenseTypeMetadata)obj;
+ LicenseTypeMetadata other = (LicenseTypeMetadata) obj;
return key.equals(other.key) && (licenseType == null || licenseType.equals(other.licenseType));
}
-
+
@Override
public int hashCode() {
-
+
return key.hashCode() + (licenseType == null ? 0 : licenseType.hashCode());
}
diff --git a/securis/src/main/java/net/curisit/securis/db/Organization.java b/securis/src/main/java/net/curisit/securis/db/Organization.java
index e2d798b..90e403d 100644
--- a/securis/src/main/java/net/curisit/securis/db/Organization.java
+++ b/securis/src/main/java/net/curisit/securis/db/Organization.java
@@ -23,17 +23,19 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import org.codehaus.jackson.annotate.JsonAutoDetect;
-import org.codehaus.jackson.annotate.JsonIgnore;
-import org.codehaus.jackson.annotate.JsonProperty;
-import org.codehaus.jackson.map.annotate.JsonSerialize;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
/**
* Entity implementation class for Entity: organization
*
*/
@JsonAutoDetect
-@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
+@JsonInclude(Include.NON_NULL)
@Entity
@Table(name = "organization")
@NamedQueries({
diff --git a/securis/src/main/java/net/curisit/securis/db/Pack.java b/securis/src/main/java/net/curisit/securis/db/Pack.java
index dcc977e..ff3a93e 100644
--- a/securis/src/main/java/net/curisit/securis/db/Pack.java
+++ b/securis/src/main/java/net/curisit/securis/db/Pack.java
@@ -17,18 +17,19 @@
import javax.persistence.OneToMany;
import javax.persistence.Table;
-import org.codehaus.jackson.annotate.JsonAutoDetect;
-import org.codehaus.jackson.annotate.JsonIgnore;
-import org.codehaus.jackson.annotate.JsonIgnoreProperties;
-import org.codehaus.jackson.annotate.JsonProperty;
-import org.codehaus.jackson.map.annotate.JsonSerialize;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
/**
* Entity implementation class for Entity: pack
*
*/
@JsonAutoDetect
-@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
+@JsonInclude(Include.NON_NULL)
@Entity
@Table(name = "pack")
@JsonIgnoreProperties(ignoreUnknown = true)
diff --git a/securis/src/main/java/net/curisit/securis/db/PackMetadata.java b/securis/src/main/java/net/curisit/securis/db/PackMetadata.java
index dd8e3ff..bb583b5 100644
--- a/securis/src/main/java/net/curisit/securis/db/PackMetadata.java
+++ b/securis/src/main/java/net/curisit/securis/db/PackMetadata.java
@@ -3,7 +3,6 @@
import java.io.Serializable;
import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
@@ -11,17 +10,18 @@
import javax.persistence.NamedQuery;
import javax.persistence.Table;
-import org.codehaus.jackson.annotate.JsonAutoDetect;
-import org.codehaus.jackson.annotate.JsonIgnore;
-import org.codehaus.jackson.annotate.JsonProperty;
-import org.codehaus.jackson.map.annotate.JsonSerialize;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
/**
* Entity implementation class for Entity: pack_metadata
*
*/
@JsonAutoDetect
-@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
+@JsonInclude(Include.NON_NULL)
@Entity
@Table(name = "pack_metadata")
@NamedQueries({
@@ -92,18 +92,18 @@
public void setReadonly(boolean readonly) {
this.readonly = readonly;
}
-
+
@Override
public boolean equals(Object obj) {
if (!(obj instanceof PackMetadata))
return false;
- PackMetadata other = (PackMetadata)obj;
+ PackMetadata other = (PackMetadata) obj;
return key.equals(other.key) && (pack == null || pack.equals(other.pack));
}
-
+
@Override
public int hashCode() {
-
+
return key.hashCode() + (pack == null ? 0 : pack.hashCode());
}
diff --git a/securis/src/main/java/net/curisit/securis/db/PackStatus.java b/securis/src/main/java/net/curisit/securis/db/PackStatus.java
index bd05a69..6dd99bb 100644
--- a/securis/src/main/java/net/curisit/securis/db/PackStatus.java
+++ b/securis/src/main/java/net/curisit/securis/db/PackStatus.java
@@ -1,7 +1,7 @@
package net.curisit.securis.db;
-import org.codehaus.jackson.annotate.JsonCreator;
-import org.codehaus.jackson.annotate.JsonValue;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
/**
* Contains the possible pack statuses. For further details:
diff --git a/securis/src/main/java/net/curisit/securis/db/User.java b/securis/src/main/java/net/curisit/securis/db/User.java
index 0899dad..e8b643b 100644
--- a/securis/src/main/java/net/curisit/securis/db/User.java
+++ b/securis/src/main/java/net/curisit/securis/db/User.java
@@ -17,17 +17,18 @@
import javax.persistence.NamedQuery;
import javax.persistence.Table;
-import org.codehaus.jackson.annotate.JsonAutoDetect;
-import org.codehaus.jackson.annotate.JsonIgnore;
-import org.codehaus.jackson.annotate.JsonProperty;
-import org.codehaus.jackson.map.annotate.JsonSerialize;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
/**
* Entity implementation class for Entity: Users
*
*/
@JsonAutoDetect
-@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
+@JsonInclude(Include.NON_NULL)
@Entity
@Table(name = "user")
@NamedQueries({
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 2930626..93192c7 100644
--- a/securis/src/main/java/net/curisit/securis/services/LicenseResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/LicenseResource.java
@@ -31,9 +31,7 @@
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
-import net.curisit.integrity.commons.JsonUtils;
import net.curisit.integrity.commons.Utils;
-import net.curisit.integrity.exception.CurisException;
import net.curisit.securis.DefaultExceptionHandler;
import net.curisit.securis.LicenseGenerator;
import net.curisit.securis.SeCurisException;
@@ -41,6 +39,7 @@
import net.curisit.securis.beans.RequestBean;
import net.curisit.securis.beans.SignedLicenseBean;
import net.curisit.securis.db.Application;
+import net.curisit.securis.db.BlockedRequest;
import net.curisit.securis.db.License;
import net.curisit.securis.db.LicenseHistory;
import net.curisit.securis.db.LicenseStatus;
@@ -52,6 +51,7 @@
import net.curisit.securis.services.exception.SeCurisServiceException;
import net.curisit.securis.services.exception.SeCurisServiceException.ErrorCodes;
import net.curisit.securis.utils.EmailManager;
+import net.curisit.securis.utils.JsonUtils;
import net.curisit.securis.utils.Params;
import net.curisit.securis.utils.TokenHelper;
@@ -331,8 +331,12 @@
// directly to ACTIVE
lic.setStatus(LicenseStatus.ACTIVE);
try {
+ lic.setRequestData(JsonUtils.toJSON((RequestBean) signedLicense));
+ if (BlockedRequest.isRequestBlocked(lic.getRequestData(), em)) {
+ throw new SeCurisServiceException(ErrorCodes.BLOCKED_REQUEST_DATA, "Given request data is blocked and cannot be activate");
+ }
lic.setLicenseData(JsonUtils.toJSON(signedLicense));
- } catch (CurisException e) {
+ } catch (SeCurisException e) {
LOG.error("Error generaing license JSON", e);
throw new SeCurisServiceException(ErrorCodes.INVALID_FORMAT, "Error generaing license JSON");
}
@@ -386,7 +390,7 @@
RequestBean rb = null;
try {
rb = JsonUtils.json2object(requestData, RequestBean.class);
- } catch (CurisException e) {
+ } catch (SeCurisException e) {
throw new SeCurisServiceException(ErrorCodes.INVALID_REQUEST_DATA_FORMAT, "Request data has not a valid format");
}
@@ -422,14 +426,18 @@
currentLicense.setCode(lic.getCode());
currentLicense.setFullName(lic.getFullName());
currentLicense.setEmail(lic.getEmail());
- if (lic.getRequestData() != null) {
+ if (lic.getRequestData() != null && currentLicense.getStatus() == LicenseStatus.CREATED) {
SignedLicenseBean signedLicense = generateLicense(lic, em);
- // If user provide a request data the license status is passed
- // directly to ACTIVE
lic.setStatus(LicenseStatus.ACTIVE);
try {
+ // Next line is necessary to normalize the String that contains
+ // the request.
+ lic.setRequestData(JsonUtils.toJSON((RequestBean) signedLicense));
+ if (BlockedRequest.isRequestBlocked(lic.getRequestData(), em)) {
+ throw new SeCurisServiceException(ErrorCodes.BLOCKED_REQUEST_DATA, "Given request data is blocked and cannot be activate");
+ }
lic.setLicenseData(JsonUtils.toJSON(signedLicense));
- } catch (CurisException e) {
+ } catch (SeCurisException e) {
LOG.error("Error generaing license JSON", e);
throw new SeCurisServiceException(ErrorCodes.INVALID_FORMAT, "Error generaing license JSON");
}
@@ -465,24 +473,32 @@
}
@DELETE
- @Path("/{licId}")
+ @Path("/{licId}/block")
@Transactional
@Securable
@Produces({
MediaType.APPLICATION_JSON
})
public Response block(@PathParam("licId") Integer licId, @Context BasicSecurityContext bsc) throws SeCurisServiceException {
- LOG.info("Deleting license with id: {}", licId);
+ LOG.info("Blocking license with id: {}", licId);
EntityManager em = emProvider.get();
License lic = getCurrentLicense(licId, bsc, em);
- if (lic.getStatus() != LicenseStatus.CANCELLED || lic.getStatus() != LicenseStatus.CREATED) {
- LOG.error("License {} can not be deleted with status {}", lic.getCode(), lic.getStatus());
- return Response.status(Status.FORBIDDEN)
- .header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, "License can not be deleted in current status").build();
+ if (lic.getStatus() != LicenseStatus.CANCELLED) {
+ LOG.error("License can only be blocked in CANCELLED status, current: {}", lic.getStatus().name());
+ throw new SeCurisServiceException(ErrorCodes.WRONG_STATUS, "License can only be blocked in CANCELLED status");
}
+ if (BlockedRequest.isRequestBlocked(lic.getRequestData(), em)) {
+ throw new SeCurisServiceException(ErrorCodes.BLOCKED_REQUEST_DATA, "Given request data is already blocked");
+ }
+ BlockedRequest blockedReq = new BlockedRequest();
+ blockedReq.setCreationTimestamp(new Date());
+ blockedReq.setBlockedBy(getUser(bsc, em));
+ blockedReq.setRequestData(lic.getRequestData());
- em.remove(lic);
+ em.persist(blockedReq);
+
+ em.persist(createLicenseHistoryAction(lic, getUser(bsc, em), LicenseHistory.Actions.BLOCK));
return Response.ok(Utils.createMap("success", true, "id", licId)).build();
}
diff --git a/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java b/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java
index 74253cc..2a800e0 100644
--- a/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java
@@ -28,7 +28,6 @@
import net.curisit.securis.DefaultExceptionHandler;
import net.curisit.securis.SeCurisException;
import net.curisit.securis.db.Application;
-import net.curisit.securis.db.ApplicationMetadata;
import net.curisit.securis.db.LicenseType;
import net.curisit.securis.db.LicenseTypeMetadata;
import net.curisit.securis.security.BasicSecurityContext;
diff --git a/securis/src/main/java/net/curisit/securis/services/PackResource.java b/securis/src/main/java/net/curisit/securis/services/PackResource.java
index 39ac56d..9205945 100644
--- a/securis/src/main/java/net/curisit/securis/services/PackResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/PackResource.java
@@ -27,7 +27,6 @@
import net.curisit.securis.DefaultExceptionHandler;
import net.curisit.securis.SeCurisException;
import net.curisit.securis.db.LicenseType;
-import net.curisit.securis.db.PackMetadata;
import net.curisit.securis.db.Organization;
import net.curisit.securis.db.Pack;
import net.curisit.securis.db.PackMetadata;
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 1610f0b..9b71247 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
@@ -31,11 +31,14 @@
public static int UNAUTHORIZED_ACCESS = 1002;
public static int NOT_FOUND = 1003;
public static int INVALID_FORMAT = 1004;
+ public static int WRONG_STATUS = 1005;
public static int INVALID_LICENSE_REQUEST_DATA = 1100;
public static int LICENSE_NOT_READY_FOR_RENEW = 1101;
public static int INVALID_REQUEST_DATA = 1201;
public static int INVALID_REQUEST_DATA_FORMAT = 1202;
+ public static int BLOCKED_REQUEST_DATA = 1203;
+ public static int DUPLICATED_REQUEST_DATA = 1204;
}
}
diff --git a/securis/src/main/resources/db/schema.sql b/securis/src/main/resources/db/schema.sql
index d16fde7..1d4b2d9 100644
--- a/securis/src/main/resources/db/schema.sql
+++ b/securis/src/main/resources/db/schema.sql
@@ -103,6 +103,7 @@
id INT NOT NULL auto_increment,
code VARCHAR(100) NOT NULL ,
request_data VARCHAR(1024) NULL ,
+ request_data_hash VARCHAR(64) NULL ,
license_data VARCHAR(1024) NULL ,
pack_id INT NOT NULL,
full_name VARCHAR(150) NULL,
@@ -116,7 +117,9 @@
created_by varchar(45) NULL ,
status VARCHAR(2) NOT NULL default 'CR',
PRIMARY KEY (id));
-
+
+create index if not exists lic_hash_req_idx on license(hash_request_data);
+create index if not exists lic_pack_idx on license(pack_id);
drop table IF EXISTS license_history;
CREATE TABLE IF NOT EXISTS license_history (
@@ -131,9 +134,9 @@
drop table IF EXISTS blocked_request;
CREATE TABLE IF NOT EXISTS blocked_request (
- hash VARCHAR(256) NOT NULL ,
+ hash VARCHAR(64) NOT NULL ,
request_data VARCHAR(1024) NULL ,
blocked_by varchar(45) NULL ,
creation_timestamp DATETIME NOT NULL default now(),
- PRIMARY KEY (id));
+ PRIMARY KEY (hash));
\ No newline at end of file
diff --git a/securis/src/main/resources/lic_email.template.en b/securis/src/main/resources/lic_email.template.en
new file mode 100644
index 0000000..ff0a5cc
--- /dev/null
+++ b/securis/src/main/resources/lic_email.template.en
@@ -0,0 +1,9 @@
+Hello {0}, the current email contains a license file to be used with the application '{1}'.
+
+Please, read the application documentation to learn how to install the license file.
+
+This mail has been sent form SeCuris server, please don't answer this mail.
+
+--
+SeCuris support team
+support@curisit.net
\ No newline at end of file
--
Gitblit v1.3.2