|
@@ -56,6 +56,7 @@ import org.springframework.util.StringUtils;
|
|
|
*
|
|
|
* @author Rafal Lewczuk
|
|
|
* @author Joe Grandja
|
|
|
+ * @author Ovidiu Popa
|
|
|
* @since 0.1.2
|
|
|
* @see RegisteredClientRepository
|
|
|
* @see RegisteredClient
|
|
@@ -81,6 +82,8 @@ public class JdbcRegisteredClientRepository implements RegisteredClientRepositor
|
|
|
|
|
|
private static final String TABLE_NAME = "oauth2_registered_client";
|
|
|
|
|
|
+ private static final String PK_FILTER = "id = ?";
|
|
|
+
|
|
|
private static final String LOAD_REGISTERED_CLIENT_SQL = "SELECT " + COLUMN_NAMES + " FROM " + TABLE_NAME + " WHERE ";
|
|
|
|
|
|
// @formatter:off
|
|
@@ -88,6 +91,14 @@ public class JdbcRegisteredClientRepository implements RegisteredClientRepositor
|
|
|
+ "(" + COLUMN_NAMES + ") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
|
|
// @formatter:on
|
|
|
|
|
|
+ // @formatter:off
|
|
|
+ private static final String UPDATE_REGISTERED_CLIENT_SQL = "UPDATE " + TABLE_NAME
|
|
|
+ + " SET client_secret = ?, client_secret_expires_at = ?,"
|
|
|
+ + " client_name = ?, client_authentication_methods = ?, authorization_grant_types = ?,"
|
|
|
+ + " redirect_uris = ?, scopes = ?, client_settings = ?, token_settings = ?"
|
|
|
+ + " WHERE " + PK_FILTER;
|
|
|
+ // @formatter:on
|
|
|
+
|
|
|
private final JdbcOperations jdbcOperations;
|
|
|
private RowMapper<RegisteredClient> registeredClientRowMapper;
|
|
|
private Function<RegisteredClient, List<SqlParameterValue>> registeredClientParametersMapper;
|
|
@@ -107,14 +118,26 @@ public class JdbcRegisteredClientRepository implements RegisteredClientRepositor
|
|
|
@Override
|
|
|
public void save(RegisteredClient registeredClient) {
|
|
|
Assert.notNull(registeredClient, "registeredClient cannot be null");
|
|
|
- RegisteredClient existingRegisteredClient = findBy("id = ? OR client_id = ?",
|
|
|
- registeredClient.getId(), registeredClient.getClientId());
|
|
|
+ RegisteredClient existingRegisteredClient = findBy(PK_FILTER,
|
|
|
+ registeredClient.getId());
|
|
|
if (existingRegisteredClient != null) {
|
|
|
- Assert.isTrue(!existingRegisteredClient.getId().equals(registeredClient.getId()),
|
|
|
- "Registered client must be unique. Found duplicate identifier: " + registeredClient.getId());
|
|
|
- Assert.isTrue(!existingRegisteredClient.getClientId().equals(registeredClient.getClientId()),
|
|
|
- "Registered client must be unique. Found duplicate client identifier: " + registeredClient.getClientId());
|
|
|
+ updateRegisteredClient(registeredClient);
|
|
|
+ } else {
|
|
|
+ insertRegisteredClient(registeredClient);
|
|
|
}
|
|
|
+ }
|
|
|
+
|
|
|
+ private void updateRegisteredClient(RegisteredClient registeredClient) {
|
|
|
+ List<SqlParameterValue> parameters = new ArrayList<>(this.registeredClientParametersMapper.apply(registeredClient));
|
|
|
+ SqlParameterValue id = parameters.remove(0);
|
|
|
+ parameters.remove(0); // remove client_id
|
|
|
+ parameters.remove(0); // remove client_id_issued_at
|
|
|
+ parameters.add(id);
|
|
|
+ PreparedStatementSetter pss = new ArgumentPreparedStatementSetter(parameters.toArray());
|
|
|
+ this.jdbcOperations.update(UPDATE_REGISTERED_CLIENT_SQL, pss);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void insertRegisteredClient(RegisteredClient registeredClient) {
|
|
|
List<SqlParameterValue> parameters = this.registeredClientParametersMapper.apply(registeredClient);
|
|
|
PreparedStatementSetter pss = new ArgumentPreparedStatementSetter(parameters.toArray());
|
|
|
this.jdbcOperations.update(INSERT_REGISTERED_CLIENT_SQL, pss);
|