20
20
import java .sql .SQLException ;
21
21
import java .sql .Types ;
22
22
import java .util .ArrayList ;
23
+ import java .util .Arrays ;
23
24
import java .util .Collection ;
25
+ import java .util .Collections ;
24
26
import java .util .Iterator ;
25
27
import java .util .List ;
26
28
import java .util .function .Function ;
27
29
28
- import org .apache .commons .logging .Log ;
29
- import org .apache .commons .logging .LogFactory ;
30
-
31
- import org .springframework .core .log .LogMessage ;
32
30
import org .springframework .core .serializer .DefaultDeserializer ;
33
31
import org .springframework .core .serializer .DefaultSerializer ;
34
32
import org .springframework .core .serializer .Deserializer ;
@@ -53,53 +51,46 @@ public final class JdbcAssertingPartyMetadataRepository implements AssertingPart
53
51
54
52
private final JdbcOperations jdbcOperations ;
55
53
56
- private RowMapper <AssertingPartyMetadata > assertingPartyMetadataRowMapper = new AssertingPartyMetadataRowMapper (
57
- ResultSet ::getBytes );
54
+ private final RowMapper <AssertingPartyMetadata > assertingPartyMetadataRowMapper = new AssertingPartyMetadataRowMapper ();
58
55
59
56
private final AssertingPartyMetadataParametersMapper assertingPartyMetadataParametersMapper = new AssertingPartyMetadataParametersMapper ();
60
57
61
58
// @formatter:off
62
- static final String COLUMN_NAMES = "entity_id, "
63
- + "singlesignon_url, "
64
- + "singlesignon_binding, "
65
- + "singlesignon_sign_request, "
66
- + "signing_algorithms, "
67
- + "verification_credentials, "
68
- + "encryption_credentials, "
69
- + "singlelogout_url, "
70
- + "singlelogout_response_url, "
71
- + "singlelogout_binding" ;
59
+ static final String [] COLUMN_NAMES = { "entity_id" ,
60
+ "single_sign_on_service_location" ,
61
+ "single_sign_on_service_binding" ,
62
+ "want_authn_requests_signed" ,
63
+ "signing_algorithms" ,
64
+ "verification_credentials" ,
65
+ "encryption_credentials" ,
66
+ "single_logout_service_location" ,
67
+ "single_logout_service_response_location" ,
68
+ "single_logout_service_binding" };
69
+
72
70
// @formatter:on
73
71
74
72
private static final String TABLE_NAME = "saml2_asserting_party_metadata" ;
75
73
76
74
private static final String ENTITY_ID_FILTER = "entity_id = ?" ;
77
75
78
76
// @formatter:off
79
- private static final String LOAD_BY_ID_SQL = "SELECT " + COLUMN_NAMES
77
+ private static final String LOAD_BY_ID_SQL = "SELECT " + String . join ( "," , COLUMN_NAMES )
80
78
+ " FROM " + TABLE_NAME
81
79
+ " WHERE " + ENTITY_ID_FILTER ;
82
80
83
- private static final String LOAD_ALL_SQL = "SELECT " + COLUMN_NAMES
81
+ private static final String LOAD_ALL_SQL = "SELECT " + String . join ( "," , COLUMN_NAMES )
84
82
+ " FROM " + TABLE_NAME ;
85
83
// @formatter:on
86
84
87
85
// @formatter:off
88
86
private static final String SAVE_CREDENTIAL_RECORD_SQL = "INSERT INTO " + TABLE_NAME
89
- + " (" + COLUMN_NAMES + ") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ? )" ;
87
+ + " (" + String . join ( "," , COLUMN_NAMES ) + ") VALUES (" + String . join ( "," , Collections . nCopies ( COLUMN_NAMES . length , "?" )) + " )" ;
90
88
// @formatter:on
91
89
92
90
// @formatter:off
93
91
private static final String UPDATE_CREDENTIAL_RECORD_SQL = "UPDATE " + TABLE_NAME
94
- + " SET singlesignon_url = ?, "
95
- + "singlesignon_binding = ?, "
96
- + "singlesignon_sign_request = ?, "
97
- + "signing_algorithms = ?, "
98
- + "verification_credentials = ?, "
99
- + "encryption_credentials = ?, "
100
- + "singlelogout_url = ?, "
101
- + "singlelogout_response_url = ?, "
102
- + "singlelogout_binding = ?"
92
+ + " SET " + String .join (" = ?," , Arrays .copyOfRange (COLUMN_NAMES , 1 , COLUMN_NAMES .length ))
93
+ + " = ?"
103
94
+ " WHERE " + ENTITY_ID_FILTER ;
104
95
// @formatter:on
105
96
@@ -113,18 +104,6 @@ public JdbcAssertingPartyMetadataRepository(JdbcOperations jdbcOperations) {
113
104
this .jdbcOperations = jdbcOperations ;
114
105
}
115
106
116
- /**
117
- * Sets the {@link RowMapper} used for mapping the current row in
118
- * {@code java.sql.ResultSet} to {@link AssertingPartyMetadata}. The default is
119
- * {@link AssertingPartyMetadataRowMapper}.
120
- * @param assertingPartyMetadataRowMapper the {@link RowMapper} used for mapping the
121
- * current row in {@code java.sql.ResultSet} to {@link AssertingPartyMetadata}
122
- */
123
- public void setAssertingPartyMetadataRowMapper (RowMapper <AssertingPartyMetadata > assertingPartyMetadataRowMapper ) {
124
- Assert .notNull (assertingPartyMetadataRowMapper , "assertingPartyMetadataRowMapper cannot be null" );
125
- this .assertingPartyMetadataRowMapper = assertingPartyMetadataRowMapper ;
126
- }
127
-
128
107
@ Override
129
108
public AssertingPartyMetadata findByEntityId (String entityId ) {
130
109
Assert .hasText (entityId , "entityId cannot be empty" );
@@ -172,60 +151,37 @@ private int updateCredentialRecord(AssertingPartyMetadata metadata) {
172
151
*/
173
152
private static final class AssertingPartyMetadataRowMapper implements RowMapper <AssertingPartyMetadata > {
174
153
175
- private final Log logger = LogFactory .getLog (AssertingPartyMetadataRowMapper .class );
176
-
177
154
private final Deserializer <Object > deserializer = new DefaultDeserializer ();
178
155
179
- private final GetBytes getBytes ;
180
-
181
- AssertingPartyMetadataRowMapper (GetBytes getBytes ) {
182
- this .getBytes = getBytes ;
183
- }
184
-
185
156
@ Override
186
157
public AssertingPartyMetadata mapRow (ResultSet rs , int rowNum ) throws SQLException {
187
- String entityId = rs .getString ("entity_id" );
188
- String singleSignOnUrl = rs .getString ("singlesignon_url" );
189
- Saml2MessageBinding singleSignOnBinding = Saml2MessageBinding .from (rs .getString ("singlesignon_binding" ));
190
- boolean singleSignOnSignRequest = rs .getBoolean ("singlesignon_sign_request" );
191
- String singleLogoutUrl = rs .getString ("singlelogout_url" );
192
- String singleLogoutResponseUrl = rs .getString ("singlelogout_response_url" );
193
- Saml2MessageBinding singleLogoutBinding = Saml2MessageBinding .from (rs .getString ("singlelogout_binding" ));
194
- byte [] signingAlgorithmsBytes = this .getBytes .getBytes (rs , "signing_algorithms" );
195
- byte [] verificationCredentialsBytes = this .getBytes .getBytes (rs , "verification_credentials" );
196
- byte [] encryptionCredentialsBytes = this .getBytes .getBytes (rs , "encryption_credentials" );
197
-
158
+ String entityId = rs .getString (COLUMN_NAMES [0 ]);
159
+ String singleSignOnUrl = rs .getString (COLUMN_NAMES [1 ]);
160
+ Saml2MessageBinding singleSignOnBinding = Saml2MessageBinding .from (rs .getString (COLUMN_NAMES [2 ]));
161
+ boolean singleSignOnSignRequest = rs .getBoolean (COLUMN_NAMES [3 ]);
162
+ List <String > algorithms = List .of (rs .getString (COLUMN_NAMES [4 ]).split ("," ));
163
+ byte [] verificationCredentialsBytes = rs .getBytes (COLUMN_NAMES [5 ]);
164
+ byte [] encryptionCredentialsBytes = rs .getBytes (COLUMN_NAMES [6 ]);
165
+ ThrowingFunction <byte [], Collection <Saml2X509Credential >> credentials = (
166
+ bytes ) -> (Collection <Saml2X509Credential >) this .deserializer .deserializeFromByteArray (bytes );
198
167
AssertingPartyMetadata .Builder <?> builder = new AssertingPartyDetails .Builder ();
199
- try {
200
- if (signingAlgorithmsBytes != null ) {
201
- List <String > signingAlgorithms = (List <String >) this .deserializer
202
- .deserializeFromByteArray (signingAlgorithmsBytes );
203
- builder .signingAlgorithms ((algorithms ) -> algorithms .addAll (signingAlgorithms ));
204
- }
205
- if (verificationCredentialsBytes != null ) {
206
- Collection <Saml2X509Credential > verificationCredentials = (Collection <Saml2X509Credential >) this .deserializer
207
- .deserializeFromByteArray (verificationCredentialsBytes );
208
- builder .verificationX509Credentials ((credentials ) -> credentials .addAll (verificationCredentials ));
209
- }
210
- if (encryptionCredentialsBytes != null ) {
211
- Collection <Saml2X509Credential > encryptionCredentials = (Collection <Saml2X509Credential >) this .deserializer
212
- .deserializeFromByteArray (encryptionCredentialsBytes );
213
- builder .encryptionX509Credentials ((credentials ) -> credentials .addAll (encryptionCredentials ));
214
- }
215
- }
216
- catch (Exception ex ) {
217
- this .logger .debug (LogMessage .format ("Parsing serialized credentials for entity %s failed" , entityId ),
218
- ex );
219
- return null ;
220
- }
168
+ Collection <Saml2X509Credential > verificationCredentials = credentials .apply (verificationCredentialsBytes );
169
+ Collection <Saml2X509Credential > encryptionCredentials = (encryptionCredentialsBytes != null )
170
+ ? credentials .apply (encryptionCredentialsBytes ) : List .of ();
171
+ String singleLogoutUrl = rs .getString (COLUMN_NAMES [7 ]);
172
+ String singleLogoutResponseUrl = rs .getString (COLUMN_NAMES [8 ]);
173
+ Saml2MessageBinding singleLogoutBinding = Saml2MessageBinding .from (rs .getString (COLUMN_NAMES [9 ]));
221
174
222
175
builder .entityId (entityId )
223
176
.wantAuthnRequestsSigned (singleSignOnSignRequest )
224
177
.singleSignOnServiceLocation (singleSignOnUrl )
225
178
.singleSignOnServiceBinding (singleSignOnBinding )
226
179
.singleLogoutServiceLocation (singleLogoutUrl )
227
180
.singleLogoutServiceBinding (singleLogoutBinding )
228
- .singleLogoutServiceResponseLocation (singleLogoutResponseUrl );
181
+ .singleLogoutServiceResponseLocation (singleLogoutResponseUrl )
182
+ .signingAlgorithms ((a ) -> a .addAll (algorithms ))
183
+ .verificationX509Credentials ((c ) -> c .addAll (verificationCredentials ))
184
+ .encryptionX509Credentials ((c ) -> c .addAll (encryptionCredentials ));
229
185
return builder .build ();
230
186
}
231
187
@@ -244,8 +200,7 @@ public List<SqlParameterValue> apply(AssertingPartyMetadata record) {
244
200
parameters .add (new SqlParameterValue (Types .VARCHAR , record .getSingleSignOnServiceLocation ()));
245
201
parameters .add (new SqlParameterValue (Types .VARCHAR , record .getSingleSignOnServiceBinding ().getUrn ()));
246
202
parameters .add (new SqlParameterValue (Types .BOOLEAN , record .getWantAuthnRequestsSigned ()));
247
- ThrowingFunction <List <String >, byte []> algorithms = this .serializer ::serializeToByteArray ;
248
- parameters .add (new SqlParameterValue (Types .BLOB , algorithms .apply (record .getSigningAlgorithms ())));
203
+ parameters .add (new SqlParameterValue (Types .BLOB , String .join ("," , record .getSigningAlgorithms ())));
249
204
ThrowingFunction <Collection <Saml2X509Credential >, byte []> credentials = this .serializer ::serializeToByteArray ;
250
205
parameters
251
206
.add (new SqlParameterValue (Types .BLOB , credentials .apply (record .getVerificationX509Credentials ())));
@@ -259,10 +214,4 @@ public List<SqlParameterValue> apply(AssertingPartyMetadata record) {
259
214
260
215
}
261
216
262
- private interface GetBytes {
263
-
264
- byte [] getBytes (ResultSet rs , String columnName ) throws SQLException ;
265
-
266
- }
267
-
268
217
}
0 commit comments