securis/src/main/java/net/curisit/securis/db/Application.java
.. .. @@ -14,18 +14,18 @@ 14 14 import javax.persistence.OneToMany; 15 15 import javax.persistence.Table; 16 16 17 -import org.codehaus.jackson.annotate.JsonAutoDetect;18 -import org.codehaus.jackson.annotate.JsonIgnore;19 -import org.codehaus.jackson.annotate.JsonProperty;20 -import org.codehaus.jackson.map.annotate.JsonSerialize;21 -17 +import com.fasterxml.jackson.annotation.JsonAutoDetect;18 +import com.fasterxml.jackson.annotation.JsonIgnore;19 +import com.fasterxml.jackson.annotation.JsonInclude;20 +import com.fasterxml.jackson.annotation.JsonInclude.Include;21 +import com.fasterxml.jackson.annotation.JsonProperty;22 22 23 23 /** 24 24 * Entity implementation class for Entity: application 25 25 * 26 26 */ 27 27 @JsonAutoDetect 28 -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)28 +@JsonInclude(Include.NON_NULL)29 29 @Entity 30 30 @Table(name = "application") 31 31 @NamedQueries({ .. .. @@ -113,13 +113,13 @@ 113 113 public boolean equals(Object obj) { 114 114 if (!(obj instanceof Application)) 115 115 return false; 116 - Application other = (Application)obj;116 + Application other = (Application) obj;117 117 return id.equals(other.id); 118 118 } 119 -119 +120 120 @Override 121 121 public int hashCode() { 122 -122 +123 123 return (id == null ? 0 : id.hashCode()); 124 124 } 125 125 securis/src/main/java/net/curisit/securis/db/ApplicationMetadata.java
.. .. @@ -5,7 +5,6 @@ 5 5 6 6 import javax.persistence.Column; 7 7 import javax.persistence.Entity; 8 -import javax.persistence.GeneratedValue;9 8 import javax.persistence.Id; 10 9 import javax.persistence.JoinColumn; 11 10 import javax.persistence.ManyToOne; .. .. @@ -13,17 +12,18 @@ 13 12 import javax.persistence.NamedQuery; 14 13 import javax.persistence.Table; 15 14 16 -import org.codehaus.jackson.annotate.JsonAutoDetect;17 -import org.codehaus.jackson.annotate.JsonIgnore;18 -import org.codehaus.jackson.annotate.JsonProperty;19 -import org.codehaus.jackson.map.annotate.JsonSerialize;15 +import com.fasterxml.jackson.annotation.JsonAutoDetect;16 +import com.fasterxml.jackson.annotation.JsonIgnore;17 +import com.fasterxml.jackson.annotation.JsonInclude;18 +import com.fasterxml.jackson.annotation.JsonInclude.Include;19 +import com.fasterxml.jackson.annotation.JsonProperty;20 20 21 21 /** 22 22 * Entity implementation class for Entity: application_metadata 23 23 * 24 24 */ 25 25 @JsonAutoDetect 26 -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)26 +@JsonInclude(Include.NON_NULL)27 27 @Entity 28 28 @Table(name = "application_metadata") 29 29 @NamedQueries({ .. .. @@ -49,7 +49,6 @@ 49 49 @Column(name = "creation_timestamp") 50 50 private Date creationTimestamp; 51 51 52 -53 52 public String getKey() { 54 53 return key; 55 54 } .. .. @@ -73,7 +72,6 @@ 73 72 public void setCreationTimestamp(Date creationTimestamp) { 74 73 this.creationTimestamp = creationTimestamp; 75 74 } 76 -77 75 78 76 @JsonProperty("application_id") 79 77 public Integer getApplicationId() { .. .. @@ -105,18 +103,18 @@ 105 103 public void setMandatory(boolean mandatory) { 106 104 this.mandatory = mandatory; 107 105 } 108 -106 +109 107 @Override 110 108 public boolean equals(Object obj) { 111 109 if (!(obj instanceof ApplicationMetadata)) 112 110 return false; 113 - ApplicationMetadata other = (ApplicationMetadata)obj;111 + ApplicationMetadata other = (ApplicationMetadata) obj;114 112 return key.equals(other.key) && (application == null || application.equals(other.application)); 115 113 } 116 -114 +117 115 @Override 118 116 public int hashCode() { 119 -117 +120 118 return key.hashCode() + (application == null ? 0 : application.hashCode()); 121 119 } 122 120 securis/src/main/java/net/curisit/securis/db/BlockedRequest.java
.. .. @@ -5,23 +5,27 @@ 5 5 6 6 import javax.persistence.Column; 7 7 import javax.persistence.Entity; 8 +import javax.persistence.EntityManager;8 9 import javax.persistence.Id; 9 10 import javax.persistence.JoinColumn; 10 11 import javax.persistence.ManyToOne; 11 12 import javax.persistence.Table; 12 13 13 -import org.codehaus.jackson.annotate.JsonAutoDetect;14 -import org.codehaus.jackson.annotate.JsonIgnore;15 -import org.codehaus.jackson.annotate.JsonIgnoreProperties;16 -import org.codehaus.jackson.annotate.JsonProperty;17 -import org.codehaus.jackson.map.annotate.JsonSerialize;14 +import net.curisit.integrity.commons.Utils;15 +16 +import com.fasterxml.jackson.annotation.JsonAutoDetect;17 +import com.fasterxml.jackson.annotation.JsonIgnore;18 +import com.fasterxml.jackson.annotation.JsonIgnoreProperties;19 +import com.fasterxml.jackson.annotation.JsonInclude;20 +import com.fasterxml.jackson.annotation.JsonInclude.Include;21 +import com.fasterxml.jackson.annotation.JsonProperty;18 22 19 23 /** 20 24 * Entity implementation class for Entity: pack 21 25 * 22 26 */ 23 27 @JsonAutoDetect 24 -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)28 +@JsonInclude(Include.NON_NULL)25 29 @Entity 26 30 @Table(name = "blocked_request") 27 31 @JsonIgnoreProperties(ignoreUnknown = true) .. .. @@ -58,7 +62,7 @@ 58 62 if (!(obj instanceof BlockedRequest)) 59 63 return false; 60 64 BlockedRequest other = (BlockedRequest) obj; 61 - return hash.equals(other.hash);65 + return (hash == null && other.hash == null) || hash.equals(other.hash);62 66 } 63 67 64 68 @Override .. .. @@ -73,6 +77,7 @@ 73 77 74 78 public void setRequestData(String requestData) { 75 79 this.requestData = requestData; 80 + this.hash = generateHash(this.requestData);76 81 } 77 82 78 83 public User getBlockedBy() { .. .. @@ -82,4 +87,16 @@ 82 87 public void setBlockedBy(User blockedBy) { 83 88 this.blockedBy = blockedBy; 84 89 } 90 +91 + public static String generateHash(String reqData) {92 + String hash = reqData != null ? Utils.sha256(reqData) : null;93 + return hash;94 + }95 +96 + public static boolean isRequestBlocked(String requestData, EntityManager em) {97 + String hash = generateHash(requestData);98 + BlockedRequest br = em.find(BlockedRequest.class, hash);99 + return br != null;100 + }101 +85 102 } securis/src/main/java/net/curisit/securis/db/License.java
.. .. @@ -8,6 +8,7 @@ 8 8 9 9 import javax.persistence.Column; 10 10 import javax.persistence.Entity; 11 +import javax.persistence.EntityManager;11 12 import javax.persistence.FetchType; 12 13 import javax.persistence.GeneratedValue; 13 14 import javax.persistence.Id; .. .. @@ -17,14 +18,15 @@ 17 18 import javax.persistence.NamedQuery; 18 19 import javax.persistence.OneToMany; 19 20 import javax.persistence.Table; 21 +import javax.persistence.TypedQuery;20 22 21 23 import net.curisit.integrity.commons.Utils; 22 24 23 -import org.codehaus.jackson.annotate.JsonAutoDetect;24 -import org.codehaus.jackson.annotate.JsonIgnore;25 -import org.codehaus.jackson.annotate.JsonIgnoreProperties;26 -import org.codehaus.jackson.annotate.JsonProperty;27 -import org.codehaus.jackson.map.annotate.JsonSerialize;25 +import com.fasterxml.jackson.annotation.JsonAutoDetect;26 +import com.fasterxml.jackson.annotation.JsonIgnore;27 +import com.fasterxml.jackson.annotation.JsonIgnoreProperties;28 +import com.fasterxml.jackson.annotation.JsonProperty;29 +import com.fasterxml.jackson.databind.annotation.JsonSerialize;28 30 29 31 /** 30 32 * Entity implementation class for Entity: license .. .. @@ -36,7 +38,8 @@ 36 38 @Table(name = "license") 37 39 @JsonIgnoreProperties(ignoreUnknown = true) 38 40 @NamedQueries({ 39 - @NamedQuery(name = "list-licenses-by-pack", query = "SELECT l FROM License l where l.pack.id = :packId")41 + @NamedQuery(name = "list-licenses-by-pack", query = "SELECT l FROM License l where l.pack.id = :packId"),42 + @NamedQuery(name = "list-active-licenses-by-req-data", query = "SELECT l FROM License l where l.reqDataHash = :hash and l.status in ('AC', 'PA')")40 43 }) 41 44 public class License implements Serializable { 42 45 .. .. @@ -74,6 +77,10 @@ 74 77 @Column(name = "request_data") 75 78 @JsonProperty("request_data") 76 79 private String requestData; 80 +81 + @Column(name = "request_data_hash")82 + @JsonIgnore83 + private String reqDataHash;77 84 78 85 @Column(name = "license_data") 79 86 @JsonProperty("license_data") .. .. @@ -286,6 +293,7 @@ 286 293 public static final int DOWNLOAD = 5; 287 294 public static final int CANCEL = 6; 288 295 public static final int DELETE = 7; 296 + public static final int BLOCK = 8;289 297 } 290 298 291 299 public static class Status { .. .. @@ -296,8 +304,8 @@ 296 304 Action.SEND, Arrays.asList(LicenseStatus.ACTIVE, LicenseStatus.PRE_ACTIVE), // 297 305 Action.DOWNLOAD, Arrays.asList(LicenseStatus.ACTIVE, LicenseStatus.PRE_ACTIVE), // 298 306 Action.CANCEL, Arrays.asList(LicenseStatus.ACTIVE, LicenseStatus.PRE_ACTIVE, LicenseStatus.REQUESTED, LicenseStatus.EXPIRED), // 299 - Action.DELETE, Arrays.asList(LicenseStatus.CANCELLED, LicenseStatus.CREATED) //300 -307 + Action.DELETE, Arrays.asList(LicenseStatus.CANCELLED, LicenseStatus.CREATED), //308 + Action.BLOCK, Arrays.asList(LicenseStatus.CANCELLED) //301 309 ); 302 310 303 311 /** .. .. @@ -314,4 +322,18 @@ 314 322 return validStatuses != null && validStatuses.contains(currentStatus); 315 323 } 316 324 } 325 +326 + public License findLicenseByRequestData(String requestData, EntityManager em) {327 + TypedQuery<License> query = em.createNamedQuery("list-active-licenses-by-req-data", License.class);328 + query.setParameter("hash", BlockedRequest.generateHash(requestData));329 + return null;330 + }331 +332 + public String getReqDataHash() {333 + return reqDataHash;334 + }335 +336 + public void setReqDataHash(String reqDataHash) {337 + this.reqDataHash = reqDataHash;338 + }317 339 } securis/src/main/java/net/curisit/securis/db/LicenseHistory.java
.. .. @@ -12,18 +12,19 @@ 12 12 import javax.persistence.NamedQuery; 13 13 import javax.persistence.Table; 14 14 15 -import org.codehaus.jackson.annotate.JsonAutoDetect;16 -import org.codehaus.jackson.annotate.JsonIgnore;17 -import org.codehaus.jackson.annotate.JsonIgnoreProperties;18 -import org.codehaus.jackson.annotate.JsonProperty;19 -import org.codehaus.jackson.map.annotate.JsonSerialize;15 +import com.fasterxml.jackson.annotation.JsonAutoDetect;16 +import com.fasterxml.jackson.annotation.JsonIgnore;17 +import com.fasterxml.jackson.annotation.JsonIgnoreProperties;18 +import com.fasterxml.jackson.annotation.JsonInclude;19 +import com.fasterxml.jackson.annotation.JsonInclude.Include;20 +import com.fasterxml.jackson.annotation.JsonProperty;20 21 21 22 /** 22 23 * Entity implementation class for Entity: license 23 24 * 24 25 */ 25 26 @JsonAutoDetect 26 -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)27 +@JsonInclude(Include.NON_NULL)27 28 @Entity 28 29 @Table(name = "license_history") 29 30 @JsonIgnoreProperties(ignoreUnknown = true) securis/src/main/java/net/curisit/securis/db/LicenseStatus.java
.. .. @@ -1,7 +1,7 @@ 1 1 package net.curisit.securis.db; 2 2 3 -import org.codehaus.jackson.annotate.JsonCreator;4 -import org.codehaus.jackson.annotate.JsonValue;3 +import com.fasterxml.jackson.annotation.JsonCreator;4 +import com.fasterxml.jackson.annotation.JsonValue;5 5 6 6 /** 7 7 * Contains the possible license statuses. For further details: securis/src/main/java/net/curisit/securis/db/LicenseType.java
.. .. @@ -18,24 +18,26 @@ 18 18 19 19 import org.apache.logging.log4j.LogManager; 20 20 import org.apache.logging.log4j.Logger; 21 -import org.codehaus.jackson.annotate.JsonAutoDetect;22 -import org.codehaus.jackson.annotate.JsonIgnore;23 -import org.codehaus.jackson.annotate.JsonIgnoreProperties;24 -import org.codehaus.jackson.annotate.JsonProperty;25 -import org.codehaus.jackson.map.annotate.JsonSerialize;21 +22 +import com.fasterxml.jackson.annotation.JsonAutoDetect;23 +import com.fasterxml.jackson.annotation.JsonIgnore;24 +import com.fasterxml.jackson.annotation.JsonIgnoreProperties;25 +import com.fasterxml.jackson.annotation.JsonInclude;26 +import com.fasterxml.jackson.annotation.JsonInclude.Include;27 +import com.fasterxml.jackson.annotation.JsonProperty;26 28 27 29 /** 28 30 * Entity implementation class for Entity: license_type 29 31 * 30 32 */ 31 33 @JsonAutoDetect 32 -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)34 +@JsonInclude(Include.NON_NULL)33 35 @JsonIgnoreProperties(ignoreUnknown = true) 34 36 @Entity 35 37 @Table(name = "license_type") 36 38 @NamedQueries({ 37 - @NamedQuery(name = "list-license_types", query = "SELECT lt FROM LicenseType lt"),38 - @NamedQuery(name = "list-application-license_types", query = "SELECT lt FROM LicenseType lt where lt.application.id = :appId")39 + @NamedQuery(name = "list-license_types", query = "SELECT lt FROM LicenseType lt"),40 + @NamedQuery(name = "list-application-license_types", query = "SELECT lt FROM LicenseType lt where lt.application.id = :appId")39 41 }) 40 42 public class LicenseType implements Serializable { 41 43 .. .. @@ -62,7 +64,7 @@ 62 64 63 65 @OneToMany(fetch = FetchType.LAZY, mappedBy = "licenseType") 64 66 private Set<LicenseTypeMetadata> metadata; 65 -67 +66 68 public Set<LicenseTypeMetadata> getMetadata() { 67 69 return metadata; 68 70 } .. .. @@ -143,13 +145,13 @@ 143 145 public boolean equals(Object obj) { 144 146 if (!(obj instanceof LicenseType)) 145 147 return false; 146 - LicenseType other = (LicenseType)obj;148 + LicenseType other = (LicenseType) obj;147 149 return id.equals(other.id); 148 150 } 149 -151 +150 152 @Override 151 153 public int hashCode() { 152 -154 +153 155 return (id == null ? 0 : id.hashCode()); 154 156 } 155 157 } securis/src/main/java/net/curisit/securis/db/LicenseTypeMetadata.java
.. .. @@ -3,7 +3,6 @@ 3 3 import java.io.Serializable; 4 4 5 5 import javax.persistence.Entity; 6 -import javax.persistence.GeneratedValue;7 6 import javax.persistence.Id; 8 7 import javax.persistence.JoinColumn; 9 8 import javax.persistence.ManyToOne; .. .. @@ -11,18 +10,18 @@ 11 10 import javax.persistence.NamedQuery; 12 11 import javax.persistence.Table; 13 12 14 -import org.codehaus.jackson.annotate.JsonAutoDetect;15 -import org.codehaus.jackson.annotate.JsonIgnore;16 -import org.codehaus.jackson.annotate.JsonIgnoreProperties;17 -import org.codehaus.jackson.annotate.JsonProperty;18 -import org.codehaus.jackson.map.annotate.JsonSerialize;13 +import com.fasterxml.jackson.annotation.JsonAutoDetect;14 +import com.fasterxml.jackson.annotation.JsonIgnore;15 +import com.fasterxml.jackson.annotation.JsonInclude;16 +import com.fasterxml.jackson.annotation.JsonInclude.Include;17 +import com.fasterxml.jackson.annotation.JsonProperty;19 18 20 19 /** 21 20 * Entity implementation class for Entity: licensetype_metadata 22 21 * 23 22 */ 24 23 @JsonAutoDetect 25 -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)24 +@JsonInclude(Include.NON_NULL)26 25 @Entity 27 26 @Table(name = "licensetype_metadata") 28 27 @NamedQueries({ .. .. @@ -88,13 +87,13 @@ 88 87 public boolean equals(Object obj) { 89 88 if (!(obj instanceof LicenseTypeMetadata)) 90 89 return false; 91 - LicenseTypeMetadata other = (LicenseTypeMetadata)obj;90 + LicenseTypeMetadata other = (LicenseTypeMetadata) obj;92 91 return key.equals(other.key) && (licenseType == null || licenseType.equals(other.licenseType)); 93 92 } 94 -93 +95 94 @Override 96 95 public int hashCode() { 97 -96 +98 97 return key.hashCode() + (licenseType == null ? 0 : licenseType.hashCode()); 99 98 } 100 99 securis/src/main/java/net/curisit/securis/db/Organization.java
.. .. @@ -23,17 +23,19 @@ 23 23 24 24 import org.apache.logging.log4j.LogManager; 25 25 import org.apache.logging.log4j.Logger; 26 -import org.codehaus.jackson.annotate.JsonAutoDetect;27 -import org.codehaus.jackson.annotate.JsonIgnore;28 -import org.codehaus.jackson.annotate.JsonProperty;29 -import org.codehaus.jackson.map.annotate.JsonSerialize;26 +27 +import com.fasterxml.jackson.annotation.JsonAutoDetect;28 +import com.fasterxml.jackson.annotation.JsonIgnore;29 +import com.fasterxml.jackson.annotation.JsonInclude;30 +import com.fasterxml.jackson.annotation.JsonInclude.Include;31 +import com.fasterxml.jackson.annotation.JsonProperty;30 32 31 33 /** 32 34 * Entity implementation class for Entity: organization 33 35 * 34 36 */ 35 37 @JsonAutoDetect 36 -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)38 +@JsonInclude(Include.NON_NULL)37 39 @Entity 38 40 @Table(name = "organization") 39 41 @NamedQueries({ securis/src/main/java/net/curisit/securis/db/Pack.java
.. .. @@ -17,18 +17,19 @@ 17 17 import javax.persistence.OneToMany; 18 18 import javax.persistence.Table; 19 19 20 -import org.codehaus.jackson.annotate.JsonAutoDetect;21 -import org.codehaus.jackson.annotate.JsonIgnore;22 -import org.codehaus.jackson.annotate.JsonIgnoreProperties;23 -import org.codehaus.jackson.annotate.JsonProperty;24 -import org.codehaus.jackson.map.annotate.JsonSerialize;20 +import com.fasterxml.jackson.annotation.JsonAutoDetect;21 +import com.fasterxml.jackson.annotation.JsonIgnore;22 +import com.fasterxml.jackson.annotation.JsonIgnoreProperties;23 +import com.fasterxml.jackson.annotation.JsonInclude;24 +import com.fasterxml.jackson.annotation.JsonInclude.Include;25 +import com.fasterxml.jackson.annotation.JsonProperty;25 26 26 27 /** 27 28 * Entity implementation class for Entity: pack 28 29 * 29 30 */ 30 31 @JsonAutoDetect 31 -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)32 +@JsonInclude(Include.NON_NULL)32 33 @Entity 33 34 @Table(name = "pack") 34 35 @JsonIgnoreProperties(ignoreUnknown = true) securis/src/main/java/net/curisit/securis/db/PackMetadata.java
.. .. @@ -3,7 +3,6 @@ 3 3 import java.io.Serializable; 4 4 5 5 import javax.persistence.Entity; 6 -import javax.persistence.GeneratedValue;7 6 import javax.persistence.Id; 8 7 import javax.persistence.JoinColumn; 9 8 import javax.persistence.ManyToOne; .. .. @@ -11,17 +10,18 @@ 11 10 import javax.persistence.NamedQuery; 12 11 import javax.persistence.Table; 13 12 14 -import org.codehaus.jackson.annotate.JsonAutoDetect;15 -import org.codehaus.jackson.annotate.JsonIgnore;16 -import org.codehaus.jackson.annotate.JsonProperty;17 -import org.codehaus.jackson.map.annotate.JsonSerialize;13 +import com.fasterxml.jackson.annotation.JsonAutoDetect;14 +import com.fasterxml.jackson.annotation.JsonIgnore;15 +import com.fasterxml.jackson.annotation.JsonInclude;16 +import com.fasterxml.jackson.annotation.JsonInclude.Include;17 +import com.fasterxml.jackson.annotation.JsonProperty;18 18 19 19 /** 20 20 * Entity implementation class for Entity: pack_metadata 21 21 * 22 22 */ 23 23 @JsonAutoDetect 24 -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)24 +@JsonInclude(Include.NON_NULL)25 25 @Entity 26 26 @Table(name = "pack_metadata") 27 27 @NamedQueries({ .. .. @@ -92,18 +92,18 @@ 92 92 public void setReadonly(boolean readonly) { 93 93 this.readonly = readonly; 94 94 } 95 -95 +96 96 @Override 97 97 public boolean equals(Object obj) { 98 98 if (!(obj instanceof PackMetadata)) 99 99 return false; 100 - PackMetadata other = (PackMetadata)obj;100 + PackMetadata other = (PackMetadata) obj;101 101 return key.equals(other.key) && (pack == null || pack.equals(other.pack)); 102 102 } 103 -103 +104 104 @Override 105 105 public int hashCode() { 106 -106 +107 107 return key.hashCode() + (pack == null ? 0 : pack.hashCode()); 108 108 } 109 109 securis/src/main/java/net/curisit/securis/db/PackStatus.java
.. .. @@ -1,7 +1,7 @@ 1 1 package net.curisit.securis.db; 2 2 3 -import org.codehaus.jackson.annotate.JsonCreator;4 -import org.codehaus.jackson.annotate.JsonValue;3 +import com.fasterxml.jackson.annotation.JsonCreator;4 +import com.fasterxml.jackson.annotation.JsonValue;5 5 6 6 /** 7 7 * Contains the possible pack statuses. For further details: securis/src/main/java/net/curisit/securis/db/User.java
.. .. @@ -17,17 +17,18 @@ 17 17 import javax.persistence.NamedQuery; 18 18 import javax.persistence.Table; 19 19 20 -import org.codehaus.jackson.annotate.JsonAutoDetect;21 -import org.codehaus.jackson.annotate.JsonIgnore;22 -import org.codehaus.jackson.annotate.JsonProperty;23 -import org.codehaus.jackson.map.annotate.JsonSerialize;20 +import com.fasterxml.jackson.annotation.JsonAutoDetect;21 +import com.fasterxml.jackson.annotation.JsonIgnore;22 +import com.fasterxml.jackson.annotation.JsonInclude;23 +import com.fasterxml.jackson.annotation.JsonInclude.Include;24 +import com.fasterxml.jackson.annotation.JsonProperty;24 25 25 26 /** 26 27 * Entity implementation class for Entity: Users 27 28 * 28 29 */ 29 30 @JsonAutoDetect 30 -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)31 +@JsonInclude(Include.NON_NULL)31 32 @Entity 32 33 @Table(name = "user") 33 34 @NamedQueries({ securis/src/main/java/net/curisit/securis/services/LicenseResource.java
.. .. @@ -31,9 +31,7 @@ 31 31 import javax.ws.rs.core.Response; 32 32 import javax.ws.rs.core.Response.Status; 33 33 34 -import net.curisit.integrity.commons.JsonUtils;35 34 import net.curisit.integrity.commons.Utils; 36 -import net.curisit.integrity.exception.CurisException;37 35 import net.curisit.securis.DefaultExceptionHandler; 38 36 import net.curisit.securis.LicenseGenerator; 39 37 import net.curisit.securis.SeCurisException; .. .. @@ -41,6 +39,7 @@ 41 39 import net.curisit.securis.beans.RequestBean; 42 40 import net.curisit.securis.beans.SignedLicenseBean; 43 41 import net.curisit.securis.db.Application; 42 +import net.curisit.securis.db.BlockedRequest;44 43 import net.curisit.securis.db.License; 45 44 import net.curisit.securis.db.LicenseHistory; 46 45 import net.curisit.securis.db.LicenseStatus; .. .. @@ -52,6 +51,7 @@ 52 51 import net.curisit.securis.services.exception.SeCurisServiceException; 53 52 import net.curisit.securis.services.exception.SeCurisServiceException.ErrorCodes; 54 53 import net.curisit.securis.utils.EmailManager; 54 +import net.curisit.securis.utils.JsonUtils;55 55 import net.curisit.securis.utils.Params; 56 56 import net.curisit.securis.utils.TokenHelper; 57 57 .. .. @@ -331,8 +331,12 @@ 331 331 // directly to ACTIVE 332 332 lic.setStatus(LicenseStatus.ACTIVE); 333 333 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 + }334 338 lic.setLicenseData(JsonUtils.toJSON(signedLicense)); 335 - } catch (CurisException e) {339 + } catch (SeCurisException e) {336 340 LOG.error("Error generaing license JSON", e); 337 341 throw new SeCurisServiceException(ErrorCodes.INVALID_FORMAT, "Error generaing license JSON"); 338 342 } .. .. @@ -386,7 +390,7 @@ 386 390 RequestBean rb = null; 387 391 try { 388 392 rb = JsonUtils.json2object(requestData, RequestBean.class); 389 - } catch (CurisException e) {393 + } catch (SeCurisException e) {390 394 throw new SeCurisServiceException(ErrorCodes.INVALID_REQUEST_DATA_FORMAT, "Request data has not a valid format"); 391 395 } 392 396 .. .. @@ -422,14 +426,18 @@ 422 426 currentLicense.setCode(lic.getCode()); 423 427 currentLicense.setFullName(lic.getFullName()); 424 428 currentLicense.setEmail(lic.getEmail()); 425 - if (lic.getRequestData() != null) {429 + if (lic.getRequestData() != null && currentLicense.getStatus() == LicenseStatus.CREATED) {426 430 SignedLicenseBean signedLicense = generateLicense(lic, em); 427 - // If user provide a request data the license status is passed428 - // directly to ACTIVE429 431 lic.setStatus(LicenseStatus.ACTIVE); 430 432 try { 433 + // Next line is necessary to normalize the String that contains434 + // 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 + }431 439 lic.setLicenseData(JsonUtils.toJSON(signedLicense)); 432 - } catch (CurisException e) {440 + } catch (SeCurisException e) {433 441 LOG.error("Error generaing license JSON", e); 434 442 throw new SeCurisServiceException(ErrorCodes.INVALID_FORMAT, "Error generaing license JSON"); 435 443 } .. .. @@ -465,24 +473,32 @@ 465 473 } 466 474 467 475 @DELETE 468 - @Path("/{licId}")476 + @Path("/{licId}/block")469 477 @Transactional 470 478 @Securable 471 479 @Produces({ 472 480 MediaType.APPLICATION_JSON 473 481 }) 474 482 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);476 484 EntityManager em = emProvider.get(); 477 485 License lic = getCurrentLicense(licId, bsc, em); 478 486 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");483 490 } 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());484 498 485 - em.remove(lic);499 + em.persist(blockedReq);500 +501 + em.persist(createLicenseHistoryAction(lic, getUser(bsc, em), LicenseHistory.Actions.BLOCK));486 502 return Response.ok(Utils.createMap("success", true, "id", licId)).build(); 487 503 } 488 504 securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java
.. .. @@ -28,7 +28,6 @@ 28 28 import net.curisit.securis.DefaultExceptionHandler; 29 29 import net.curisit.securis.SeCurisException; 30 30 import net.curisit.securis.db.Application; 31 -import net.curisit.securis.db.ApplicationMetadata;32 31 import net.curisit.securis.db.LicenseType; 33 32 import net.curisit.securis.db.LicenseTypeMetadata; 34 33 import net.curisit.securis.security.BasicSecurityContext; securis/src/main/java/net/curisit/securis/services/PackResource.java
.. .. @@ -27,7 +27,6 @@ 27 27 import net.curisit.securis.DefaultExceptionHandler; 28 28 import net.curisit.securis.SeCurisException; 29 29 import net.curisit.securis.db.LicenseType; 30 -import net.curisit.securis.db.PackMetadata;31 30 import net.curisit.securis.db.Organization; 32 31 import net.curisit.securis.db.Pack; 33 32 import net.curisit.securis.db.PackMetadata; securis/src/main/java/net/curisit/securis/services/exception/SeCurisServiceException.java
.. .. @@ -31,11 +31,14 @@ 31 31 public static int UNAUTHORIZED_ACCESS = 1002; 32 32 public static int NOT_FOUND = 1003; 33 33 public static int INVALID_FORMAT = 1004; 34 + public static int WRONG_STATUS = 1005;34 35 35 36 public static int INVALID_LICENSE_REQUEST_DATA = 1100; 36 37 public static int LICENSE_NOT_READY_FOR_RENEW = 1101; 37 38 38 39 public static int INVALID_REQUEST_DATA = 1201; 39 40 public static int INVALID_REQUEST_DATA_FORMAT = 1202; 41 + public static int BLOCKED_REQUEST_DATA = 1203;42 + public static int DUPLICATED_REQUEST_DATA = 1204;40 43 } 41 44 } securis/src/main/resources/db/schema.sql
.. .. @@ -103,6 +103,7 @@ 103 103 id INT NOT NULL auto_increment, 104 104 code VARCHAR(100) NOT NULL , 105 105 request_data VARCHAR(1024) NULL , 106 + request_data_hash VARCHAR(64) NULL ,106 107 license_data VARCHAR(1024) NULL , 107 108 pack_id INT NOT NULL, 108 109 full_name VARCHAR(150) NULL, .. .. @@ -116,7 +117,9 @@ 116 117 created_by varchar(45) NULL , 117 118 status VARCHAR(2) NOT NULL default 'CR', 118 119 PRIMARY KEY (id)); 119 -120 +121 +create index if not exists lic_hash_req_idx on license(hash_request_data);122 +create index if not exists lic_pack_idx on license(pack_id);120 123 121 124 drop table IF EXISTS license_history; 122 125 CREATE TABLE IF NOT EXISTS license_history ( .. .. @@ -131,9 +134,9 @@ 131 134 132 135 drop table IF EXISTS blocked_request; 133 136 CREATE TABLE IF NOT EXISTS blocked_request ( 134 - hash VARCHAR(256) NOT NULL ,137 + hash VARCHAR(64) NOT NULL ,135 138 request_data VARCHAR(1024) NULL , 136 139 blocked_by varchar(45) NULL , 137 140 creation_timestamp DATETIME NOT NULL default now(), 138 - PRIMARY KEY (id));141 + PRIMARY KEY (hash));139 142 securis/src/main/resources/lic_email.template.en
.. .. @@ -0,0 +1,9 @@ 1 +Hello {0}, the current email contains a license file to be used with the application '{1}'.2 +3 +Please, read the application documentation to learn how to install the license file.4 +5 +This mail has been sent form SeCuris server, please don't answer this mail.6 +7 +--8 +SeCuris support team9 +support@curisit.net