1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.core.persistence.jpa.entity.am;
20
21 import com.fasterxml.jackson.core.type.TypeReference;
22 import java.util.ArrayList;
23 import java.util.HashSet;
24 import java.util.List;
25 import java.util.Set;
26 import javax.persistence.Column;
27 import javax.persistence.Entity;
28 import javax.persistence.Lob;
29 import javax.persistence.PostLoad;
30 import javax.persistence.PostPersist;
31 import javax.persistence.PostUpdate;
32 import javax.persistence.PrePersist;
33 import javax.persistence.PreUpdate;
34 import javax.persistence.Table;
35 import javax.persistence.Transient;
36 import org.apache.syncope.common.lib.types.SAML2SPNameId;
37 import org.apache.syncope.common.lib.types.XmlSecAlgorithm;
38 import org.apache.syncope.core.persistence.api.entity.am.SAML2SPClientApp;
39 import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
40
41 @Entity
42 @Table(name = JPASAML2SPClientApp.TABLE)
43 public class JPASAML2SPClientApp extends AbstractClientApp implements SAML2SPClientApp {
44
45 private static final long serialVersionUID = 6422422526695279794L;
46
47 public static final String TABLE = "SAML2SPClientApp";
48
49 protected static final TypeReference<Set<String>> STRING_TYPEREF = new TypeReference<Set<String>>() {
50 };
51
52 protected static final TypeReference<List<XmlSecAlgorithm>> XMLSECAGO_TYPEREF =
53 new TypeReference<List<XmlSecAlgorithm>>() {
54 };
55
56 @Column(unique = true, nullable = false)
57 private String entityId;
58
59 @Column(nullable = false)
60 private String metadataLocation;
61
62 private String metadataSignatureLocation;
63
64 private boolean signAssertions;
65
66 private boolean signResponses;
67
68 private boolean encryptionOptional;
69
70 private boolean encryptAssertions;
71
72 @Column(name = "reqAuthnContextClass")
73 private String requiredAuthenticationContextClass;
74
75 private SAML2SPNameId requiredNameIdFormat;
76
77 private Integer skewAllowance;
78
79 private String nameIdQualifier;
80
81 @Lob
82 private String assertionAudiences;
83
84 @Transient
85 private Set<String> assertionAudiencesSet = new HashSet<>();
86
87 @Column(name = "spNameIdQualifier")
88 private String serviceProviderNameIdQualifier;
89
90 @Column(name = "sigAlgs")
91 @Lob
92 private String signingSignatureAlgorithms;
93
94 @Transient
95 private List<XmlSecAlgorithm> signingSignatureAlgorithmsList = new ArrayList<>();
96
97 @Column(name = "sigRefDigestMethod")
98 @Lob
99 private String signingSignatureReferenceDigestMethods;
100
101 @Transient
102 private List<XmlSecAlgorithm> signingSignatureReferenceDigestMethodsList = new ArrayList<>();
103
104 @Column(name = "encDataAlg")
105 @Lob
106 private String encryptionDataAlgorithms;
107
108 @Transient
109 private List<XmlSecAlgorithm> encryptionDataAlgorithmsList = new ArrayList<>();
110
111 @Column(name = "encKeyAlg")
112 @Lob
113 private String encryptionKeyAlgorithms;
114
115 @Transient
116 private List<XmlSecAlgorithm> encryptionKeyAlgorithmsList = new ArrayList<>();
117
118 @Column(name = "sigBlAlg")
119 @Lob
120 private String signingSignatureBlackListedAlgorithms;
121
122 @Transient
123 private List<XmlSecAlgorithm> signingSignatureBlackListedAlgorithmsList = new ArrayList<>();
124
125 @Column(name = "encBlAlg")
126 @Lob
127 private String encryptionBlackListedAlgorithms;
128
129 @Transient
130 private List<XmlSecAlgorithm> encryptionBlackListedAlgorithmsList = new ArrayList<>();
131
132 @Override
133 public String getEntityId() {
134 return entityId;
135 }
136
137 @Override
138 public void setEntityId(final String entityId) {
139 this.entityId = entityId;
140 }
141
142 @Override
143 public String getMetadataLocation() {
144 return metadataLocation;
145 }
146
147 @Override
148 public void setMetadataLocation(final String metadataLocation) {
149 this.metadataLocation = metadataLocation;
150 }
151
152 @Override
153 public String getMetadataSignatureLocation() {
154 return metadataSignatureLocation;
155 }
156
157 @Override
158 public void setMetadataSignatureLocation(final String metadataSignatureLocation) {
159 this.metadataSignatureLocation = metadataSignatureLocation;
160 }
161
162 @Override
163 public boolean isSignAssertions() {
164 return signAssertions;
165 }
166
167 @Override
168 public void setSignAssertions(final boolean signAssertions) {
169 this.signAssertions = signAssertions;
170 }
171
172 @Override
173 public boolean isSignResponses() {
174 return signResponses;
175 }
176
177 @Override
178 public void setSignResponses(final boolean signResponses) {
179 this.signResponses = signResponses;
180 }
181
182 @Override
183 public boolean isEncryptionOptional() {
184 return encryptionOptional;
185 }
186
187 @Override
188 public void setEncryptionOptional(final boolean encryptionOptional) {
189 this.encryptionOptional = encryptionOptional;
190 }
191
192 @Override
193 public boolean isEncryptAssertions() {
194 return encryptAssertions;
195 }
196
197 @Override
198 public void setEncryptAssertions(final boolean encryptAssertions) {
199 this.encryptAssertions = encryptAssertions;
200 }
201
202 @Override
203 public String getRequiredAuthenticationContextClass() {
204 return requiredAuthenticationContextClass;
205 }
206
207 @Override
208 public void setRequiredAuthenticationContextClass(final String requiredAuthenticationContextClass) {
209 this.requiredAuthenticationContextClass = requiredAuthenticationContextClass;
210 }
211
212 @Override
213 public SAML2SPNameId getRequiredNameIdFormat() {
214 return requiredNameIdFormat;
215 }
216
217 @Override
218 public void setRequiredNameIdFormat(final SAML2SPNameId requiredNameIdFormat) {
219 this.requiredNameIdFormat = requiredNameIdFormat;
220 }
221
222 @Override
223 public Integer getSkewAllowance() {
224 return skewAllowance;
225 }
226
227 @Override
228 public void setSkewAllowance(final Integer skewAllowance) {
229 this.skewAllowance = skewAllowance;
230 }
231
232 @Override
233 public String getNameIdQualifier() {
234 return nameIdQualifier;
235 }
236
237 @Override
238 public void setNameIdQualifier(final String nameIdQualifier) {
239 this.nameIdQualifier = nameIdQualifier;
240 }
241
242 @Override
243 public Set<String> getAssertionAudiences() {
244 return assertionAudiencesSet;
245 }
246
247 @Override
248 public String getServiceProviderNameIdQualifier() {
249 return serviceProviderNameIdQualifier;
250 }
251
252 @Override
253 public void setServiceProviderNameIdQualifier(final String serviceProviderNameIdQualifier) {
254 this.serviceProviderNameIdQualifier = serviceProviderNameIdQualifier;
255 }
256
257 @Override
258 public List<XmlSecAlgorithm> getSigningSignatureAlgorithms() {
259 return signingSignatureAlgorithmsList;
260 }
261
262 @Override
263 public List<XmlSecAlgorithm> getSigningSignatureReferenceDigestMethods() {
264 return signingSignatureReferenceDigestMethodsList;
265 }
266
267 @Override
268 public List<XmlSecAlgorithm> getEncryptionDataAlgorithms() {
269 return encryptionDataAlgorithmsList;
270 }
271
272 @Override
273 public List<XmlSecAlgorithm> getEncryptionKeyAlgorithms() {
274 return encryptionKeyAlgorithmsList;
275 }
276
277 @Override
278 public List<XmlSecAlgorithm> getSigningSignatureBlackListedAlgorithms() {
279 return signingSignatureBlackListedAlgorithmsList;
280 }
281
282 @Override
283 public List<XmlSecAlgorithm> getEncryptionBlackListedAlgorithms() {
284 return encryptionBlackListedAlgorithmsList;
285 }
286
287 protected void json2list(final boolean clearFirst) {
288 if (clearFirst) {
289 getAssertionAudiences().clear();
290 getSigningSignatureAlgorithms().clear();
291 getSigningSignatureReferenceDigestMethods().clear();
292 getEncryptionDataAlgorithms().clear();
293 getEncryptionKeyAlgorithms().clear();
294 getSigningSignatureBlackListedAlgorithms().clear();
295 getEncryptionBlackListedAlgorithms().clear();
296 }
297 if (assertionAudiences != null) {
298 getAssertionAudiences().addAll(
299 POJOHelper.deserialize(assertionAudiences, STRING_TYPEREF));
300 }
301 if (signingSignatureAlgorithms != null) {
302 getSigningSignatureAlgorithms().addAll(
303 POJOHelper.deserialize(signingSignatureAlgorithms, XMLSECAGO_TYPEREF));
304 }
305 if (signingSignatureReferenceDigestMethods != null) {
306 getSigningSignatureReferenceDigestMethods().addAll(
307 POJOHelper.deserialize(signingSignatureReferenceDigestMethods, XMLSECAGO_TYPEREF));
308 }
309 if (encryptionDataAlgorithms != null) {
310 getEncryptionDataAlgorithms().addAll(
311 POJOHelper.deserialize(encryptionDataAlgorithms, XMLSECAGO_TYPEREF));
312 }
313 if (encryptionKeyAlgorithms != null) {
314 getEncryptionKeyAlgorithms().addAll(
315 POJOHelper.deserialize(encryptionKeyAlgorithms, XMLSECAGO_TYPEREF));
316 }
317 if (signingSignatureBlackListedAlgorithms != null) {
318 getSigningSignatureBlackListedAlgorithms().addAll(
319 POJOHelper.deserialize(signingSignatureBlackListedAlgorithms, XMLSECAGO_TYPEREF));
320 }
321 if (encryptionBlackListedAlgorithms != null) {
322 getEncryptionBlackListedAlgorithms().addAll(
323 POJOHelper.deserialize(encryptionBlackListedAlgorithms, XMLSECAGO_TYPEREF));
324 }
325 }
326
327 @PostLoad
328 public void postLoad() {
329 json2list(false);
330 }
331
332 @PostPersist
333 @PostUpdate
334 public void postSave() {
335 json2list(true);
336 }
337
338 @PrePersist
339 @PreUpdate
340 public void list2json() {
341 assertionAudiences = POJOHelper.serialize(getAssertionAudiences());
342 signingSignatureAlgorithms = POJOHelper.serialize(getSigningSignatureAlgorithms());
343 signingSignatureReferenceDigestMethods = POJOHelper.serialize(getSigningSignatureReferenceDigestMethods());
344 encryptionDataAlgorithms = POJOHelper.serialize(getEncryptionDataAlgorithms());
345 encryptionKeyAlgorithms = POJOHelper.serialize(getEncryptionKeyAlgorithms());
346 signingSignatureBlackListedAlgorithms = POJOHelper.serialize(getSigningSignatureBlackListedAlgorithms());
347 encryptionBlackListedAlgorithms = POJOHelper.serialize(getEncryptionBlackListedAlgorithms());
348 }
349 }