Skip to content

Commit 004f386

Browse files
committed
Move ClientSettings to ClientRegistration
Initially it was proposed to put ClientSettings as a top level class, but to be consistent with ProviderDetails, this commit moves ClientSettings to be an inner class of ClientRegistration Issue gh-16382 # Conflicts: # oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/registration/ClientSettings.java
1 parent 4c53356 commit 004f386

File tree

5 files changed

+83
-97
lines changed

5 files changed

+83
-97
lines changed

oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/registration/ClientRegistration.java

+73
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.util.LinkedHashSet;
2727
import java.util.List;
2828
import java.util.Map;
29+
import java.util.Objects;
2930
import java.util.Set;
3031

3132
import org.apache.commons.logging.Log;
@@ -741,4 +742,76 @@ private static boolean withinTheRangeOf(int c, int min, int max) {
741742

742743
}
743744

745+
/**
746+
* A facility for client configuration settings.
747+
*
748+
* @author DingHao
749+
* @since 6.5
750+
*/
751+
public static final class ClientSettings {
752+
753+
private boolean requireProofKey;
754+
755+
private ClientSettings() {
756+
757+
}
758+
759+
public boolean isRequireProofKey() {
760+
return this.requireProofKey;
761+
}
762+
763+
@Override
764+
public boolean equals(Object o) {
765+
if (this == o) {
766+
return true;
767+
}
768+
if (!(o instanceof ClientSettings that)) {
769+
return false;
770+
}
771+
return this.requireProofKey == that.requireProofKey;
772+
}
773+
774+
@Override
775+
public int hashCode() {
776+
return Objects.hashCode(this.requireProofKey);
777+
}
778+
779+
@Override
780+
public String toString() {
781+
return "ClientSettings{" + "requireProofKey=" + this.requireProofKey + '}';
782+
}
783+
784+
public static Builder builder() {
785+
return new Builder();
786+
}
787+
788+
public static final class Builder {
789+
790+
private boolean requireProofKey;
791+
792+
private Builder() {
793+
}
794+
795+
/**
796+
* Set to {@code true} if the client is required to provide a proof key
797+
* challenge and verifier when performing the Authorization Code Grant flow.
798+
* @param requireProofKey {@code true} if the client is required to provide a
799+
* proof key challenge and verifier, {@code false} otherwise
800+
* @return the {@link Builder} for further configuration
801+
*/
802+
public Builder requireProofKey(boolean requireProofKey) {
803+
this.requireProofKey = requireProofKey;
804+
return this;
805+
}
806+
807+
public ClientSettings build() {
808+
ClientSettings clientSettings = new ClientSettings();
809+
clientSettings.requireProofKey = this.requireProofKey;
810+
return clientSettings;
811+
}
812+
813+
}
814+
815+
}
816+
744817
}

oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/registration/ClientSettings.java

-91
This file was deleted.

oauth2/oauth2-client/src/test/java/org/springframework/security/oauth2/client/registration/ClientRegistrationTests.java

+6-2
Original file line numberDiff line numberDiff line change
@@ -786,7 +786,9 @@ void buildWhenDefaultClientSettingsThenDefaulted() {
786786
// gh-16382
787787
@Test
788788
void buildWhenNewAuthorizationCodeAndPkceThenBuilds() {
789-
ClientSettings pkceEnabled = ClientSettings.builder().requireProofKey(true).build();
789+
ClientRegistration.ClientSettings pkceEnabled = ClientRegistration.ClientSettings.builder()
790+
.requireProofKey(true)
791+
.build();
790792
ClientRegistration clientRegistration = ClientRegistration.withRegistrationId(REGISTRATION_ID)
791793
.clientId(CLIENT_ID)
792794
.clientSettings(pkceEnabled)
@@ -803,7 +805,9 @@ void buildWhenNewAuthorizationCodeAndPkceThenBuilds() {
803805
@ParameterizedTest
804806
@MethodSource("invalidPkceGrantTypes")
805807
void buildWhenInvalidGrantTypeForPkceThenException(AuthorizationGrantType invalidGrantType) {
806-
ClientSettings pkceEnabled = ClientSettings.builder().requireProofKey(true).build();
808+
ClientRegistration.ClientSettings pkceEnabled = ClientRegistration.ClientSettings.builder()
809+
.requireProofKey(true)
810+
.build();
807811
ClientRegistration.Builder builder = ClientRegistration.withRegistrationId(REGISTRATION_ID)
808812
.clientId(CLIENT_ID)
809813
.clientSettings(pkceEnabled)

oauth2/oauth2-client/src/test/java/org/springframework/security/oauth2/client/web/DefaultOAuth2AuthorizationRequestResolverTests.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import org.springframework.mock.web.MockHttpServletRequest;
2929
import org.springframework.security.oauth2.client.registration.ClientRegistration;
3030
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
31-
import org.springframework.security.oauth2.client.registration.ClientSettings;
3231
import org.springframework.security.oauth2.client.registration.InMemoryClientRegistrationRepository;
3332
import org.springframework.security.oauth2.client.registration.TestClientRegistrations;
3433
import org.springframework.security.oauth2.core.AuthorizationGrantType;
@@ -583,7 +582,7 @@ public void resolveWhenAuthorizationRequestProvideCodeChallengeMethod() {
583582
private static ClientRegistration.Builder pkceClientRegistration() {
584583
return ClientRegistration.withRegistrationId("pkce")
585584
.redirectUri("{baseUrl}/{action}/oauth2/code/{registrationId}")
586-
.clientSettings(ClientSettings.builder().requireProofKey(true).build())
585+
.clientSettings(ClientRegistration.ClientSettings.builder().requireProofKey(true).build())
587586
.authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
588587
.scope("read:user")
589588
.authorizationUri("https://example.com/login/oauth/authorize")

oauth2/oauth2-client/src/test/java/org/springframework/security/oauth2/client/web/server/DefaultServerOAuth2AuthorizationRequestResolverTests.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import org.springframework.mock.http.server.reactive.MockServerHttpRequest;
2828
import org.springframework.mock.web.server.MockServerWebExchange;
2929
import org.springframework.security.oauth2.client.registration.ClientRegistration;
30-
import org.springframework.security.oauth2.client.registration.ClientSettings;
3130
import org.springframework.security.oauth2.client.registration.ReactiveClientRegistrationRepository;
3231
import org.springframework.security.oauth2.client.registration.TestClientRegistrations;
3332
import org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestCustomizers;
@@ -172,7 +171,9 @@ public void resolveWhenAuthorizationRequestApplyPkceToSpecificConfidentialClient
172171

173172
@Test
174173
void resolveWhenRequireProofKeyTrueThenPkceEnabled() {
175-
ClientSettings pkceEnabled = ClientSettings.builder().requireProofKey(true).build();
174+
ClientRegistration.ClientSettings pkceEnabled = ClientRegistration.ClientSettings.builder()
175+
.requireProofKey(true)
176+
.build();
176177
ClientRegistration clientWithPkceEnabled = TestClientRegistrations.clientRegistration()
177178
.clientSettings(pkceEnabled)
178179
.build();

0 commit comments

Comments
 (0)