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.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 }