private Mono<Void> sendRedirectForAuthorization(ServerWebExchange exchange, OAuth2AuthorizationRequest authorizationRequest) { return Mono.defer(() -> { Mono<Void> saveAuthorizationRequest = Mono.empty(); if (AuthorizationGrantType.AUTHORIZATION_CODE.equals(authorizationRequest.getGrantType())) { saveAuthorizationRequest = this.authorizationRequestRepository .saveAuthorizationRequest(authorizationRequest, exchange); } URI redirectUri = UriComponentsBuilder .fromUriString(authorizationRequest.getAuthorizationRequestUri()) .build(true).toUri(); return saveAuthorizationRequest .then(this.authorizationRedirectStrategy.sendRedirect(exchange, redirectUri)); }); } }
@Before public void setup() { this.filter = new OAuth2AuthorizationRequestRedirectWebFilter(this.clientRepository); this.filter.setAuthorizationRequestRepository(this.authzRequestRepository); FilteringWebHandler webHandler = new FilteringWebHandler(e -> e.getResponse().setComplete(), Arrays.asList(this.filter)); this.client = WebTestClient.bindToWebHandler(webHandler).build(); when(this.clientRepository.findByRegistrationId(this.registration.getRegistrationId())).thenReturn( Mono.just(this.registration)); when(this.authzRequestRepository.saveAuthorizationRequest(any(), any())).thenReturn( Mono.empty()); }
@Test public void filterWhenDoesMatchThenClientRegistrationRepositoryNotSubscribed() { FluxExchangeResult<String> result = this.client.get() .uri("https://example.com/oauth2/authorization/registration-id").exchange() .expectStatus().is3xxRedirection().returnResult(String.class); result.assertWithDiagnostics(() -> { URI location = result.getResponseHeaders().getLocation(); assertThat(location) .hasScheme("https") .hasHost("example.com") .hasPath("/login/oauth/authorize") .hasParameter("response_type", "code") .hasParameter("client_id", "client-id") .hasParameter("scope", "read:user") .hasParameter("state") .hasParameter("redirect_uri", "https://example.com/login/oauth2/code/registration-id"); }); verify(this.authzRequestRepository).saveAuthorizationRequest(any(), any()); }
private Mono<Void> sendRedirectForAuthorization(ServerWebExchange exchange, OAuth2AuthorizationRequest authorizationRequest) { return Mono.defer(() -> { Mono<Void> saveAuthorizationRequest = Mono.empty(); if (AuthorizationGrantType.AUTHORIZATION_CODE.equals(authorizationRequest.getGrantType())) { saveAuthorizationRequest = this.authorizationRequestRepository .saveAuthorizationRequest(authorizationRequest, exchange); } URI redirectUri = UriComponentsBuilder .fromUriString(authorizationRequest.getAuthorizationRequestUri()) .build(true).toUri(); return saveAuthorizationRequest .then(this.authorizationRedirectStrategy.sendRedirect(exchange, redirectUri)); }); } }