Skip to content

Commit

Permalink
Revert OAuth2 Client Registration Grant Type Hierarchy
Browse files Browse the repository at this point in the history
  • Loading branch information
mbhave committed Oct 4, 2018
1 parent 546bd89 commit daa3d45
Show file tree
Hide file tree
Showing 15 changed files with 168 additions and 661 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
package org.springframework.boot.autoconfigure.security.oauth2.client;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;

Expand All @@ -36,46 +35,32 @@
* @author Madhura Bhave
* @since 2.1.0
*/
public class ClientsConfiguredCondition extends SpringBootCondition {

private static final Bindable<Map<String, OAuth2ClientProperties.LoginClientRegistration>> STRING_LOGIN_REGISTRATION_MAP = Bindable
.mapOf(String.class, OAuth2ClientProperties.LoginClientRegistration.class);
public class ClientsConfiguredCondition extends SpringBootCondition {

private static final Bindable<Map<String, OAuth2ClientProperties.AuthorizationCodeClientRegistration>> STRING_AUTHORIZATION_CODE_REGISTRATION_MAP = Bindable
.mapOf(String.class,
OAuth2ClientProperties.AuthorizationCodeClientRegistration.class);
private static final Bindable<Map<String, OAuth2ClientProperties.Registration>> STRING_REGISTRATION_MAP = Bindable
.mapOf(String.class, OAuth2ClientProperties.Registration.class);

@Override
public ConditionOutcome getMatchOutcome(ConditionContext context,
AnnotatedTypeMetadata metadata) {
ConditionMessage.Builder message = ConditionMessage
.forCondition("OAuth2 Clients Configured Condition");
Map<String, OAuth2ClientProperties.BaseClientRegistration> registrations = getRegistrations(
Map<String, OAuth2ClientProperties.Registration> registrations = getRegistrations(
context.getEnvironment());
if (!registrations.isEmpty()) {
return ConditionOutcome.match(message.foundExactly(
"registered clients " + registrations.values().stream().map(
OAuth2ClientProperties.BaseClientRegistration::getClientId)
return ConditionOutcome.match(message
.foundExactly("registered clients " + registrations.values().stream()
.map(OAuth2ClientProperties.Registration::getClientId)
.collect(Collectors.joining(", "))));
}
return ConditionOutcome.noMatch(message.notAvailable("registered clients"));
}

private Map<String, OAuth2ClientProperties.BaseClientRegistration> getRegistrations(
private Map<String, OAuth2ClientProperties.Registration> getRegistrations(
Environment environment) {
Map<String, OAuth2ClientProperties.BaseClientRegistration> registrations = new HashMap<>();
Map<String, OAuth2ClientProperties.LoginClientRegistration> loginClientRegistrations = Binder
.get(environment).bind("spring.security.oauth2.client.registration.login",
STRING_LOGIN_REGISTRATION_MAP)
.orElse(Collections.emptyMap());
Map<String, OAuth2ClientProperties.AuthorizationCodeClientRegistration> authCodeClientRegistrations = Binder
.get(environment)
.bind("spring.security.oauth2.client.registration.authorizationcode",
STRING_AUTHORIZATION_CODE_REGISTRATION_MAP)
.orElse(Collections.emptyMap());
registrations.putAll(loginClientRegistrations);
registrations.putAll(authCodeClientRegistrations);
return registrations;
return Binder.get(environment).bind("spring.security.oauth2.client.registration",
STRING_REGISTRATION_MAP).orElse(Collections.emptyMap());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -44,115 +44,31 @@ public class OAuth2ClientProperties {
/**
* OAuth client registrations.
*/
private final Registration registration = new Registration();
private final Map<String, Registration> registration = new HashMap<>();

public Map<String, Provider> getProvider() {
return this.provider;
}

public Registration getRegistration() {
public Map<String, Registration> getRegistration() {
return this.registration;
}

@PostConstruct
public void validate() {
this.getRegistration().getLogin().values().forEach(this::validateRegistration);
this.getRegistration().getAuthorizationCode().values()
.forEach(this::validateRegistration);
this.getRegistration().values().forEach(this::validateRegistration);
}

private void validateRegistration(BaseClientRegistration registration) {
private void validateRegistration(Registration registration) {
if (!StringUtils.hasText(registration.getClientId())) {
throw new IllegalStateException("Client id must not be empty.");
}
}

public static class Registration {

/**
* OpenID Connect client registrations.
*/
private Map<String, LoginClientRegistration> login = new HashMap<>();

/**
* OAuth2 authorization_code client registrations.
*/
private Map<String, AuthorizationCodeClientRegistration> authorizationCode = new HashMap<>();

public Map<String, LoginClientRegistration> getLogin() {
return this.login;
}

public void setLogin(Map<String, LoginClientRegistration> login) {
this.login = login;
}

public Map<String, AuthorizationCodeClientRegistration> getAuthorizationCode() {
return this.authorizationCode;
}

public void setAuthorizationCode(
Map<String, AuthorizationCodeClientRegistration> authorizationCode) {
this.authorizationCode = authorizationCode;
}

}

/**
* A single client registration for OpenID Connect login.
* A single client registration.
*/
public static class LoginClientRegistration extends BaseClientRegistration {

/**
* Redirect URI. May be left blank when using a pre-defined provider.
*/
private String redirectUri;

public String getRedirectUri() {
return this.redirectUri;
}

public void setRedirectUri(String redirectUri) {
this.redirectUri = redirectUri;
}

@Deprecated
public String getRedirectUriTemplate() {
return getRedirectUri();
}

@Deprecated
public void setRedirectUriTemplate(String redirectUri) {
setRedirectUri(redirectUri);
}

}

/**
* A single client registration for OAuth2 authorization_code flow.
*/
public static class AuthorizationCodeClientRegistration
extends BaseClientRegistration {

/**
* Redirect URI for the registration.
*/
private String redirectUri;

public String getRedirectUri() {
return this.redirectUri;
}

public void setRedirectUri(String redirectUri) {
this.redirectUri = redirectUri;
}

}

/**
* Base class for a single client registration.
*/
public static class BaseClientRegistration {
public static class Registration {

/**
* Reference to the OAuth 2.0 provider to use. May reference an element from the
Expand Down Expand Up @@ -182,6 +98,11 @@ public static class BaseClientRegistration {
*/
private String authorizationGrantType;

/**
* Redirect URI. May be left blank when using a pre-defined provider.
*/
private String redirectUri;

/**
* Authorization scopes. May be left blank when using a pre-defined provider.
*/
Expand Down Expand Up @@ -232,6 +153,24 @@ public void setAuthorizationGrantType(String authorizationGrantType) {
this.authorizationGrantType = authorizationGrantType;
}

public String getRedirectUri() {
return this.redirectUri;
}

public void setRedirectUri(String redirectUri) {
this.redirectUri = redirectUri;
}

@Deprecated
public String getRedirectUriTemplate() {
return getRedirectUri();
}

@Deprecated
public void setRedirectUriTemplate(String redirectUri) {
setRedirectUri(redirectUri);
}

public Set<String> getScope() {
return this.scope;
}
Expand Down

This file was deleted.

Loading

0 comments on commit daa3d45

Please sign in to comment.