View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
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 }