> {
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/spring-addons-starter-oidc/src/main/java/com/c4_soft/springaddons/security/oidc/starter/reactive/resourceserver/ResourceServerAuthorizeExchangeSpecPostProcessor.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.security.oidc.starter.reactive.resourceserver;
2 |
3 | import com.c4_soft.springaddons.security.oidc.starter.reactive.AuthorizeExchangeSpecPostProcessor;
4 |
5 | /**
6 | * Customize access-control for routes which where not listed in
7 | * {@link com.c4_soft.springaddons.security.oidc.starter.properties.SpringAddonsOidcClientProperties#permitAll SpringAddonsOidcClientProperties::permit-all} or
8 | * {@link com.c4_soft.springaddons.security.oidc.starter.properties.SpringAddonsOidcResourceServerProperties#permitAll
9 | * SpringAddonsOidcResourceServerProperties::permit-all}
10 | *
11 | * @author ch4mp
12 | */
13 | public interface ResourceServerAuthorizeExchangeSpecPostProcessor extends AuthorizeExchangeSpecPostProcessor {
14 | }
--------------------------------------------------------------------------------
/spring-addons-starter-oidc/src/main/java/com/c4_soft/springaddons/security/oidc/starter/reactive/resourceserver/ResourceServerReactiveHttpSecurityPostProcessor.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.security.oidc.starter.reactive.resourceserver;
2 |
3 | import org.springframework.security.config.web.server.ServerHttpSecurity;
4 |
5 | import com.c4_soft.springaddons.security.oidc.starter.reactive.ReactiveHttpSecurityPostProcessor;
6 |
7 | /**
8 | * Process {@link ServerHttpSecurity} of default security filter-chain after it was processed by spring-addons. This enables to override anything that was
9 | * auto-configured (or add to it).
10 | *
11 | * @author ch4mp
12 | */
13 | public interface ResourceServerReactiveHttpSecurityPostProcessor extends ReactiveHttpSecurityPostProcessor {
14 | }
15 |
--------------------------------------------------------------------------------
/spring-addons-starter-oidc/src/main/java/com/c4_soft/springaddons/security/oidc/starter/reactive/resourceserver/SpringAddonsReactiveJwtDecoderFactory.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.security.oidc.starter.reactive.resourceserver;
2 |
3 | import java.net.URI;
4 | import java.util.Optional;
5 |
6 | import org.springframework.security.oauth2.jwt.ReactiveJwtDecoder;
7 |
8 | import com.c4_soft.springaddons.security.oidc.starter.OpenidProviderPropertiesResolver;
9 |
10 | /**
11 | *
12 | * Provides with a JwtDecoder (configured with the required validators). Both JWK-set and issuer URIs are optional, but at least one should be provided.
13 | *
14 | *
15 | * {@link DefaultSpringAddonsReactiveJwtDecoderFactory}, the default implementation uses {@link OpenidProviderPropertiesResolver} to resolve the matching OpenID Provider
16 | * configuration properties and throws an exception if none are found (the token issuer is not trusted).
17 | *
18 | */
19 | public interface SpringAddonsReactiveJwtDecoderFactory {
20 | ReactiveJwtDecoder create(Optional jwkSetUri, Optional issuer, Optional audience);
21 | }
22 |
--------------------------------------------------------------------------------
/spring-addons-starter-oidc/src/main/java/com/c4_soft/springaddons/security/oidc/starter/synchronised/ExpressionInterceptUrlRegistryPostProcessor.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.security.oidc.starter.synchronised;
2 |
3 | import org.springframework.security.config.annotation.web.builders.HttpSecurity;
4 | import org.springframework.security.config.annotation.web.configurers.AuthorizeHttpRequestsConfigurer;
5 |
6 | import com.c4_soft.springaddons.security.oidc.starter.properties.SpringAddonsOidcClientProperties;
7 | import com.c4_soft.springaddons.security.oidc.starter.properties.SpringAddonsOidcResourceServerProperties;
8 |
9 | /**
10 | * Customize access-control for routes which where not listed in {@link SpringAddonsOidcClientProperties#permitAll} or
11 | * {@link SpringAddonsOidcResourceServerProperties#permitAll}
12 | *
13 | * @author ch4mp
14 | */
15 | public interface ExpressionInterceptUrlRegistryPostProcessor {
16 | AuthorizeHttpRequestsConfigurer.AuthorizationManagerRequestMatcherRegistry
17 | authorizeHttpRequests(AuthorizeHttpRequestsConfigurer.AuthorizationManagerRequestMatcherRegistry registry);
18 | }
19 |
--------------------------------------------------------------------------------
/spring-addons-starter-oidc/src/main/java/com/c4_soft/springaddons/security/oidc/starter/synchronised/SynchronizedHttpSecurityPostProcessor.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.security.oidc.starter.synchronised;
2 |
3 | import org.springframework.security.config.annotation.web.builders.HttpSecurity;
4 |
5 | public interface SynchronizedHttpSecurityPostProcessor {
6 | HttpSecurity process(HttpSecurity httpSecurity) throws Exception;
7 | }
8 |
--------------------------------------------------------------------------------
/spring-addons-starter-oidc/src/main/java/com/c4_soft/springaddons/security/oidc/starter/synchronised/client/ClientExpressionInterceptUrlRegistryPostProcessor.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.security.oidc.starter.synchronised.client;
2 |
3 | import com.c4_soft.springaddons.security.oidc.starter.synchronised.ExpressionInterceptUrlRegistryPostProcessor;
4 |
5 | /**
6 | * Post processor for access control in Java configuration.
7 | *
8 | * @author Jerome Wacongne ch4mp@c4-soft.com
9 | */
10 | public interface ClientExpressionInterceptUrlRegistryPostProcessor extends ExpressionInterceptUrlRegistryPostProcessor {
11 | }
--------------------------------------------------------------------------------
/spring-addons-starter-oidc/src/main/java/com/c4_soft/springaddons/security/oidc/starter/synchronised/client/ClientSynchronizedHttpSecurityPostProcessor.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.security.oidc.starter.synchronised.client;
2 |
3 | import com.c4_soft.springaddons.security.oidc.starter.synchronised.SynchronizedHttpSecurityPostProcessor;
4 |
5 | /**
6 | * A post-processor to override anything from spring-addons client security filter-chain auto-configuration.
7 | *
8 | * @author Jerome Wacongne ch4mp@c4-soft.com
9 | */
10 | public interface ClientSynchronizedHttpSecurityPostProcessor extends SynchronizedHttpSecurityPostProcessor {
11 | }
--------------------------------------------------------------------------------
/spring-addons-starter-oidc/src/main/java/com/c4_soft/springaddons/security/oidc/starter/synchronised/client/PreAuthorizationCodeRedirectStrategy.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.security.oidc.starter.synchronised.client;
2 |
3 | import org.springframework.security.web.RedirectStrategy;
4 |
5 | public interface PreAuthorizationCodeRedirectStrategy extends RedirectStrategy {}
--------------------------------------------------------------------------------
/spring-addons-starter-oidc/src/main/java/com/c4_soft/springaddons/security/oidc/starter/synchronised/resourceserver/JwtAbstractAuthenticationTokenConverter.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.security.oidc.starter.synchronised.resourceserver;
2 |
3 | import org.springframework.core.convert.converter.Converter;
4 | import org.springframework.security.authentication.AbstractAuthenticationToken;
5 | import org.springframework.security.oauth2.jwt.Jwt;
6 |
7 | public interface JwtAbstractAuthenticationTokenConverter extends Converter {
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/spring-addons-starter-oidc/src/main/java/com/c4_soft/springaddons/security/oidc/starter/synchronised/resourceserver/ResourceServerExpressionInterceptUrlRegistryPostProcessor.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.security.oidc.starter.synchronised.resourceserver;
2 |
3 | import com.c4_soft.springaddons.security.oidc.starter.synchronised.ExpressionInterceptUrlRegistryPostProcessor;
4 |
5 | public interface ResourceServerExpressionInterceptUrlRegistryPostProcessor extends ExpressionInterceptUrlRegistryPostProcessor {
6 | }
7 |
--------------------------------------------------------------------------------
/spring-addons-starter-oidc/src/main/java/com/c4_soft/springaddons/security/oidc/starter/synchronised/resourceserver/ResourceServerSynchronizedHttpSecurityPostProcessor.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.security.oidc.starter.synchronised.resourceserver;
2 |
3 | import org.springframework.security.config.annotation.web.builders.HttpSecurity;
4 |
5 | import com.c4_soft.springaddons.security.oidc.starter.synchronised.SynchronizedHttpSecurityPostProcessor;
6 |
7 | /**
8 | * Process {@link HttpSecurity} of default security filter-chain after it was processed by spring-addons. This enables to override anything that was
9 | * auto-configured (or add to it).
10 | *
11 | * @author ch4mp
12 | */
13 | public interface ResourceServerSynchronizedHttpSecurityPostProcessor extends SynchronizedHttpSecurityPostProcessor {
14 | }
15 |
--------------------------------------------------------------------------------
/spring-addons-starter-oidc/src/main/java/com/c4_soft/springaddons/security/oidc/starter/synchronised/resourceserver/SpringAddonsJwtDecoderFactory.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.security.oidc.starter.synchronised.resourceserver;
2 |
3 | import java.net.URI;
4 | import java.util.Optional;
5 |
6 | import org.springframework.security.oauth2.jwt.JwtDecoder;
7 |
8 | import com.c4_soft.springaddons.security.oidc.starter.OpenidProviderPropertiesResolver;
9 |
10 | /**
11 | *
12 | * Provides with a JwtDecoder (configured with the required validators). Both JWK-set and issuer URIs are optional, but at least one should be provided.
13 | *
14 | *
15 | * {@link DefaultSpringAddonsJwtDecoderFactory}, the default implementation uses {@link OpenidProviderPropertiesResolver} to resolve the matching OpenID Provider
16 | * configuration properties and throws an exception if none are found (the token issuer is not trusted).
17 | *
18 | */
19 | public interface SpringAddonsJwtDecoderFactory {
20 | JwtDecoder create(Optional jwkSetUri, Optional issuer, Optional audience);
21 | }
--------------------------------------------------------------------------------
/spring-addons-starter-oidc/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports:
--------------------------------------------------------------------------------
1 | com.c4_soft.springaddons.security.oidc.starter.properties.SpringAddonsOidcProperties
2 |
3 | com.c4_soft.springaddons.security.oidc.starter.reactive.client.ReactiveSpringAddonsOAuth2AuthorizedClientBeans
4 | com.c4_soft.springaddons.security.oidc.starter.reactive.client.ReactiveSpringAddonsOidcClientWithLoginBeans
5 | com.c4_soft.springaddons.security.oidc.starter.reactive.resourceserver.ReactiveSpringAddonsOidcResourceServerBeans
6 |
7 | com.c4_soft.springaddons.security.oidc.starter.synchronised.client.SpringAddonsOAuth2AuthorizedClientBeans
8 | com.c4_soft.springaddons.security.oidc.starter.synchronised.client.SpringAddonsOidcClientWithLoginBeans
9 | com.c4_soft.springaddons.security.oidc.starter.synchronised.resourceserver.SpringAddonsOidcResourceServerBeans
10 |
--------------------------------------------------------------------------------
/spring-addons-starter-oidc/src/main/resources/c4-spring-addons.properties:
--------------------------------------------------------------------------------
1 | spring.aop.proxy-target-class=false
--------------------------------------------------------------------------------
/spring-addons-starter-oidc/src/test/java/com/c4_soft/springaddons/security/oidc/starter/reactive/client/SpringAddonsServerOAuth2AuthorizationRequestResolverTest.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.security.oidc.starter.reactive.client;
2 |
3 | import static org.junit.jupiter.api.Assertions.assertEquals;
4 | import static org.junit.jupiter.api.Assertions.assertNull;
5 |
6 | import org.junit.jupiter.api.Test;
7 |
8 | class SpringAddonsServerOAuth2AuthorizationRequestResolverTest {
9 |
10 | @Test
11 | void whenRequestPathMatchesAuthorizationCodePattern_thenClientRegistrationIdIsReturned() {
12 | final var actual = SpringAddonsServerOAuth2AuthorizationRequestResolver.resolveRegistrationId("/oauth2/authorization/authorization-code");
13 | assertEquals("authorization-code", actual);
14 | }
15 |
16 | @Test
17 | void whenRequestPathDoesNotMatchAuthorizationCodePattern_thenClientRegistrationIdIsReturned() {
18 | final var actual = SpringAddonsServerOAuth2AuthorizationRequestResolver.resolveRegistrationId("/login/authorization/authorization-code");
19 | assertNull(actual);
20 | }
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/spring-addons-starter-openapi/pom.xml:
--------------------------------------------------------------------------------
1 |
2 | 4.0.0
3 |
4 | com.c4-soft.springaddons
5 | spring-addons
6 | 8.1.16-SNAPSHOT
7 | ..
8 |
9 | spring-addons-starter-openapi
10 |
11 | https://github.com/ch4mpy/spring-addons/
12 |
13 | scm:git:git://github.com/ch4mpy/spring-addons.git
14 | scm:git:git@github.com:ch4mpy/spring-addons.git
15 | https://github.com/ch4mpy/spring-addons
16 | spring-addons-7.8.8
17 |
18 |
19 |
20 |
21 | org.springdoc
22 | springdoc-openapi-starter-webflux-api
23 | true
24 |
25 |
26 | org.springdoc
27 | springdoc-openapi-starter-webmvc-api
28 | true
29 |
30 |
31 |
32 | org.projectlombok
33 | lombok
34 | provided
35 |
36 |
37 |
--------------------------------------------------------------------------------
/spring-addons-starter-openapi/src/main/java/com/c4_soft/springaddons/openapi/EnumPossibleValuesExtractor.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.openapi;
2 |
3 | import java.util.Set;
4 |
5 | public interface EnumPossibleValuesExtractor {
6 | Set getValues(Class> enumClass);
7 | }
--------------------------------------------------------------------------------
/spring-addons-starter-openapi/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports:
--------------------------------------------------------------------------------
1 | com.c4_soft.springaddons.openapi.SpringAddonsOpenapiAutoConfiguration
2 |
--------------------------------------------------------------------------------
/spring-addons-starter-recaptcha/src/main/java/com/c4_soft/springaddons/starter/recaptcha/C4ReCaptchaSettings.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.starter.recaptcha;
2 |
3 | import java.net.URL;
4 | import org.springframework.beans.factory.annotation.Value;
5 | import org.springframework.boot.context.properties.ConfigurationProperties;
6 | import org.springframework.boot.context.properties.NestedConfigurationProperty;
7 | import org.springframework.stereotype.Component;
8 | import com.c4_soft.springaddons.rest.SpringAddonsRestProperties.RestClientProperties.ClientHttpRequestFactoryProperties;
9 | import lombok.Data;
10 |
11 | @Data
12 | @Component
13 | @ConfigurationProperties(prefix = "com.c4-soft.springaddons.recaptcha")
14 | public class C4ReCaptchaSettings {
15 |
16 | private String secretKey;
17 |
18 | @Value("${siteverify-url:https://www.google.com/recaptcha/api/siteverify}")
19 | private URL siteverifyUrl;
20 |
21 | private double v3Threshold = .5;
22 |
23 | @NestedConfigurationProperty
24 | private ClientHttpRequestFactoryProperties http;
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/spring-addons-starter-recaptcha/src/main/java/com/c4_soft/springaddons/starter/recaptcha/ReCaptchaValidationException.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.starter.recaptcha;
2 |
3 | /**
4 | * @author Jérôme Wacongne ch4mp@c4-soft.com
5 | */
6 | public class ReCaptchaValidationException extends RuntimeException {
7 | private static final long serialVersionUID = 6903170315686842893L;
8 |
9 | public ReCaptchaValidationException(String message) {
10 | super(message);
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/spring-addons-starter-recaptcha/src/main/java/com/c4_soft/springaddons/starter/recaptcha/SpringBootAutoConfiguration.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.starter.recaptcha;
2 |
3 | import org.springframework.boot.autoconfigure.AutoConfiguration;
4 | import org.springframework.context.annotation.Import;
5 |
6 | @AutoConfiguration
7 | @Import({ C4ReCaptchaSettings.class, C4ReCaptchaValidationService.class })
8 | public class SpringBootAutoConfiguration {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/spring-addons-starter-recaptcha/src/main/java/com/c4_soft/springaddons/starter/recaptcha/V2ValidationResponseDto.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.starter.recaptcha;
2 |
3 | import java.io.Serializable;
4 | import java.util.List;
5 |
6 | import lombok.AllArgsConstructor;
7 | import lombok.Data;
8 | import lombok.NoArgsConstructor;
9 |
10 | /**
11 | * @author Jérôme Wacongne ch4mp@c4-soft.com
12 | */
13 | @Data
14 | @NoArgsConstructor
15 | @AllArgsConstructor
16 | public class V2ValidationResponseDto implements Serializable {
17 | private static final long serialVersionUID = -5003891633297808293L;
18 |
19 | /**
20 | * whether this request was a valid reCAPTCHA token for your site
21 | */
22 | private boolean success;
23 |
24 | /**
25 | * timestamp of the challenge load (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)
26 | */
27 | private String challengeTs;
28 |
29 | /**
30 | * the hostname of the site where the reCAPTCHA was solved
31 | */
32 | private String hostname;
33 |
34 | /**
35 | * optional
36 | */
37 | private List errorCodes;
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/spring-addons-starter-recaptcha/src/main/java/com/c4_soft/springaddons/starter/recaptcha/V3ValidationResponseDto.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.starter.recaptcha;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.EqualsAndHashCode;
6 | import lombok.NoArgsConstructor;
7 |
8 | /**
9 | * @author Jérôme Wacongne ch4mp@c4-soft.com
10 | */
11 | @Data
12 | @EqualsAndHashCode(callSuper = true)
13 | @NoArgsConstructor
14 | @AllArgsConstructor
15 | public class V3ValidationResponseDto extends V2ValidationResponseDto {
16 | private static final long serialVersionUID = 3873084888623735286L;
17 |
18 | /**
19 | * the score for this request (0.0 - 1.0)
20 | */
21 | private double score;
22 |
23 | /**
24 | * the action name for this request (important to verify)
25 | */
26 | private String action;
27 | }
28 |
--------------------------------------------------------------------------------
/spring-addons-starter-recaptcha/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports:
--------------------------------------------------------------------------------
1 | com.c4_soft.springaddons.starter.recaptcha.SpringBootAutoConfiguration
--------------------------------------------------------------------------------
/spring-addons-starter-recaptcha/src/test/resources/application.properties:
--------------------------------------------------------------------------------
1 | server.ssl.enabled=false
2 |
3 | com.c4-soft.springaddons.recaptcha.secret-key=machin
4 | com.c4-soft.springaddons.recaptcha.siteverify-url=https://localhost/recaptcha/api/siteverify
5 | com.c4-soft.springaddons.recaptcha.v3-threshold=0.8
6 |
7 | #---
8 | spring.config.activate.on-profile=proxy
9 | http_proxy=https://machin:truc@env-proxy:8080
10 | no_proxy=localhost,bravo-ch4mp,.env-domain.pf
--------------------------------------------------------------------------------
/spring-addons-starter-rest/src/main/java/com/c4_soft/springaddons/rest/RestConfigurationNotFoundException.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.rest;
2 |
3 | public class RestConfigurationNotFoundException extends RuntimeException {
4 | private static final long serialVersionUID = -1174591896184901571L;
5 |
6 | public RestConfigurationNotFoundException(String clientName) {
7 | super("No spring-addons OAuth2 client properties for a REST client named %s".formatted(clientName));
8 | }
9 | }
--------------------------------------------------------------------------------
/spring-addons-starter-rest/src/main/java/com/c4_soft/springaddons/rest/RestMisconfigurationException.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.rest;
2 |
3 | public class RestMisconfigurationException extends RuntimeException {
4 | private static final long serialVersionUID = 681577983030933423L;
5 |
6 | public RestMisconfigurationException(String message) {
7 | super(message);
8 | }
9 |
10 | public RestMisconfigurationException(Throwable e) {
11 | super(e);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/spring-addons-starter-rest/src/main/java/com/c4_soft/springaddons/rest/reactive/DefaultReactiveAuthorizationFailureHandlerCondition.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.rest.reactive;
2 |
3 | import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
4 | import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
5 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
6 | import org.springframework.security.oauth2.client.ReactiveOAuth2AuthorizationFailureHandler;
7 | import org.springframework.security.oauth2.client.web.server.ServerOAuth2AuthorizedClientRepository;
8 |
9 | public class DefaultReactiveAuthorizationFailureHandlerCondition extends AllNestedConditions {
10 |
11 | DefaultReactiveAuthorizationFailureHandlerCondition() {
12 | super(ConfigurationPhase.REGISTER_BEAN);
13 | }
14 |
15 | @ConditionalOnMissingBean(ReactiveOAuth2AuthorizationFailureHandler.class)
16 | static class OAuth2AuthorizationFailureHandlerNotProvided {
17 | }
18 |
19 | @ConditionalOnBean(ServerOAuth2AuthorizedClientRepository.class)
20 | static class AuthorizedClientRepositoryProvided {
21 | }
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/spring-addons-starter-rest/src/main/java/com/c4_soft/springaddons/rest/reactive/ServerWebClientBuilderFactoryBean.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.rest.reactive;
2 |
3 | import java.util.Optional;
4 | import org.springframework.security.oauth2.client.ReactiveOAuth2AuthorizedClientManager;
5 | import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
6 | import com.c4_soft.springaddons.rest.AbstractWebClientBuilderFactoryBean;
7 | import lombok.Setter;
8 |
9 | @Setter
10 | public class ServerWebClientBuilderFactoryBean extends AbstractWebClientBuilderFactoryBean {
11 | private Optional authorizedClientManager;
12 |
13 | @Override
14 | protected ExchangeFilterFunction registrationExchangeFilterFunction(String Oauth2RegistrationId) {
15 | return SpringAddonsServerWebClientSupport
16 | .registrationExchangeFilterFunction(authorizedClientManager.get(), Oauth2RegistrationId);
17 | }
18 |
19 | @Override
20 | protected ExchangeFilterFunction forwardingBearerExchangeFilterFunction() {
21 | return SpringAddonsServerWebClientSupport.forwardingBearerExchangeFilterFunction();
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/spring-addons-starter-rest/src/main/java/com/c4_soft/springaddons/rest/synchronised/DefaultAuthorizationFailureHandlerCondition.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.rest.synchronised;
2 |
3 | import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
4 | import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
5 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
6 | import org.springframework.security.oauth2.client.OAuth2AuthorizationFailureHandler;
7 | import org.springframework.security.oauth2.client.web.OAuth2AuthorizedClientRepository;
8 |
9 | public class DefaultAuthorizationFailureHandlerCondition extends AllNestedConditions {
10 |
11 | DefaultAuthorizationFailureHandlerCondition() {
12 | super(ConfigurationPhase.REGISTER_BEAN);
13 | }
14 |
15 | @ConditionalOnMissingBean(OAuth2AuthorizationFailureHandler.class)
16 | static class OAuth2AuthorizationFailureHandlerNotProvided {
17 | }
18 |
19 | @ConditionalOnBean(OAuth2AuthorizedClientRepository.class)
20 | static class AuthorizedClientRepositoryProvided {
21 | }
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/spring-addons-starter-rest/src/main/java/com/c4_soft/springaddons/rest/synchronised/IsServletWithWebClientCondition.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.rest.synchronised;
2 |
3 | import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
4 | import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
5 | import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
6 | import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type;
7 | import org.springframework.web.reactive.function.client.WebClient;
8 |
9 | /**
10 | * A conditon to apply @Configuration only if an application is a servlet and if
11 | * {@link WebClient} is on the class-path
12 | *
13 | * @author Jérôme Wacongne <ch4mp@c4-soft.com>
14 | */
15 | public class IsServletWithWebClientCondition extends AllNestedConditions {
16 |
17 | IsServletWithWebClientCondition() {
18 | super(ConfigurationPhase.PARSE_CONFIGURATION);
19 | }
20 |
21 | @ConditionalOnWebApplication(type = Type.SERVLET)
22 | static class IsServlet {
23 | }
24 |
25 | @ConditionalOnClass(WebClient.class)
26 | static class IsWebClientOnClasspath {
27 | }
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/spring-addons-starter-rest/src/main/java/com/c4_soft/springaddons/rest/synchronised/SpringAddonsRestClientBeans.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.rest.synchronised;
2 |
3 | import org.springframework.boot.autoconfigure.AutoConfiguration;
4 | import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
5 | import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type;
6 | import org.springframework.context.annotation.Bean;
7 | import org.springframework.core.env.Environment;
8 |
9 | /**
10 | * Applied only in servlet applications.
11 | *
12 | * @author Jérôme Wacongne <ch4mp@c4-soft.com>
13 | */
14 | @ConditionalOnWebApplication(type = Type.SERVLET)
15 | @AutoConfiguration
16 | public class SpringAddonsRestClientBeans {
17 |
18 | @Bean
19 | SpringAddonsRestClientBeanDefinitionRegistryPostProcessor springAddonsRestClientBeanDefinitionRegistryPostProcessor(
20 | Environment environment) {
21 | return new SpringAddonsRestClientBeanDefinitionRegistryPostProcessor(environment);
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/spring-addons-starter-rest/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports:
--------------------------------------------------------------------------------
1 | com.c4_soft.springaddons.rest.SystemProxyProperties
2 | com.c4_soft.springaddons.rest.SpringAddonsRestProperties
3 | com.c4_soft.springaddons.rest.synchronised.SpringAddonsRestClientBeans
4 | com.c4_soft.springaddons.rest.reactive.SpringAddonsServerWebClientBeans
5 | com.c4_soft.springaddons.rest.synchronised.SpringAddonsServletWebClientBeans
--------------------------------------------------------------------------------
/spring-addons-starter-rest/src/test/java/com/c4_soft/springaddons/rest/SpringAddonsClientHttpRequestFactoryDisabledTest.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.rest;
2 |
3 | import static org.junit.jupiter.api.Assertions.assertFalse;
4 | import java.io.IOException;
5 | import org.junit.jupiter.api.Test;
6 | import org.springframework.boot.test.context.SpringBootTest;
7 | import org.springframework.test.context.ActiveProfiles;
8 |
9 | @SpringBootTest(classes = StubBootApplication.class)
10 | @ActiveProfiles("proxy-disabled")
11 | class SpringAddonsClientHttpRequestFactoryDisabledTest
12 | extends AbstractSpringAddonsClientHttpRequestFactoryTest {
13 |
14 | @Test
15 | void test() throws IOException, IllegalArgumentException, IllegalAccessException,
16 | NoSuchFieldException, SecurityException {
17 | assertFalse(isUsingProxy("http://server.external.com/foo"));
18 | assertFalse(isUsingProxy("http://localhost/foo"));
19 | assertFalse(isUsingProxy("http://bravo-ch4mp/foo"));
20 | assertFalse(isUsingProxy("http://server.corporate-domain.pf/foo"));
21 | }
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/spring-addons-starter-rest/src/test/java/com/c4_soft/springaddons/rest/SpringAddonsClientHttpRequestFactoryFullTest.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.rest;
2 |
3 | import static org.junit.jupiter.api.Assertions.assertFalse;
4 | import static org.junit.jupiter.api.Assertions.assertTrue;
5 | import java.io.IOException;
6 | import org.junit.jupiter.api.Test;
7 | import org.springframework.boot.test.context.SpringBootTest;
8 | import org.springframework.test.context.ActiveProfiles;
9 |
10 | @SpringBootTest(classes = StubBootApplication.class)
11 | @ActiveProfiles("proxy-full")
12 | class SpringAddonsClientHttpRequestFactoryFullTest
13 | extends AbstractSpringAddonsClientHttpRequestFactoryTest {
14 |
15 | @Test
16 | void test() throws IOException, IllegalArgumentException, IllegalAccessException,
17 | NoSuchFieldException, SecurityException {
18 | assertTrue(isUsingProxy("http://server.external.com/foo"));
19 | assertFalse(isUsingProxy("http://localhost/foo"));
20 | assertFalse(isUsingProxy("http://bravo-ch4mp/foo"));
21 | assertFalse(isUsingProxy("http://server.corporate-domain.pf/foo"));
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/spring-addons-starter-rest/src/test/java/com/c4_soft/springaddons/rest/SpringAddonsClientHttpRequestFactoryMinimalTest.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.rest;
2 |
3 | import static org.junit.jupiter.api.Assertions.assertTrue;
4 | import java.io.IOException;
5 | import org.junit.jupiter.api.Test;
6 | import org.springframework.boot.test.context.SpringBootTest;
7 | import org.springframework.test.context.ActiveProfiles;
8 | import org.wiremock.spring.EnableWireMock;
9 |
10 | @SpringBootTest(classes = StubBootApplication.class)
11 | @ActiveProfiles("proxy-minimal")
12 | @EnableWireMock
13 | class SpringAddonsClientHttpRequestFactoryMinimalTest
14 | extends AbstractSpringAddonsClientHttpRequestFactoryTest {
15 |
16 | @Test
17 | void test() throws IOException, IllegalArgumentException, IllegalAccessException,
18 | NoSuchFieldException, SecurityException {
19 | assertTrue(isUsingProxy("http://server.external.com/foo"));
20 | assertTrue(isUsingProxy("http://localhost/foo"));
21 | assertTrue(isUsingProxy("http://bravo-ch4mp/foo"));
22 | assertTrue(isUsingProxy("http://server.corporate-domain.pf/foo"));
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/spring-addons-starter-rest/src/test/java/com/c4_soft/springaddons/rest/SpringAddonsClientHttpRequestFactoryStdEnvVarsTest.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.rest;
2 |
3 | import static org.junit.jupiter.api.Assertions.assertFalse;
4 | import static org.junit.jupiter.api.Assertions.assertTrue;
5 | import java.io.IOException;
6 | import org.junit.jupiter.api.Test;
7 | import org.springframework.boot.test.context.SpringBootTest;
8 | import org.springframework.test.context.ActiveProfiles;
9 |
10 | @SpringBootTest(classes = StubBootApplication.class)
11 | @ActiveProfiles("proxy-std-env-vars")
12 | class SpringAddonsClientHttpRequestFactoryStdEnvVarsTest
13 | extends AbstractSpringAddonsClientHttpRequestFactoryTest {
14 |
15 | @Test
16 | void test() throws IOException, IllegalArgumentException, IllegalAccessException,
17 | NoSuchFieldException, SecurityException {
18 | assertTrue(isUsingProxy("http://server.external.com/foo"));
19 | assertFalse(isUsingProxy("http://localhost/foo"));
20 | assertFalse(isUsingProxy("http://bravo-ch4mp/foo"));
21 | assertFalse(isUsingProxy("http://server.corporate-domain.pf/foo"));
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/spring-addons-starter-rest/src/test/java/com/c4_soft/springaddons/rest/StubBootApplication.java:
--------------------------------------------------------------------------------
1 | package com.c4_soft.springaddons.rest;
2 |
3 | import org.springframework.boot.autoconfigure.SpringBootApplication;
4 | import org.springframework.context.annotation.Bean;
5 | import com.c4_soft.springaddons.rest.synchronised.SpringAddonsClientHttpRequestFactory;
6 |
7 | @SpringBootApplication
8 | class StubBootApplication {
9 |
10 | @Bean
11 | SpringAddonsClientHttpRequestFactory springAddonsClientHttpRequestFactory(
12 | SystemProxyProperties systemProperties, SpringAddonsRestProperties addonsProperties) {
13 | return new SpringAddonsClientHttpRequestFactory(systemProperties,
14 | addonsProperties.getClient().get("foo-client").getHttp());
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/spring-addons-starter-rest/src/test/resources/ch4mp.json:
--------------------------------------------------------------------------------
1 | {
2 | "realm_access": {
3 | "roles": [
4 | "NICE", "AUTHOR"
5 | ]
6 | },
7 | "iss": "http://localhost:7080/auth/realms/spring-addons",
8 | "sub": "4dd56dbb-71ef-4fe2-9358-3ae3240a9e94",
9 | "scope": "openid email"
10 | }
11 |
--------------------------------------------------------------------------------