Skip to content

Commit f527d3a

Browse files
authored
Merge pull request #139 from companieshouse/feature/gci-2310_change_get_item_authorisation
GCI-2310 Change authenticaton/authorisaton for get order item
2 parents daa9b67 + 11637bb commit f527d3a

File tree

4 files changed

+48
-19
lines changed

4 files changed

+48
-19
lines changed

src/main/java/uk/gov/companieshouse/orders/api/interceptor/UserAuthenticationInterceptor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,9 @@ private boolean checkAuthenticated(HttpServletRequest request, HttpServletRespon
5656
return hasSignedInUser(request, response);
5757
case GET_PAYMENT_DETAILS:
5858
case GET_ORDER:
59-
case GET_ORDER_ITEM:
6059
return hasAuthenticatedClient(request, response);
60+
case GET_ORDER_ITEM:
61+
return securityManager.checkIdentity() || hasAuthenticatedClient(request, response);
6162
case GET_CHECKOUT:
6263
case SEARCH:
6364
return securityManager.checkIdentity();

src/main/java/uk/gov/companieshouse/orders/api/interceptor/UserAuthorisationInterceptor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,9 @@ private boolean checkAuthorised(HttpServletRequest request, HttpServletResponse
8787
case GET_CHECKOUT:
8888
return securityManager.checkPermission() || getRequestClientIsAuthorised(request, response, this::getCheckoutUserIsResourceOwner);
8989
case GET_ORDER:
90-
case GET_ORDER_ITEM:
9190
return getRequestClientIsAuthorised(request, response, this::getOrderUserIsResourceOwner);
91+
case GET_ORDER_ITEM:
92+
return securityManager.checkPermission() || getRequestClientIsAuthorised(request, response, this::getOrderUserIsResourceOwner);
9293
case SEARCH:
9394
return securityManager.checkPermission();
9495
case PATCH_PAYMENT_DETAILS:

src/test/java/uk/gov/companieshouse/orders/api/interceptor/UserAuthenticationInterceptorTests.java

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -258,26 +258,15 @@ void preHandleRejectsBlankIdentityValue() {
258258
thenRequestIsRejected();
259259
}
260260

261-
@DisplayName("Authentication for orders/search endpoint succeeds if caller identity is valid")
262-
@Test
263-
void ordersSearchValidIdentity() {
264-
when(securityManager.checkIdentity()).thenReturn(true);
265-
givenRequest(GET, "/checkouts/search");
266-
267-
boolean actual = interceptorUnderTest.preHandle(request, response, handler);
268-
269-
assertThat(actual, is(true));
270-
}
271-
272-
@DisplayName("Authentication for orders/search endpoint false if caller identity is invalid")
273-
@Test
274-
void ordersSearchInvalidIdentity() {
275-
when(securityManager.checkIdentity()).thenReturn(false);
276-
givenRequest(GET, "/checkouts/search");
261+
@ParameterizedTest(name = "{index}: {0}")
262+
@MethodSource("hasAdminAuthenticationFixtures")
263+
void ordersSearchValidIdentity(String displayName, String endpoint, boolean isValid) {
264+
when(securityManager.checkIdentity()).thenReturn(isValid);
265+
givenRequest(GET, endpoint);
277266

278267
boolean actual = interceptorUnderTest.preHandle(request, response, handler);
279268

280-
assertThat(actual, is(false));
269+
assertThat(actual, is(isValid));
281270
}
282271

283272
@Test
@@ -428,4 +417,11 @@ private static Stream<Arguments> signedInGetRequestFixtures() {
428417
arguments("preHandle accepts get order item request that has signed in user headers", "/orders/1234/items/5678"),
429418
arguments("preHandle accepts get basket links request from a user with OAuth2 authentication", "/basket/links"));
430419
}
420+
421+
private static Stream<Arguments> hasAdminAuthenticationFixtures() {
422+
return Stream.of(arguments("Authentication for orders/search endpoint succeeds if caller identity is valid", "/checkouts/search", true),
423+
arguments("Authentication for orders/search endpoint fails if caller identity is invalid", "/checkouts/search", false),
424+
arguments("Authentication for get order item endpoint succeeds if caller identity is valid", "/orders/1234/items/5678", true),
425+
arguments("Authentication for get order item endpoint fails if caller identity is invalid", "/orders/1234/items/5678", false));
426+
}
431427
}

src/test/java/uk/gov/companieshouse/orders/api/interceptor/UserAuthorisationInterceptorTests.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,37 @@ void ordersSearchInvalidAuthorisation() {
245245
assertThat(actual, is(false));
246246
}
247247

248+
@Test
249+
@DisplayName("Authorisation for get order item endpoint succeeds if caller has admin permissions")
250+
void getOrderItemValidAuthorisation() {
251+
// given
252+
givenRequest(GET, "/orders/1234/items/5678");
253+
givenRequestHasSignedInUser(ERIC_IDENTITY_VALUE);
254+
givenPathVariable(ORDER_ID_PATH_VARIABLE, "1");
255+
when(orderRepository.findById("1")).thenReturn(Optional.of(order));
256+
when(securityManager.checkPermission()).thenReturn(true);
257+
258+
// when
259+
boolean actual = interceptorUnderTest.preHandle(request, response, handler);
260+
261+
// then
262+
assertThat(actual, is(true));
263+
}
264+
265+
@DisplayName("Authorisation for get order item endpoint false if caller has admin permissions")
266+
@Test
267+
void getOrderItemSearchInvalidAuthorisation() {
268+
givenRequest(GET, "/orders/1234/items/5678");
269+
givenRequestHasSignedInUser(ERIC_IDENTITY_VALUE);
270+
givenPathVariable(ORDER_ID_PATH_VARIABLE, "1");
271+
when(orderRepository.findById("1")).thenReturn(Optional.of(order));
272+
when(securityManager.checkPermission()).thenReturn(false);
273+
274+
boolean actual = interceptorUnderTest.preHandle(request, response, handler);
275+
276+
assertThat(actual, is(false));
277+
}
278+
248279
@ParameterizedTest(name = "{index}: {0}")
249280
@MethodSource("apiGetRequestFixtures")
250281
void preHandleAcceptsAuthorisedInternalApiGetRequest(final String displayName, final String uri) {

0 commit comments

Comments
 (0)