Skip to content

Commit 7d9b8a6

Browse files
committed
Change authenticaton/authorisaton for get order item
* Get order item endpoint should succeed if user has admin privileges
1 parent daa9b67 commit 7d9b8a6

File tree

4 files changed

+57
-2
lines changed

4 files changed

+57
-2
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: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,28 @@ void ordersSearchInvalidIdentity() {
280280
assertThat(actual, is(false));
281281
}
282282

283+
@DisplayName("Authentication for get order item endpoint succeeds if caller identity is valid")
284+
@Test
285+
void getOrderItemValidIdentity() {
286+
when(securityManager.checkIdentity()).thenReturn(true);
287+
givenRequest(GET, "/orders/1234/items/5678");
288+
289+
boolean actual = interceptorUnderTest.preHandle(request, response, handler);
290+
291+
assertThat(actual, is(true));
292+
}
293+
294+
@DisplayName("Authentication for orders/search endpoint false if caller identity is invalid")
295+
@Test
296+
void getOrderItemInvalidIdentity() {
297+
when(securityManager.checkIdentity()).thenReturn(false);
298+
givenRequest(GET, "/orders/1234/items/5678");
299+
300+
boolean actual = interceptorUnderTest.preHandle(request, response, handler);
301+
302+
assertThat(actual, is(false));
303+
}
304+
283305
@Test
284306
@DisplayName("preHandle rejects post reprocess order request that is unauthenticated")
285307
void preHandleRejectsUnauthenticatedPostReprocessOrderRequest() {

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)