|
1 | 1 | /*
|
2 |
| - * Copyright 2002-2018 the original author or authors. |
| 2 | + * Copyright 2002-2019 the original author or authors. |
3 | 3 | *
|
4 | 4 | * Licensed under the Apache License, Version 2.0 (the "License");
|
5 | 5 | * you may not use this file except in compliance with the License.
|
@@ -63,7 +63,7 @@ public class WebSessionOAuth2ServerAuthorizationRequestRepositoryTests {
|
63 | 63 | .queryParam(OAuth2ParameterNames.STATE, "state"));
|
64 | 64 |
|
65 | 65 | @Test
|
66 |
| - public void loadAuthorizatioNRequestWhenNullExchangeThenIllegalArgumentException() { |
| 66 | + public void loadAuthorizationRequestWhenNullExchangeThenIllegalArgumentException() { |
67 | 67 | this.exchange = null;
|
68 | 68 | assertThatThrownBy(() -> this.repository.loadAuthorizationRequest(this.exchange))
|
69 | 69 | .isInstanceOf(IllegalArgumentException.class);
|
@@ -106,36 +106,6 @@ public void loadAuthorizationRequestWhenSavedThenAuthorizationRequest() {
|
106 | 106 | .verifyComplete();
|
107 | 107 | }
|
108 | 108 |
|
109 |
| - @Test |
110 |
| - public void multipleSavedAuthorizationRequestAndRedisCookie() { |
111 |
| - String oldState = "state0"; |
112 |
| - MockServerHttpRequest oldRequest = MockServerHttpRequest.get("/") |
113 |
| - .queryParam(OAuth2ParameterNames.STATE, oldState).build(); |
114 |
| - |
115 |
| - OAuth2AuthorizationRequest oldAuthorizationRequest = OAuth2AuthorizationRequest.authorizationCode() |
116 |
| - .authorizationUri("https://example.com/oauth2/authorize") |
117 |
| - .clientId("client-id") |
118 |
| - .redirectUri("http://localhost/client-1") |
119 |
| - .state(oldState) |
120 |
| - .build(); |
121 |
| - |
122 |
| - Map<String, Object> sessionAttrs = spy(new HashMap<>()); |
123 |
| - WebSession session = mock(WebSession.class); |
124 |
| - when(session.getAttributes()).thenReturn(sessionAttrs); |
125 |
| - WebSessionManager sessionManager = e -> Mono.just(session); |
126 |
| - |
127 |
| - this.exchange = new DefaultServerWebExchange(this.exchange.getRequest(), new MockServerHttpResponse(), sessionManager, |
128 |
| - ServerCodecConfigurer.create(), new AcceptHeaderLocaleContextResolver()); |
129 |
| - ServerWebExchange oldExchange = new DefaultServerWebExchange(oldRequest, new MockServerHttpResponse(), sessionManager, |
130 |
| - ServerCodecConfigurer.create(), new AcceptHeaderLocaleContextResolver()); |
131 |
| - |
132 |
| - Mono<Void> saveAndSave = this.repository.saveAuthorizationRequest(oldAuthorizationRequest, oldExchange) |
133 |
| - .then(this.repository.saveAuthorizationRequest(this.authorizationRequest, this.exchange)); |
134 |
| - |
135 |
| - StepVerifier.create(saveAndSave).verifyComplete(); |
136 |
| - verify(sessionAttrs, times(2)).put(any(), any()); |
137 |
| - } |
138 |
| - |
139 | 109 | @Test
|
140 | 110 | public void loadAuthorizationRequestWhenMultipleSavedThenAuthorizationRequest() {
|
141 | 111 | String oldState = "state0";
|
@@ -269,6 +239,44 @@ public void removeAuthorizationRequestWhenMultipleThenOnlyOneRemoved() {
|
269 | 239 | .verifyComplete();
|
270 | 240 | }
|
271 | 241 |
|
| 242 | + // gh-7327 |
| 243 | + @Test |
| 244 | + public void removeAuthorizationRequestWhenMultipleThenRemovedAndSessionAttributeUpdated() { |
| 245 | + String oldState = "state0"; |
| 246 | + MockServerHttpRequest oldRequest = MockServerHttpRequest.get("/") |
| 247 | + .queryParam(OAuth2ParameterNames.STATE, oldState).build(); |
| 248 | + |
| 249 | + OAuth2AuthorizationRequest oldAuthorizationRequest = OAuth2AuthorizationRequest.authorizationCode() |
| 250 | + .authorizationUri("https://example.com/oauth2/authorize") |
| 251 | + .clientId("client-id") |
| 252 | + .redirectUri("http://localhost/client-1") |
| 253 | + .state(oldState) |
| 254 | + .build(); |
| 255 | + |
| 256 | + Map<String, Object> sessionAttrs = spy(new HashMap<>()); |
| 257 | + WebSession session = mock(WebSession.class); |
| 258 | + when(session.getAttributes()).thenReturn(sessionAttrs); |
| 259 | + WebSessionManager sessionManager = e -> Mono.just(session); |
| 260 | + |
| 261 | + this.exchange = new DefaultServerWebExchange(this.exchange.getRequest(), new MockServerHttpResponse(), sessionManager, |
| 262 | + ServerCodecConfigurer.create(), new AcceptHeaderLocaleContextResolver()); |
| 263 | + ServerWebExchange oldExchange = new DefaultServerWebExchange(oldRequest, new MockServerHttpResponse(), sessionManager, |
| 264 | + ServerCodecConfigurer.create(), new AcceptHeaderLocaleContextResolver()); |
| 265 | + |
| 266 | + Mono<OAuth2AuthorizationRequest> saveAndSaveAndRemove = this.repository.saveAuthorizationRequest(oldAuthorizationRequest, oldExchange) |
| 267 | + .then(this.repository.saveAuthorizationRequest(this.authorizationRequest, this.exchange)) |
| 268 | + .then(this.repository.removeAuthorizationRequest(this.exchange)); |
| 269 | + |
| 270 | + StepVerifier.create(saveAndSaveAndRemove) |
| 271 | + .expectNext(this.authorizationRequest) |
| 272 | + .verifyComplete(); |
| 273 | + |
| 274 | + StepVerifier.create(this.repository.loadAuthorizationRequest(this.exchange)) |
| 275 | + .verifyComplete(); |
| 276 | + |
| 277 | + verify(sessionAttrs, times(3)).put(any(), any()); |
| 278 | + } |
| 279 | + |
272 | 280 | private void assertSessionStartedIs(boolean expected) {
|
273 | 281 | Mono<Boolean> isStarted = this.exchange.getSession().map(WebSession::isStarted);
|
274 | 282 | StepVerifier.create(isStarted)
|
|
0 commit comments