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.HashSet;
23  import java.util.Set;
24  import javax.persistence.Column;
25  import javax.persistence.Entity;
26  import javax.persistence.EnumType;
27  import javax.persistence.Enumerated;
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.OIDCClientAuthenticationMethod;
37  import org.apache.syncope.common.lib.types.OIDCGrantType;
38  import org.apache.syncope.common.lib.types.OIDCResponseType;
39  import org.apache.syncope.common.lib.types.OIDCSubjectType;
40  import org.apache.syncope.core.persistence.api.entity.am.OIDCRPClientApp;
41  import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
42  
43  @Entity
44  @Table(name = JPAOIDCRPClientApp.TABLE)
45  public class JPAOIDCRPClientApp extends AbstractClientApp implements OIDCRPClientApp {
46  
47      private static final long serialVersionUID = 7422422526695279794L;
48  
49      public static final String TABLE = "OIDCRPClientApp";
50  
51      protected static final TypeReference<Set<String>> STRING_TYPEREF = new TypeReference<Set<String>>() {
52      };
53  
54      protected static final TypeReference<Set<OIDCGrantType>> GRANT_TYPE_TYPEREF =
55              new TypeReference<Set<OIDCGrantType>>() {
56      };
57  
58      protected static final TypeReference<Set<OIDCResponseType>> RESPONSE_TYPE_TYPEREF =
59              new TypeReference<Set<OIDCResponseType>>() {
60      };
61  
62      protected static final TypeReference<Set<String>> SCOPE_TYPEREF =
63              new TypeReference<Set<String>>() {
64      };
65  
66      @Column(unique = true, nullable = false)
67      private String clientId;
68  
69      private String clientSecret;
70  
71      private boolean signIdToken;
72  
73      private boolean jwtAccessToken;
74  
75      private boolean bypassApprovalPrompt = true;
76  
77      private boolean generateRefreshToken = true;
78  
79      @Enumerated(EnumType.STRING)
80      private OIDCSubjectType subjectType;
81  
82      @Lob
83      private String redirectUris;
84  
85      @Transient
86      private Set<String> redirectUrisSet = new HashSet<>();
87  
88      @Lob
89      private String supportedGrantTypes;
90  
91      @Transient
92      private Set<OIDCGrantType> supportedGrantTypesSet = new HashSet<>();
93  
94      @Lob
95      private String supportedResponseTypes;
96  
97      @Transient
98      private Set<OIDCResponseType> supportedResponseTypesSet = new HashSet<>();
99  
100     @Lob
101     private String scopes;
102 
103     @Transient
104     private Set<String> scopesSet = new HashSet<>();
105 
106     @Lob
107     private String jwks;
108 
109     private String jwksUri;
110 
111     @Enumerated(EnumType.STRING)
112     private OIDCClientAuthenticationMethod tokenEndpointAuthenticationMethod;
113 
114     private String logoutUri;
115 
116     @Override
117     public Set<String> getRedirectUris() {
118         return redirectUrisSet;
119     }
120 
121     @Override
122     public String getClientId() {
123         return clientId;
124     }
125 
126     @Override
127     public void setClientId(final String clientId) {
128         this.clientId = clientId;
129     }
130 
131     @Override
132     public String getClientSecret() {
133         return clientSecret;
134     }
135 
136     @Override
137     public void setClientSecret(final String clientSecret) {
138         this.clientSecret = clientSecret;
139     }
140 
141     @Override
142     public boolean isSignIdToken() {
143         return signIdToken;
144     }
145 
146     @Override
147     public void setSignIdToken(final boolean signIdToken) {
148         this.signIdToken = signIdToken;
149     }
150 
151     @Override
152     public boolean isJwtAccessToken() {
153         return jwtAccessToken;
154     }
155 
156     @Override
157     public void setJwtAccessToken(final boolean jwtAccessToken) {
158         this.jwtAccessToken = jwtAccessToken;
159     }
160 
161     @Override
162     public boolean isBypassApprovalPrompt() {
163         return bypassApprovalPrompt;
164     }
165 
166     @Override
167     public void setBypassApprovalPrompt(final boolean bypassApprovalPrompt) {
168         this.bypassApprovalPrompt = bypassApprovalPrompt;
169     }
170 
171     @Override
172     public boolean isGenerateRefreshToken() {
173         return generateRefreshToken;
174     }
175 
176     @Override
177     public void setGenerateRefreshToken(final boolean generateRefreshToken) {
178         this.generateRefreshToken = generateRefreshToken;
179     }
180 
181     @Override
182     public OIDCSubjectType getSubjectType() {
183         return subjectType;
184     }
185 
186     @Override
187     public void setSubjectType(final OIDCSubjectType subjectType) {
188         this.subjectType = subjectType;
189     }
190 
191     @Override
192     public Set<OIDCGrantType> getSupportedGrantTypes() {
193         return supportedGrantTypesSet;
194     }
195 
196     @Override
197     public Set<OIDCResponseType> getSupportedResponseTypes() {
198         return supportedResponseTypesSet;
199     }
200 
201     @Override
202     public Set<String> getScopes() {
203         return scopesSet;
204     }
205 
206     @Override
207     public String getJwks() {
208         return jwks;
209     }
210 
211     @Override
212     public void setJwks(final String jwks) {
213         this.jwks = jwks;
214     }
215 
216     @Override
217     public String getJwksUri() {
218         return jwksUri;
219     }
220 
221     @Override
222     public void setJwksUri(final String jwksUri) {
223         this.jwksUri = jwksUri;
224     }
225 
226     @Override
227     public OIDCClientAuthenticationMethod getTokenEndpointAuthenticationMethod() {
228         return tokenEndpointAuthenticationMethod;
229     }
230 
231     @Override
232     public void setTokenEndpointAuthenticationMethod(
233             final OIDCClientAuthenticationMethod tokenEndpointAuthenticationMethod) {
234 
235         this.tokenEndpointAuthenticationMethod = tokenEndpointAuthenticationMethod;
236     }
237 
238     @Override
239     public String getLogoutUri() {
240         return logoutUri;
241     }
242 
243     @Override
244     public void setLogoutUri(final String logoutUri) {
245         this.logoutUri = logoutUri;
246     }
247 
248     protected void json2list(final boolean clearFirst) {
249         if (clearFirst) {
250             getRedirectUris().clear();
251             getSupportedGrantTypes().clear();
252             getSupportedResponseTypes().clear();
253         }
254         if (redirectUris != null) {
255             getRedirectUris().addAll(POJOHelper.deserialize(redirectUris, STRING_TYPEREF));
256         }
257         if (supportedGrantTypes != null) {
258             getSupportedGrantTypes().addAll(POJOHelper.deserialize(supportedGrantTypes, GRANT_TYPE_TYPEREF));
259         }
260         if (supportedResponseTypes != null) {
261             getSupportedResponseTypes().addAll(POJOHelper.deserialize(supportedResponseTypes, RESPONSE_TYPE_TYPEREF));
262         }
263         if (scopes != null) {
264             getScopes().addAll(POJOHelper.deserialize(scopes, SCOPE_TYPEREF));
265         }
266     }
267 
268     @PostLoad
269     public void postLoad() {
270         json2list(false);
271     }
272 
273     @PostPersist
274     @PostUpdate
275     public void postSave() {
276         json2list(true);
277     }
278 
279     @PrePersist
280     @PreUpdate
281     public void list2json() {
282         redirectUris = POJOHelper.serialize(getRedirectUris());
283         supportedGrantTypes = POJOHelper.serialize(getSupportedGrantTypes());
284         supportedResponseTypes = POJOHelper.serialize(getSupportedResponseTypes());
285         scopes = POJOHelper.serialize(getScopes());
286     }
287 }