|
|
|
@ -32,7 +32,7 @@ import java.util.Map; |
|
|
|
import java.util.Set; |
|
|
|
import java.util.Set; |
|
|
|
import java.util.function.Function; |
|
|
|
import java.util.function.Function; |
|
|
|
|
|
|
|
|
|
|
|
import com.fasterxml.jackson.core.JsonProcessingException; |
|
|
|
import com.fasterxml.jackson.core.type.TypeReference; |
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper; |
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper; |
|
|
|
|
|
|
|
|
|
|
|
import org.springframework.jdbc.core.ArgumentPreparedStatementSetter; |
|
|
|
import org.springframework.jdbc.core.ArgumentPreparedStatementSetter; |
|
|
|
@ -95,17 +95,7 @@ public class JdbcRegisteredClientRepository implements RegisteredClientRepositor |
|
|
|
* @param jdbcOperations the JDBC operations |
|
|
|
* @param jdbcOperations the JDBC operations |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public JdbcRegisteredClientRepository(JdbcOperations jdbcOperations) { |
|
|
|
public JdbcRegisteredClientRepository(JdbcOperations jdbcOperations) { |
|
|
|
this(jdbcOperations, new ObjectMapper()); |
|
|
|
this(jdbcOperations, new DefaultLobHandler()); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Constructs a {@code JdbcRegisteredClientRepository} using the provided parameters. |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* @param jdbcOperations the JDBC operations |
|
|
|
|
|
|
|
* @param objectMapper the object mapper |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
public JdbcRegisteredClientRepository(JdbcOperations jdbcOperations, ObjectMapper objectMapper) { |
|
|
|
|
|
|
|
this(jdbcOperations, new DefaultLobHandler(), objectMapper); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
@ -113,18 +103,16 @@ public class JdbcRegisteredClientRepository implements RegisteredClientRepositor |
|
|
|
* |
|
|
|
* |
|
|
|
* @param jdbcOperations the JDBC operations |
|
|
|
* @param jdbcOperations the JDBC operations |
|
|
|
* @param lobHandler the handler for large binary fields and large text fields |
|
|
|
* @param lobHandler the handler for large binary fields and large text fields |
|
|
|
* @param objectMapper the object mapper |
|
|
|
|
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public JdbcRegisteredClientRepository(JdbcOperations jdbcOperations, LobHandler lobHandler, ObjectMapper objectMapper) { |
|
|
|
public JdbcRegisteredClientRepository(JdbcOperations jdbcOperations, LobHandler lobHandler) { |
|
|
|
Assert.notNull(jdbcOperations, "jdbcOperations cannot be null"); |
|
|
|
Assert.notNull(jdbcOperations, "jdbcOperations cannot be null"); |
|
|
|
Assert.notNull(lobHandler, "lobHandler cannot be null"); |
|
|
|
Assert.notNull(lobHandler, "lobHandler cannot be null"); |
|
|
|
Assert.notNull(objectMapper, "objectMapper cannot be null"); |
|
|
|
|
|
|
|
this.jdbcOperations = jdbcOperations; |
|
|
|
this.jdbcOperations = jdbcOperations; |
|
|
|
this.lobHandler = lobHandler; |
|
|
|
this.lobHandler = lobHandler; |
|
|
|
DefaultRegisteredClientRowMapper registeredClientRowMapper = new DefaultRegisteredClientRowMapper(objectMapper); |
|
|
|
DefaultRegisteredClientRowMapper registeredClientRowMapper = new DefaultRegisteredClientRowMapper(); |
|
|
|
registeredClientRowMapper.setLobHandler(lobHandler); |
|
|
|
registeredClientRowMapper.setLobHandler(lobHandler); |
|
|
|
this.registeredClientRowMapper = registeredClientRowMapper; |
|
|
|
this.registeredClientRowMapper = registeredClientRowMapper; |
|
|
|
this.registeredClientParametersMapper = new DefaultRegisteredClientParametersMapper(objectMapper); |
|
|
|
this.registeredClientParametersMapper = new DefaultRegisteredClientParametersMapper(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
@ -132,7 +120,7 @@ public class JdbcRegisteredClientRepository implements RegisteredClientRepositor |
|
|
|
* |
|
|
|
* |
|
|
|
* @param registeredClientRowMapper mapper implementation |
|
|
|
* @param registeredClientRowMapper mapper implementation |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public void setRegisteredClientRowMapper(RowMapper<RegisteredClient> registeredClientRowMapper) { |
|
|
|
public final void setRegisteredClientRowMapper(RowMapper<RegisteredClient> registeredClientRowMapper) { |
|
|
|
Assert.notNull(registeredClientRowMapper, "registeredClientRowMapper cannot be null"); |
|
|
|
Assert.notNull(registeredClientRowMapper, "registeredClientRowMapper cannot be null"); |
|
|
|
this.registeredClientRowMapper = registeredClientRowMapper; |
|
|
|
this.registeredClientRowMapper = registeredClientRowMapper; |
|
|
|
} |
|
|
|
} |
|
|
|
@ -142,15 +130,31 @@ public class JdbcRegisteredClientRepository implements RegisteredClientRepositor |
|
|
|
* |
|
|
|
* |
|
|
|
* @param registeredClientParametersMapper mapper implementation |
|
|
|
* @param registeredClientParametersMapper mapper implementation |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public void setRegisteredClientParametersMapper(Function<RegisteredClient, List<SqlParameterValue>> registeredClientParametersMapper) { |
|
|
|
public final void setRegisteredClientParametersMapper(Function<RegisteredClient, List<SqlParameterValue>> registeredClientParametersMapper) { |
|
|
|
Assert.notNull(registeredClientParametersMapper, "registeredClientParameterMapper cannot be null"); |
|
|
|
Assert.notNull(registeredClientParametersMapper, "registeredClientParameterMapper cannot be null"); |
|
|
|
this.registeredClientParametersMapper = registeredClientParametersMapper; |
|
|
|
this.registeredClientParametersMapper = registeredClientParametersMapper; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected final JdbcOperations getJdbcOperations() { |
|
|
|
|
|
|
|
return this.jdbcOperations; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected final LobHandler getLobHandler() { |
|
|
|
|
|
|
|
return this.lobHandler; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected final RowMapper<RegisteredClient> getRegisteredClientRowMapper() { |
|
|
|
|
|
|
|
return this.registeredClientRowMapper; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected final Function<RegisteredClient, List<SqlParameterValue>> getRegisteredClientParametersMapper() { |
|
|
|
|
|
|
|
return this.registeredClientParametersMapper; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void save(RegisteredClient registeredClient) { |
|
|
|
public void save(RegisteredClient registeredClient) { |
|
|
|
Assert.notNull(registeredClient, "registeredClient cannot be null"); |
|
|
|
Assert.notNull(registeredClient, "registeredClient cannot be null"); |
|
|
|
RegisteredClient foundClient = this.findBy("id = ? OR client_id = ? OR client_secret = ?", |
|
|
|
RegisteredClient foundClient = findBy("id = ? OR client_id = ? OR client_secret = ?", |
|
|
|
registeredClient.getId(), registeredClient.getClientId(), |
|
|
|
registeredClient.getId(), registeredClient.getClientId(), |
|
|
|
registeredClient.getClientSecret().getBytes(StandardCharsets.UTF_8)); |
|
|
|
registeredClient.getClientSecret().getBytes(StandardCharsets.UTF_8)); |
|
|
|
|
|
|
|
|
|
|
|
@ -192,88 +196,72 @@ public class JdbcRegisteredClientRepository implements RegisteredClientRepositor |
|
|
|
|
|
|
|
|
|
|
|
public static class DefaultRegisteredClientRowMapper implements RowMapper<RegisteredClient> { |
|
|
|
public static class DefaultRegisteredClientRowMapper implements RowMapper<RegisteredClient> { |
|
|
|
|
|
|
|
|
|
|
|
private final ObjectMapper objectMapper; |
|
|
|
private ObjectMapper objectMapper = new ObjectMapper(); |
|
|
|
|
|
|
|
|
|
|
|
private LobHandler lobHandler = new DefaultLobHandler(); |
|
|
|
private LobHandler lobHandler = new DefaultLobHandler(); |
|
|
|
|
|
|
|
|
|
|
|
public DefaultRegisteredClientRowMapper(ObjectMapper objectMapper) { |
|
|
|
|
|
|
|
this.objectMapper = objectMapper; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private Set<String> parseList(String s) { |
|
|
|
|
|
|
|
return s != null ? StringUtils.commaDelimitedListToSet(s) : Collections.emptySet(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
@SuppressWarnings("unchecked") |
|
|
|
|
|
|
|
public RegisteredClient mapRow(ResultSet rs, int rowNum) throws SQLException { |
|
|
|
public RegisteredClient mapRow(ResultSet rs, int rowNum) throws SQLException { |
|
|
|
Set<String> scopes = parseList(rs.getString("scopes")); |
|
|
|
Set<String> clientScopes = parseList(rs.getString("scopes")); |
|
|
|
Set<String> authGrantTypes = parseList(rs.getString("authorization_grant_types")); |
|
|
|
Set<String> authorizationGrantTypes = parseList(rs.getString("authorization_grant_types")); |
|
|
|
Set<String> clientAuthMethods = parseList(rs.getString("client_authentication_methods")); |
|
|
|
Set<String> clientAuthenticationMethods = parseList(rs.getString("client_authentication_methods")); |
|
|
|
Set<String> redirectUris = parseList(rs.getString("redirect_uris")); |
|
|
|
Set<String> redirectUris = parseList(rs.getString("redirect_uris")); |
|
|
|
Timestamp clientIssuedAt = rs.getTimestamp("client_id_issued_at"); |
|
|
|
Timestamp clientIdIssuedAt = rs.getTimestamp("client_id_issued_at"); |
|
|
|
Timestamp clientSecretExpiresAt = rs.getTimestamp("client_secret_expires_at"); |
|
|
|
Timestamp clientSecretExpiresAt = rs.getTimestamp("client_secret_expires_at"); |
|
|
|
byte[] clientSecretBytes = this.lobHandler.getBlobAsBytes(rs, "client_secret"); |
|
|
|
byte[] clientSecretValue = this.lobHandler.getBlobAsBytes(rs, "client_secret"); |
|
|
|
String clientSecret = clientSecretBytes != null ? new String(clientSecretBytes, StandardCharsets.UTF_8) : null; |
|
|
|
|
|
|
|
RegisteredClient.Builder builder = RegisteredClient |
|
|
|
RegisteredClient.Builder builder = RegisteredClient |
|
|
|
.withId(rs.getString("id")) |
|
|
|
.withId(rs.getString("id")) |
|
|
|
.clientId(rs.getString("client_id")) |
|
|
|
.clientId(rs.getString("client_id")) |
|
|
|
.clientIdIssuedAt(clientIssuedAt != null ? clientIssuedAt.toInstant() : null) |
|
|
|
.clientIdIssuedAt(clientIdIssuedAt != null ? clientIdIssuedAt.toInstant() : null) |
|
|
|
.clientSecret(clientSecret) |
|
|
|
.clientSecret(clientSecretValue != null ? new String(clientSecretValue, StandardCharsets.UTF_8) : null) |
|
|
|
.clientSecretExpiresAt(clientSecretExpiresAt != null ? clientSecretExpiresAt.toInstant() : null) |
|
|
|
.clientSecretExpiresAt(clientSecretExpiresAt != null ? clientSecretExpiresAt.toInstant() : null) |
|
|
|
.clientName(rs.getString("client_name")) |
|
|
|
.clientName(rs.getString("client_name")) |
|
|
|
.authorizationGrantTypes(coll -> authGrantTypes.forEach(authGrantType -> |
|
|
|
.authorizationGrantTypes((grantTypes) -> authorizationGrantTypes.forEach(authGrantType -> |
|
|
|
coll.add(AUTHORIZATION_GRANT_TYPE_MAP.get(authGrantType)))) |
|
|
|
grantTypes.add(AUTHORIZATION_GRANT_TYPE_MAP.get(authGrantType)))) |
|
|
|
.clientAuthenticationMethods(coll -> clientAuthMethods.forEach(clientAuthMethod -> |
|
|
|
.clientAuthenticationMethods((methods) -> clientAuthenticationMethods.forEach(clientAuthMethod -> |
|
|
|
coll.add(CLIENT_AUTHENTICATION_METHOD_MAP.get(clientAuthMethod)))) |
|
|
|
methods.add(CLIENT_AUTHENTICATION_METHOD_MAP.get(clientAuthMethod)))) |
|
|
|
.redirectUris(coll -> coll.addAll(redirectUris)) |
|
|
|
.redirectUris((uris) -> uris.addAll(redirectUris)) |
|
|
|
.scopes(coll -> coll.addAll(scopes)); |
|
|
|
.scopes((scopes) -> scopes.addAll(clientScopes)); |
|
|
|
|
|
|
|
|
|
|
|
RegisteredClient rc = builder.build(); |
|
|
|
RegisteredClient registeredClient = builder.build(); |
|
|
|
|
|
|
|
|
|
|
|
TokenSettings ts = rc.getTokenSettings(); |
|
|
|
String tokenSettingsValue = rs.getString("token_settings"); |
|
|
|
ClientSettings cs = rc.getClientSettings(); |
|
|
|
if (tokenSettingsValue != null) { |
|
|
|
|
|
|
|
Map<String, Object> tokenSettingsValues = parseMap(tokenSettingsValue); |
|
|
|
try { |
|
|
|
TokenSettings tokenSettings = registeredClient.getTokenSettings(); |
|
|
|
String tokenSettingsJson = rs.getString("token_settings"); |
|
|
|
|
|
|
|
if (tokenSettingsJson != null) { |
|
|
|
Number accessTokenTTL = (Number) tokenSettingsValues.get("access_token_ttl"); |
|
|
|
Map<String, Object> m = this.objectMapper.readValue(tokenSettingsJson, Map.class); |
|
|
|
if (accessTokenTTL != null) { |
|
|
|
|
|
|
|
tokenSettings.accessTokenTimeToLive(Duration.ofMillis(accessTokenTTL.longValue())); |
|
|
|
Number accessTokenTTL = (Number) m.get("access_token_ttl"); |
|
|
|
} |
|
|
|
if (accessTokenTTL != null) { |
|
|
|
|
|
|
|
ts.accessTokenTimeToLive(Duration.ofMillis(accessTokenTTL.longValue())); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Number refreshTokenTTL = (Number) m.get("refresh_token_ttl"); |
|
|
|
Number refreshTokenTTL = (Number) tokenSettingsValues.get("refresh_token_ttl"); |
|
|
|
if (refreshTokenTTL != null) { |
|
|
|
if (refreshTokenTTL != null) { |
|
|
|
ts.refreshTokenTimeToLive(Duration.ofMillis(refreshTokenTTL.longValue())); |
|
|
|
tokenSettings.refreshTokenTimeToLive(Duration.ofMillis(refreshTokenTTL.longValue())); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Boolean reuseRefreshTokens = (Boolean) m.get("reuse_refresh_tokens"); |
|
|
|
Boolean reuseRefreshTokens = (Boolean) tokenSettingsValues.get("reuse_refresh_tokens"); |
|
|
|
if (reuseRefreshTokens != null) { |
|
|
|
if (reuseRefreshTokens != null) { |
|
|
|
ts.reuseRefreshTokens(reuseRefreshTokens); |
|
|
|
tokenSettings.reuseRefreshTokens(reuseRefreshTokens); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
String clientSettingsJson = rs.getString("client_settings"); |
|
|
|
String clientSettingsValue = rs.getString("client_settings"); |
|
|
|
if (clientSettingsJson != null) { |
|
|
|
if (clientSettingsValue != null) { |
|
|
|
Map<String, Object> m = this.objectMapper.readValue(clientSettingsJson, Map.class); |
|
|
|
Map<String, Object> clientSettingsValues = parseMap(clientSettingsValue); |
|
|
|
|
|
|
|
ClientSettings clientSettings = registeredClient.getClientSettings(); |
|
|
|
|
|
|
|
|
|
|
|
Boolean requireProofKey = (Boolean) m.get("require_proof_key"); |
|
|
|
Boolean requireProofKey = (Boolean) clientSettingsValues.get("require_proof_key"); |
|
|
|
if (requireProofKey != null) { |
|
|
|
if (requireProofKey != null) { |
|
|
|
cs.requireProofKey(requireProofKey); |
|
|
|
clientSettings.requireProofKey(requireProofKey); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Boolean requireUserConsent = (Boolean) m.get("require_user_consent"); |
|
|
|
Boolean requireUserConsent = (Boolean) clientSettingsValues.get("require_user_consent"); |
|
|
|
if (requireUserConsent != null) { |
|
|
|
if (requireUserConsent != null) { |
|
|
|
cs.requireUserConsent(requireUserConsent); |
|
|
|
clientSettings.requireUserConsent(requireUserConsent); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} catch (JsonProcessingException e) { |
|
|
|
|
|
|
|
throw new IllegalArgumentException(e.getMessage(), e); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return rc; |
|
|
|
return registeredClient; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public final void setLobHandler(LobHandler lobHandler) { |
|
|
|
public final void setLobHandler(LobHandler lobHandler) { |
|
|
|
@ -281,61 +269,95 @@ public class JdbcRegisteredClientRepository implements RegisteredClientRepositor |
|
|
|
this.lobHandler = lobHandler; |
|
|
|
this.lobHandler = lobHandler; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
public final void setObjectMapper(ObjectMapper objectMapper) { |
|
|
|
|
|
|
|
Assert.notNull(objectMapper, "objectMapper cannot be null"); |
|
|
|
|
|
|
|
this.objectMapper = objectMapper; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public static class DefaultRegisteredClientParametersMapper implements Function<RegisteredClient, List<SqlParameterValue>> { |
|
|
|
protected final LobHandler getLobHandler() { |
|
|
|
|
|
|
|
return this.lobHandler; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private final ObjectMapper objectMapper; |
|
|
|
protected final ObjectMapper getObjectMapper() { |
|
|
|
|
|
|
|
return this.objectMapper; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private DefaultRegisteredClientParametersMapper(ObjectMapper objectMapper) { |
|
|
|
private Set<String> parseList(String s) { |
|
|
|
this.objectMapper = objectMapper; |
|
|
|
return s != null ? StringUtils.commaDelimitedListToSet(s) : Collections.emptySet(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private Map<String, Object> parseMap(String data) { |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
return this.objectMapper.readValue(data, new TypeReference<Map<String, Object>>() {}); |
|
|
|
|
|
|
|
} catch (Exception ex) { |
|
|
|
|
|
|
|
throw new IllegalArgumentException(ex.getMessage(), ex); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static class DefaultRegisteredClientParametersMapper implements Function<RegisteredClient, List<SqlParameterValue>> { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private ObjectMapper objectMapper = new ObjectMapper(); |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public List<SqlParameterValue> apply(RegisteredClient registeredClient) { |
|
|
|
public List<SqlParameterValue> apply(RegisteredClient registeredClient) { |
|
|
|
try { |
|
|
|
List<String> clientAuthenticationMethodNames = new ArrayList<>(registeredClient.getClientAuthenticationMethods().size()); |
|
|
|
List<String> clientAuthenticationMethodNames = new ArrayList<>(registeredClient.getClientAuthenticationMethods().size()); |
|
|
|
for (ClientAuthenticationMethod clientAuthenticationMethod : registeredClient.getClientAuthenticationMethods()) { |
|
|
|
for (ClientAuthenticationMethod clientAuthenticationMethod : registeredClient.getClientAuthenticationMethods()) { |
|
|
|
clientAuthenticationMethodNames.add(clientAuthenticationMethod.getValue()); |
|
|
|
clientAuthenticationMethodNames.add(clientAuthenticationMethod.getValue()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<String> authorizationGrantTypeNames = new ArrayList<>(registeredClient.getAuthorizationGrantTypes().size()); |
|
|
|
List<String> authorizationGrantTypeNames = new ArrayList<>(registeredClient.getAuthorizationGrantTypes().size()); |
|
|
|
for (AuthorizationGrantType authorizationGrantType : registeredClient.getAuthorizationGrantTypes()) { |
|
|
|
for (AuthorizationGrantType authorizationGrantType : registeredClient.getAuthorizationGrantTypes()) { |
|
|
|
authorizationGrantTypeNames.add(authorizationGrantType.getValue()); |
|
|
|
authorizationGrantTypeNames.add(authorizationGrantType.getValue()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Instant issuedAt = registeredClient.getClientIdIssuedAt() != null ? |
|
|
|
Instant issuedAt = registeredClient.getClientIdIssuedAt() != null ? |
|
|
|
registeredClient.getClientIdIssuedAt() : Instant.now(); |
|
|
|
registeredClient.getClientIdIssuedAt() : Instant.now(); |
|
|
|
|
|
|
|
|
|
|
|
Timestamp clientSecretExpiresAt = registeredClient.getClientSecretExpiresAt() != null ? |
|
|
|
Timestamp clientSecretExpiresAt = registeredClient.getClientSecretExpiresAt() != null ? |
|
|
|
Timestamp.from(registeredClient.getClientSecretExpiresAt()) : null; |
|
|
|
Timestamp.from(registeredClient.getClientSecretExpiresAt()) : null; |
|
|
|
|
|
|
|
|
|
|
|
Map<String, Object> clientSettings = new HashMap<>(); |
|
|
|
Map<String, Object> clientSettings = new HashMap<>(); |
|
|
|
clientSettings.put("require_proof_key", registeredClient.getClientSettings().requireProofKey()); |
|
|
|
clientSettings.put("require_proof_key", registeredClient.getClientSettings().requireProofKey()); |
|
|
|
clientSettings.put("require_user_consent", registeredClient.getClientSettings().requireUserConsent()); |
|
|
|
clientSettings.put("require_user_consent", registeredClient.getClientSettings().requireUserConsent()); |
|
|
|
String clientSettingsJson = this.objectMapper.writeValueAsString(clientSettings); |
|
|
|
String clientSettingsJson = writeMap(clientSettings); |
|
|
|
|
|
|
|
|
|
|
|
Map<String, Object> tokenSettings = new HashMap<>(); |
|
|
|
Map<String, Object> tokenSettings = new HashMap<>(); |
|
|
|
tokenSettings.put("access_token_ttl", registeredClient.getTokenSettings().accessTokenTimeToLive().toMillis()); |
|
|
|
tokenSettings.put("access_token_ttl", registeredClient.getTokenSettings().accessTokenTimeToLive().toMillis()); |
|
|
|
tokenSettings.put("reuse_refresh_tokens", registeredClient.getTokenSettings().reuseRefreshTokens()); |
|
|
|
tokenSettings.put("reuse_refresh_tokens", registeredClient.getTokenSettings().reuseRefreshTokens()); |
|
|
|
tokenSettings.put("refresh_token_ttl", registeredClient.getTokenSettings().refreshTokenTimeToLive().toMillis()); |
|
|
|
tokenSettings.put("refresh_token_ttl", registeredClient.getTokenSettings().refreshTokenTimeToLive().toMillis()); |
|
|
|
String tokenSettingsJson = this.objectMapper.writeValueAsString(tokenSettings); |
|
|
|
String tokenSettingsJson = writeMap(tokenSettings); |
|
|
|
|
|
|
|
|
|
|
|
return Arrays.asList( |
|
|
|
return Arrays.asList( |
|
|
|
new SqlParameterValue(Types.VARCHAR, registeredClient.getId()), |
|
|
|
new SqlParameterValue(Types.VARCHAR, registeredClient.getId()), |
|
|
|
new SqlParameterValue(Types.VARCHAR, registeredClient.getClientId()), |
|
|
|
new SqlParameterValue(Types.VARCHAR, registeredClient.getClientId()), |
|
|
|
new SqlParameterValue(Types.TIMESTAMP, Timestamp.from(issuedAt)), |
|
|
|
new SqlParameterValue(Types.TIMESTAMP, Timestamp.from(issuedAt)), |
|
|
|
new SqlParameterValue(Types.BLOB, registeredClient.getClientSecret().getBytes(StandardCharsets.UTF_8)), |
|
|
|
new SqlParameterValue(Types.BLOB, registeredClient.getClientSecret().getBytes(StandardCharsets.UTF_8)), |
|
|
|
new SqlParameterValue(Types.TIMESTAMP, clientSecretExpiresAt), |
|
|
|
new SqlParameterValue(Types.TIMESTAMP, clientSecretExpiresAt), |
|
|
|
new SqlParameterValue(Types.VARCHAR, registeredClient.getClientName()), |
|
|
|
new SqlParameterValue(Types.VARCHAR, registeredClient.getClientName()), |
|
|
|
new SqlParameterValue(Types.VARCHAR, StringUtils.collectionToCommaDelimitedString(clientAuthenticationMethodNames)), |
|
|
|
new SqlParameterValue(Types.VARCHAR, StringUtils.collectionToCommaDelimitedString(clientAuthenticationMethodNames)), |
|
|
|
new SqlParameterValue(Types.VARCHAR, StringUtils.collectionToCommaDelimitedString(authorizationGrantTypeNames)), |
|
|
|
new SqlParameterValue(Types.VARCHAR, StringUtils.collectionToCommaDelimitedString(authorizationGrantTypeNames)), |
|
|
|
new SqlParameterValue(Types.VARCHAR, StringUtils.collectionToCommaDelimitedString(registeredClient.getRedirectUris())), |
|
|
|
new SqlParameterValue(Types.VARCHAR, StringUtils.collectionToCommaDelimitedString(registeredClient.getRedirectUris())), |
|
|
|
new SqlParameterValue(Types.VARCHAR, StringUtils.collectionToCommaDelimitedString(registeredClient.getScopes())), |
|
|
|
new SqlParameterValue(Types.VARCHAR, StringUtils.collectionToCommaDelimitedString(registeredClient.getScopes())), |
|
|
|
new SqlParameterValue(Types.VARCHAR, clientSettingsJson), |
|
|
|
new SqlParameterValue(Types.VARCHAR, clientSettingsJson), |
|
|
|
new SqlParameterValue(Types.VARCHAR, tokenSettingsJson)); |
|
|
|
new SqlParameterValue(Types.VARCHAR, tokenSettingsJson)); |
|
|
|
} catch (JsonProcessingException e) { |
|
|
|
} |
|
|
|
throw new IllegalArgumentException(e.getMessage(), e); |
|
|
|
|
|
|
|
|
|
|
|
public final void setObjectMapper(ObjectMapper objectMapper) { |
|
|
|
|
|
|
|
Assert.notNull(objectMapper, "objectMapper cannot be null"); |
|
|
|
|
|
|
|
this.objectMapper = objectMapper; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected final ObjectMapper getObjectMapper() { |
|
|
|
|
|
|
|
return this.objectMapper; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private String writeMap(Map<String, Object> data) { |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
return this.objectMapper.writeValueAsString(data); |
|
|
|
|
|
|
|
} catch (Exception ex) { |
|
|
|
|
|
|
|
throw new IllegalArgumentException(ex.getMessage(), ex); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|