|
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