|
@@ -27,10 +27,10 @@ import java.util.function.Function;
|
|
|
import com.fasterxml.jackson.core.type.TypeReference;
|
|
|
import com.fasterxml.jackson.databind.Module;
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
-
|
|
|
import org.junit.After;
|
|
|
import org.junit.Before;
|
|
|
import org.junit.Test;
|
|
|
+
|
|
|
import org.springframework.jdbc.core.ArgumentPreparedStatementSetter;
|
|
|
import org.springframework.jdbc.core.JdbcOperations;
|
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
@@ -40,9 +40,13 @@ import org.springframework.jdbc.core.SqlParameterValue;
|
|
|
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase;
|
|
|
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
|
|
|
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
|
|
|
+import org.springframework.security.crypto.password.NoOpPasswordEncoder;
|
|
|
+import org.springframework.security.crypto.password.PasswordEncoder;
|
|
|
import org.springframework.security.jackson2.SecurityJackson2Modules;
|
|
|
import org.springframework.security.oauth2.core.AuthorizationGrantType;
|
|
|
import org.springframework.security.oauth2.core.ClientAuthenticationMethod;
|
|
|
+import org.springframework.security.oauth2.server.authorization.client.JdbcRegisteredClientRepository.RegisteredClientParametersMapper;
|
|
|
+import org.springframework.security.oauth2.server.authorization.client.JdbcRegisteredClientRepository.RegisteredClientRowMapper;
|
|
|
import org.springframework.security.oauth2.server.authorization.config.ClientSettings;
|
|
|
import org.springframework.security.oauth2.server.authorization.config.TokenSettings;
|
|
|
import org.springframework.security.oauth2.server.authorization.jackson2.OAuth2AuthorizationServerJackson2Module;
|
|
@@ -52,8 +56,10 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|
|
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
|
|
|
import static org.mockito.ArgumentMatchers.any;
|
|
|
import static org.mockito.ArgumentMatchers.anyInt;
|
|
|
+import static org.mockito.ArgumentMatchers.anyString;
|
|
|
import static org.mockito.Mockito.spy;
|
|
|
import static org.mockito.Mockito.verify;
|
|
|
+import static org.mockito.Mockito.verifyNoInteractions;
|
|
|
|
|
|
/**
|
|
|
* Tests for {@link JdbcRegisteredClientRepository}.
|
|
@@ -69,12 +75,27 @@ public class JdbcRegisteredClientRepositoryTests {
|
|
|
private EmbeddedDatabase db;
|
|
|
private JdbcOperations jdbcOperations;
|
|
|
private JdbcRegisteredClientRepository registeredClientRepository;
|
|
|
+ private PasswordEncoder passwordEncoder;
|
|
|
|
|
|
@Before
|
|
|
public void setUp() {
|
|
|
this.db = createDb(OAUTH2_REGISTERED_CLIENT_SCHEMA_SQL_RESOURCE);
|
|
|
this.jdbcOperations = new JdbcTemplate(this.db);
|
|
|
this.registeredClientRepository = new JdbcRegisteredClientRepository(this.jdbcOperations);
|
|
|
+ this.passwordEncoder = spy(new PasswordEncoder() {
|
|
|
+ @Override
|
|
|
+ public String encode(CharSequence rawPassword) {
|
|
|
+ return NoOpPasswordEncoder.getInstance().encode(rawPassword);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean matches(CharSequence rawPassword, String encodedPassword) {
|
|
|
+ return NoOpPasswordEncoder.getInstance().matches(rawPassword, encodedPassword);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ RegisteredClientParametersMapper registeredClientParametersMapper = new RegisteredClientParametersMapper();
|
|
|
+ registeredClientParametersMapper.setPasswordEncoder(this.passwordEncoder);
|
|
|
+ this.registeredClientRepository.setRegisteredClientParametersMapper(registeredClientParametersMapper);
|
|
|
}
|
|
|
|
|
|
@After
|
|
@@ -144,15 +165,26 @@ public class JdbcRegisteredClientRepositoryTests {
|
|
|
this.registeredClientRepository.save(expectedRegisteredClient);
|
|
|
RegisteredClient registeredClient = this.registeredClientRepository.findById(expectedRegisteredClient.getId());
|
|
|
assertThat(registeredClient).isEqualTo(expectedRegisteredClient);
|
|
|
+ verify(this.passwordEncoder).encode(anyString());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void saveWhenClientSecretNullThenSaved() {
|
|
|
+ RegisteredClient expectedRegisteredClient = TestRegisteredClients.registeredClient()
|
|
|
+ .clientSecret(null).build();
|
|
|
+ this.registeredClientRepository.save(expectedRegisteredClient);
|
|
|
+ RegisteredClient registeredClient = this.registeredClientRepository.findById(expectedRegisteredClient.getId());
|
|
|
+ assertThat(registeredClient).isEqualTo(expectedRegisteredClient);
|
|
|
+ verifyNoInteractions(this.passwordEncoder);
|
|
|
}
|
|
|
|
|
|
@Test
|
|
|
public void saveLoadRegisteredClientWhenCustomStrategiesSetThenCalled() throws Exception {
|
|
|
- RowMapper<RegisteredClient> registeredClientRowMapper = spy(
|
|
|
- new JdbcRegisteredClientRepository.RegisteredClientRowMapper());
|
|
|
+ RowMapper<RegisteredClient> registeredClientRowMapper = spy(new RegisteredClientRowMapper());
|
|
|
this.registeredClientRepository.setRegisteredClientRowMapper(registeredClientRowMapper);
|
|
|
- Function<RegisteredClient, List<SqlParameterValue>> registeredClientParametersMapper = spy(
|
|
|
- new JdbcRegisteredClientRepository.RegisteredClientParametersMapper());
|
|
|
+ RegisteredClientParametersMapper clientParametersMapper = new RegisteredClientParametersMapper();
|
|
|
+ clientParametersMapper.setPasswordEncoder(this.passwordEncoder);
|
|
|
+ Function<RegisteredClient, List<SqlParameterValue>> registeredClientParametersMapper = spy(clientParametersMapper);
|
|
|
this.registeredClientRepository.setRegisteredClientParametersMapper(registeredClientParametersMapper);
|
|
|
|
|
|
RegisteredClient registeredClient = TestRegisteredClients.registeredClient().build();
|
|
@@ -161,6 +193,7 @@ public class JdbcRegisteredClientRepositoryTests {
|
|
|
assertThat(result).isEqualTo(registeredClient);
|
|
|
verify(registeredClientRowMapper).mapRow(any(), anyInt());
|
|
|
verify(registeredClientParametersMapper).apply(any());
|
|
|
+ verify(this.passwordEncoder).encode(anyString());
|
|
|
}
|
|
|
|
|
|
@Test
|
|
@@ -212,14 +245,17 @@ public class JdbcRegisteredClientRepositoryTests {
|
|
|
@Test
|
|
|
public void tableDefinitionWhenCustomThenAbleToOverride() {
|
|
|
EmbeddedDatabase db = createDb(OAUTH2_CUSTOM_REGISTERED_CLIENT_SCHEMA_SQL_RESOURCE);
|
|
|
- RegisteredClientRepository registeredClientRepository =
|
|
|
- new CustomJdbcRegisteredClientRepository(new JdbcTemplate(db));
|
|
|
+ RegisteredClientParametersMapper registeredClientParametersMapper = new RegisteredClientParametersMapper();
|
|
|
+ registeredClientParametersMapper.setPasswordEncoder(this.passwordEncoder);
|
|
|
+ CustomJdbcRegisteredClientRepository registeredClientRepository = new CustomJdbcRegisteredClientRepository(new JdbcTemplate(db));
|
|
|
+ registeredClientRepository.setRegisteredClientParametersMapper(registeredClientParametersMapper);
|
|
|
RegisteredClient registeredClient = TestRegisteredClients.registeredClient().build();
|
|
|
registeredClientRepository.save(registeredClient);
|
|
|
RegisteredClient foundRegisteredClient1 = registeredClientRepository.findById(registeredClient.getId());
|
|
|
assertThat(foundRegisteredClient1).isEqualTo(registeredClient);
|
|
|
RegisteredClient foundRegisteredClient2 = registeredClientRepository.findByClientId(registeredClient.getClientId());
|
|
|
assertThat(foundRegisteredClient2).isEqualTo(registeredClient);
|
|
|
+ verify(this.passwordEncoder).encode(anyString());
|
|
|
db.shutdown();
|
|
|
}
|
|
|
|