rsanchez
2014-10-23 bc2cedc83f6353259ea1364f98ce60bf11d7ecf4
#2021 feature - Upgtaded Jackson annotations version and added request
data hash management
1 files added
18 files modified
changed files
securis/src/main/java/net/curisit/securis/db/Application.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/db/ApplicationMetadata.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/db/BlockedRequest.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/db/License.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/db/LicenseHistory.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/db/LicenseStatus.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/db/LicenseType.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/db/LicenseTypeMetadata.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/db/Organization.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/db/Pack.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/db/PackMetadata.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/db/PackStatus.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/db/User.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/LicenseTypeResource.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/services/PackResource.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/services/exception/SeCurisServiceException.java patch | view | blame | history
securis/src/main/resources/db/schema.sql patch | view | blame | history
securis/src/main/resources/lic_email.template.en patch | view | blame | history
securis/src/main/java/net/curisit/securis/db/Application.java
....@@ -14,18 +14,18 @@
1414 import javax.persistence.OneToMany;
1515 import javax.persistence.Table;
1616
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;
2222
2323 /**
2424 * Entity implementation class for Entity: application
2525 *
2626 */
2727 @JsonAutoDetect
28
-@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
28
+@JsonInclude(Include.NON_NULL)
2929 @Entity
3030 @Table(name = "application")
3131 @NamedQueries({
....@@ -113,13 +113,13 @@
113113 public boolean equals(Object obj) {
114114 if (!(obj instanceof Application))
115115 return false;
116
- Application other = (Application)obj;
116
+ Application other = (Application) obj;
117117 return id.equals(other.id);
118118 }
119
-
119
+
120120 @Override
121121 public int hashCode() {
122
-
122
+
123123 return (id == null ? 0 : id.hashCode());
124124 }
125125
securis/src/main/java/net/curisit/securis/db/ApplicationMetadata.java
....@@ -5,7 +5,6 @@
55
66 import javax.persistence.Column;
77 import javax.persistence.Entity;
8
-import javax.persistence.GeneratedValue;
98 import javax.persistence.Id;
109 import javax.persistence.JoinColumn;
1110 import javax.persistence.ManyToOne;
....@@ -13,17 +12,18 @@
1312 import javax.persistence.NamedQuery;
1413 import javax.persistence.Table;
1514
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;
2020
2121 /**
2222 * Entity implementation class for Entity: application_metadata
2323 *
2424 */
2525 @JsonAutoDetect
26
-@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
26
+@JsonInclude(Include.NON_NULL)
2727 @Entity
2828 @Table(name = "application_metadata")
2929 @NamedQueries({
....@@ -49,7 +49,6 @@
4949 @Column(name = "creation_timestamp")
5050 private Date creationTimestamp;
5151
52
-
5352 public String getKey() {
5453 return key;
5554 }
....@@ -73,7 +72,6 @@
7372 public void setCreationTimestamp(Date creationTimestamp) {
7473 this.creationTimestamp = creationTimestamp;
7574 }
76
-
7775
7876 @JsonProperty("application_id")
7977 public Integer getApplicationId() {
....@@ -105,18 +103,18 @@
105103 public void setMandatory(boolean mandatory) {
106104 this.mandatory = mandatory;
107105 }
108
-
106
+
109107 @Override
110108 public boolean equals(Object obj) {
111109 if (!(obj instanceof ApplicationMetadata))
112110 return false;
113
- ApplicationMetadata other = (ApplicationMetadata)obj;
111
+ ApplicationMetadata other = (ApplicationMetadata) obj;
114112 return key.equals(other.key) && (application == null || application.equals(other.application));
115113 }
116
-
114
+
117115 @Override
118116 public int hashCode() {
119
-
117
+
120118 return key.hashCode() + (application == null ? 0 : application.hashCode());
121119 }
122120
securis/src/main/java/net/curisit/securis/db/BlockedRequest.java
....@@ -5,23 +5,27 @@
55
66 import javax.persistence.Column;
77 import javax.persistence.Entity;
8
+import javax.persistence.EntityManager;
89 import javax.persistence.Id;
910 import javax.persistence.JoinColumn;
1011 import javax.persistence.ManyToOne;
1112 import javax.persistence.Table;
1213
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;
1822
1923 /**
2024 * Entity implementation class for Entity: pack
2125 *
2226 */
2327 @JsonAutoDetect
24
-@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
28
+@JsonInclude(Include.NON_NULL)
2529 @Entity
2630 @Table(name = "blocked_request")
2731 @JsonIgnoreProperties(ignoreUnknown = true)
....@@ -58,7 +62,7 @@
5862 if (!(obj instanceof BlockedRequest))
5963 return false;
6064 BlockedRequest other = (BlockedRequest) obj;
61
- return hash.equals(other.hash);
65
+ return (hash == null && other.hash == null) || hash.equals(other.hash);
6266 }
6367
6468 @Override
....@@ -73,6 +77,7 @@
7377
7478 public void setRequestData(String requestData) {
7579 this.requestData = requestData;
80
+ this.hash = generateHash(this.requestData);
7681 }
7782
7883 public User getBlockedBy() {
....@@ -82,4 +87,16 @@
8287 public void setBlockedBy(User blockedBy) {
8388 this.blockedBy = blockedBy;
8489 }
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
+
85102 }
securis/src/main/java/net/curisit/securis/db/License.java
....@@ -8,6 +8,7 @@
88
99 import javax.persistence.Column;
1010 import javax.persistence.Entity;
11
+import javax.persistence.EntityManager;
1112 import javax.persistence.FetchType;
1213 import javax.persistence.GeneratedValue;
1314 import javax.persistence.Id;
....@@ -17,14 +18,15 @@
1718 import javax.persistence.NamedQuery;
1819 import javax.persistence.OneToMany;
1920 import javax.persistence.Table;
21
+import javax.persistence.TypedQuery;
2022
2123 import net.curisit.integrity.commons.Utils;
2224
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;
2830
2931 /**
3032 * Entity implementation class for Entity: license
....@@ -36,7 +38,8 @@
3638 @Table(name = "license")
3739 @JsonIgnoreProperties(ignoreUnknown = true)
3840 @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')")
4043 })
4144 public class License implements Serializable {
4245
....@@ -74,6 +77,10 @@
7477 @Column(name = "request_data")
7578 @JsonProperty("request_data")
7679 private String requestData;
80
+
81
+ @Column(name = "request_data_hash")
82
+ @JsonIgnore
83
+ private String reqDataHash;
7784
7885 @Column(name = "license_data")
7986 @JsonProperty("license_data")
....@@ -286,6 +293,7 @@
286293 public static final int DOWNLOAD = 5;
287294 public static final int CANCEL = 6;
288295 public static final int DELETE = 7;
296
+ public static final int BLOCK = 8;
289297 }
290298
291299 public static class Status {
....@@ -296,8 +304,8 @@
296304 Action.SEND, Arrays.asList(LicenseStatus.ACTIVE, LicenseStatus.PRE_ACTIVE), //
297305 Action.DOWNLOAD, Arrays.asList(LicenseStatus.ACTIVE, LicenseStatus.PRE_ACTIVE), //
298306 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) //
301309 );
302310
303311 /**
....@@ -314,4 +322,18 @@
314322 return validStatuses != null && validStatuses.contains(currentStatus);
315323 }
316324 }
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
+ }
317339 }
securis/src/main/java/net/curisit/securis/db/LicenseHistory.java
....@@ -12,18 +12,19 @@
1212 import javax.persistence.NamedQuery;
1313 import javax.persistence.Table;
1414
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;
2021
2122 /**
2223 * Entity implementation class for Entity: license
2324 *
2425 */
2526 @JsonAutoDetect
26
-@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
27
+@JsonInclude(Include.NON_NULL)
2728 @Entity
2829 @Table(name = "license_history")
2930 @JsonIgnoreProperties(ignoreUnknown = true)
securis/src/main/java/net/curisit/securis/db/LicenseStatus.java
....@@ -1,7 +1,7 @@
11 package net.curisit.securis.db;
22
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;
55
66 /**
77 * Contains the possible license statuses. For further details:
securis/src/main/java/net/curisit/securis/db/LicenseType.java
....@@ -18,24 +18,26 @@
1818
1919 import org.apache.logging.log4j.LogManager;
2020 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;
2628
2729 /**
2830 * Entity implementation class for Entity: license_type
2931 *
3032 */
3133 @JsonAutoDetect
32
-@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
34
+@JsonInclude(Include.NON_NULL)
3335 @JsonIgnoreProperties(ignoreUnknown = true)
3436 @Entity
3537 @Table(name = "license_type")
3638 @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")
3941 })
4042 public class LicenseType implements Serializable {
4143
....@@ -62,7 +64,7 @@
6264
6365 @OneToMany(fetch = FetchType.LAZY, mappedBy = "licenseType")
6466 private Set<LicenseTypeMetadata> metadata;
65
-
67
+
6668 public Set<LicenseTypeMetadata> getMetadata() {
6769 return metadata;
6870 }
....@@ -143,13 +145,13 @@
143145 public boolean equals(Object obj) {
144146 if (!(obj instanceof LicenseType))
145147 return false;
146
- LicenseType other = (LicenseType)obj;
148
+ LicenseType other = (LicenseType) obj;
147149 return id.equals(other.id);
148150 }
149
-
151
+
150152 @Override
151153 public int hashCode() {
152
-
154
+
153155 return (id == null ? 0 : id.hashCode());
154156 }
155157 }
securis/src/main/java/net/curisit/securis/db/LicenseTypeMetadata.java
....@@ -3,7 +3,6 @@
33 import java.io.Serializable;
44
55 import javax.persistence.Entity;
6
-import javax.persistence.GeneratedValue;
76 import javax.persistence.Id;
87 import javax.persistence.JoinColumn;
98 import javax.persistence.ManyToOne;
....@@ -11,18 +10,18 @@
1110 import javax.persistence.NamedQuery;
1211 import javax.persistence.Table;
1312
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;
1918
2019 /**
2120 * Entity implementation class for Entity: licensetype_metadata
2221 *
2322 */
2423 @JsonAutoDetect
25
-@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
24
+@JsonInclude(Include.NON_NULL)
2625 @Entity
2726 @Table(name = "licensetype_metadata")
2827 @NamedQueries({
....@@ -88,13 +87,13 @@
8887 public boolean equals(Object obj) {
8988 if (!(obj instanceof LicenseTypeMetadata))
9089 return false;
91
- LicenseTypeMetadata other = (LicenseTypeMetadata)obj;
90
+ LicenseTypeMetadata other = (LicenseTypeMetadata) obj;
9291 return key.equals(other.key) && (licenseType == null || licenseType.equals(other.licenseType));
9392 }
94
-
93
+
9594 @Override
9695 public int hashCode() {
97
-
96
+
9897 return key.hashCode() + (licenseType == null ? 0 : licenseType.hashCode());
9998 }
10099
securis/src/main/java/net/curisit/securis/db/Organization.java
....@@ -23,17 +23,19 @@
2323
2424 import org.apache.logging.log4j.LogManager;
2525 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;
3032
3133 /**
3234 * Entity implementation class for Entity: organization
3335 *
3436 */
3537 @JsonAutoDetect
36
-@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
38
+@JsonInclude(Include.NON_NULL)
3739 @Entity
3840 @Table(name = "organization")
3941 @NamedQueries({
securis/src/main/java/net/curisit/securis/db/Pack.java
....@@ -17,18 +17,19 @@
1717 import javax.persistence.OneToMany;
1818 import javax.persistence.Table;
1919
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;
2526
2627 /**
2728 * Entity implementation class for Entity: pack
2829 *
2930 */
3031 @JsonAutoDetect
31
-@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
32
+@JsonInclude(Include.NON_NULL)
3233 @Entity
3334 @Table(name = "pack")
3435 @JsonIgnoreProperties(ignoreUnknown = true)
securis/src/main/java/net/curisit/securis/db/PackMetadata.java
....@@ -3,7 +3,6 @@
33 import java.io.Serializable;
44
55 import javax.persistence.Entity;
6
-import javax.persistence.GeneratedValue;
76 import javax.persistence.Id;
87 import javax.persistence.JoinColumn;
98 import javax.persistence.ManyToOne;
....@@ -11,17 +10,18 @@
1110 import javax.persistence.NamedQuery;
1211 import javax.persistence.Table;
1312
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;
1818
1919 /**
2020 * Entity implementation class for Entity: pack_metadata
2121 *
2222 */
2323 @JsonAutoDetect
24
-@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
24
+@JsonInclude(Include.NON_NULL)
2525 @Entity
2626 @Table(name = "pack_metadata")
2727 @NamedQueries({
....@@ -92,18 +92,18 @@
9292 public void setReadonly(boolean readonly) {
9393 this.readonly = readonly;
9494 }
95
-
95
+
9696 @Override
9797 public boolean equals(Object obj) {
9898 if (!(obj instanceof PackMetadata))
9999 return false;
100
- PackMetadata other = (PackMetadata)obj;
100
+ PackMetadata other = (PackMetadata) obj;
101101 return key.equals(other.key) && (pack == null || pack.equals(other.pack));
102102 }
103
-
103
+
104104 @Override
105105 public int hashCode() {
106
-
106
+
107107 return key.hashCode() + (pack == null ? 0 : pack.hashCode());
108108 }
109109
securis/src/main/java/net/curisit/securis/db/PackStatus.java
....@@ -1,7 +1,7 @@
11 package net.curisit.securis.db;
22
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;
55
66 /**
77 * Contains the possible pack statuses. For further details:
securis/src/main/java/net/curisit/securis/db/User.java
....@@ -17,17 +17,18 @@
1717 import javax.persistence.NamedQuery;
1818 import javax.persistence.Table;
1919
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;
2425
2526 /**
2627 * Entity implementation class for Entity: Users
2728 *
2829 */
2930 @JsonAutoDetect
30
-@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
31
+@JsonInclude(Include.NON_NULL)
3132 @Entity
3233 @Table(name = "user")
3334 @NamedQueries({
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
securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java
....@@ -28,7 +28,6 @@
2828 import net.curisit.securis.DefaultExceptionHandler;
2929 import net.curisit.securis.SeCurisException;
3030 import net.curisit.securis.db.Application;
31
-import net.curisit.securis.db.ApplicationMetadata;
3231 import net.curisit.securis.db.LicenseType;
3332 import net.curisit.securis.db.LicenseTypeMetadata;
3433 import net.curisit.securis.security.BasicSecurityContext;
securis/src/main/java/net/curisit/securis/services/PackResource.java
....@@ -27,7 +27,6 @@
2727 import net.curisit.securis.DefaultExceptionHandler;
2828 import net.curisit.securis.SeCurisException;
2929 import net.curisit.securis.db.LicenseType;
30
-import net.curisit.securis.db.PackMetadata;
3130 import net.curisit.securis.db.Organization;
3231 import net.curisit.securis.db.Pack;
3332 import net.curisit.securis.db.PackMetadata;
securis/src/main/java/net/curisit/securis/services/exception/SeCurisServiceException.java
....@@ -31,11 +31,14 @@
3131 public static int UNAUTHORIZED_ACCESS = 1002;
3232 public static int NOT_FOUND = 1003;
3333 public static int INVALID_FORMAT = 1004;
34
+ public static int WRONG_STATUS = 1005;
3435
3536 public static int INVALID_LICENSE_REQUEST_DATA = 1100;
3637 public static int LICENSE_NOT_READY_FOR_RENEW = 1101;
3738
3839 public static int INVALID_REQUEST_DATA = 1201;
3940 public static int INVALID_REQUEST_DATA_FORMAT = 1202;
41
+ public static int BLOCKED_REQUEST_DATA = 1203;
42
+ public static int DUPLICATED_REQUEST_DATA = 1204;
4043 }
4144 }
securis/src/main/resources/db/schema.sql
....@@ -103,6 +103,7 @@
103103 id INT NOT NULL auto_increment,
104104 code VARCHAR(100) NOT NULL ,
105105 request_data VARCHAR(1024) NULL ,
106
+ request_data_hash VARCHAR(64) NULL ,
106107 license_data VARCHAR(1024) NULL ,
107108 pack_id INT NOT NULL,
108109 full_name VARCHAR(150) NULL,
....@@ -116,7 +117,9 @@
116117 created_by varchar(45) NULL ,
117118 status VARCHAR(2) NOT NULL default 'CR',
118119 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);
120123
121124 drop table IF EXISTS license_history;
122125 CREATE TABLE IF NOT EXISTS license_history (
....@@ -131,9 +134,9 @@
131134
132135 drop table IF EXISTS blocked_request;
133136 CREATE TABLE IF NOT EXISTS blocked_request (
134
- hash VARCHAR(256) NOT NULL ,
137
+ hash VARCHAR(64) NOT NULL ,
135138 request_data VARCHAR(1024) NULL ,
136139 blocked_by varchar(45) NULL ,
137140 creation_timestamp DATETIME NOT NULL default now(),
138
- PRIMARY KEY (id));
141
+ PRIMARY KEY (hash));
139142
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 team
9
+support@curisit.net