AppRoleService { public ResponseEntity<String> readAppRoleRoleId(String token, String rolename){ if (rolename.equals(TVaultConstants.SELF_SERVICE_APPROLE_NAME)) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("{\"errors\":[\"Access denied: no permission to read roleID of this AppRole\"]}"); } log.debug(JSONUtil.getJSON(ImmutableMap.<String, String>builder(). put(LogMessage.USER, ThreadLocalContext.getCurrentMap().get(LogMessage.USER).toString()). put(LogMessage.ACTION, "Read AppRoleId"). put(LogMessage.MESSAGE, String.format("Trying to read AppRoleId [%s]", rolename)). put(LogMessage.APIURL, ThreadLocalContext.getCurrentMap().get(LogMessage.APIURL).toString()). build())); Response response = reqProcessor.process("/auth/approle/role/readRoleID","{\"role_name\":\""+rolename+"\"}",token); log.debug(JSONUtil.getJSON(ImmutableMap.<String, String>builder(). put(LogMessage.USER, ThreadLocalContext.getCurrentMap().get(LogMessage.USER).toString()). put(LogMessage.ACTION, "Read AppRoleId"). put(LogMessage.MESSAGE, "Reading AppRoleId completed"). put(LogMessage.STATUS, response.getHttpstatus().toString()). put(LogMessage.APIURL, ThreadLocalContext.getCurrentMap().get(LogMessage.APIURL).toString()). build())); return ResponseEntity.status(response.getHttpstatus()).body(response.getResponse()); }  ResponseEntity<String> createAppRole(String token, AppRole appRole, UserDetails userDetails); ResponseEntity<String> readAppRole(String token, String rolename); ResponseEntity<String> readAppRoles(String token); ResponseEntity<String> listAppRoles(String token,  UserDetails userDetails); ResponseEntity<String> readAppRoleRoleId(String token, String rolename); String readRoleId(String token, String rolename); List<String> readAccessorIds(String token, String rolename); AppRoleMetadata readAppRoleMetadata(String token, String rolename); AppRole readAppRoleBasicDetails(String token, String rolename); ResponseEntity<String> readAppRoleRoleId(String token, String rolename, UserDetails userDetails); ResponseEntity<String> readAppRoleSecretId(String token, String rolename, UserDetails userDetails); ResponseEntity<String> readSecretIdAccessors(String token, String rolename, UserDetails userDetails); ResponseEntity<String> readAppRoleDetails(String token, String rolename, UserDetails userDetails); ResponseEntity<String> createsecretId(String token, AppRoleSecretData appRoleSecretData); ResponseEntity<String> readAppRoleSecretId(String token, String rolename); ResponseEntity<String> deleteSecretId(String token, AppRoleNameSecretId appRoleNameSecretId); ResponseEntity<String> deleteAppRole(String token, AppRole appRole, UserDetails userDetails); ResponseEntity<String> deleteSecretIds(String token, AppRoleAccessorIds appRoleAccessorIds, UserDetails userDetails); ResponseEntity<String> login(AppRoleIdSecretId appRoleIdSecretId); ResponseEntity<String> associateApprole(String token, SafeAppRoleAccess safeAppRoleAccess); ResponseEntity<String> updateAppRole(String token, AppRole appRole, UserDetails userDetails); Response configureApprole(String rolename,String policies,String token );  }
@Test public void test_readAppRoleId_successfully() { String token = "5PDrOhsy4ig8L3EpsJZSLAMg"; String responseJson = "{\"data\":{ \"role_id\": \"f1f72163-287e-b3a4-1fdc-fd21a35c7d57\"}}"; ResponseEntity<String> responseEntityExpected = ResponseEntity.status(HttpStatus.OK).body("{\"data\":{ \"role_id\": \"f1f72163-287e-b3a4-1fdc-fd21a35c7d57\"}}"); Response response =getMockResponse(HttpStatus.OK, true, responseJson); String appRoleName = "approle1"; when(reqProcessor.process("/auth/approle/role/readRoleID","{\"role_name\":\""+appRoleName+"\"}",token)).thenReturn(response); ResponseEntity<String> responseEntityActual = appRoleService.readAppRoleRoleId(token, appRoleName); assertEquals(HttpStatus.OK, responseEntityActual.getStatusCode()); assertEquals(responseEntityExpected, responseEntityActual); }
@Test public void test_readAppRoleRoleId_successfully() { String token = "5PDrOhsy4ig8L3EpsJZSLAMg"; String responseJson = "{\r\n" + " \"data\": {\r\n" + " \"role_id\": \"generated-role-id\"\r\n" + " }\r\n" + "}"; Response response =getMockResponse(HttpStatus.OK, true, responseJson); String appRoleName = "approle1"; ResponseEntity<String> responseEntityExpected = ResponseEntity.status(HttpStatus.OK).body(responseJson); when(reqProcessor.process("/auth/approle/role/readRoleID","{\"role_name\":\""+appRoleName+"\"}",token)).thenReturn(response); ResponseEntity<String> responseEntityActual = appRoleService.readAppRoleRoleId(token, appRoleName); assertEquals(HttpStatus.OK, responseEntityActual.getStatusCode()); assertEquals(responseEntityExpected, responseEntityActual); }
@Test public void test_readAppRoleRoleId_failure() { String token = "5PDrOhsy4ig8L3EpsJZSLAMg"; String responseJson = "{\"error\":[\"Internal Server Error\"]}"; Response response =getMockResponse(HttpStatus.INTERNAL_SERVER_ERROR, true, responseJson); String appRoleName = "approle1"; ResponseEntity<String> responseEntityExpected = ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(responseJson); when(reqProcessor.process("/auth/approle/role/readRoleID","{\"role_name\":\""+appRoleName+"\"}",token)).thenReturn(response); ResponseEntity<String> responseEntityActual = appRoleService.readAppRoleRoleId(token, appRoleName); assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, responseEntityActual.getStatusCode()); assertEquals(responseEntityExpected, responseEntityActual); }
@Test public void test_readAppRoleRoleId_WithUserDetails_successfully() throws Exception { String token = "5PDrOhsy4ig8L3EpsJZSLAMg"; UserDetails userDetails = getMockUser("testuser1", false); String role_name = "approle1"; String username = userDetails.getUsername(); String path = TVaultConstants.APPROLE_METADATA_MOUNT_PATH + "/" + role_name; ArrayList<String> policiesList = new ArrayList<String>(); policiesList.add("r_shared_safe01"); String[] policies = policiesList.toArray(new String[policiesList.size()]); AppRole appRole = new AppRole(role_name, policies, true, 0, 0, 0); String appRoleResponseJson = new ObjectMapper().writeValueAsString(appRole); Response appRoleResponse = getMockResponse(HttpStatus.OK, true, appRoleResponseJson); Map<String, Object> appRoleResponseMap = new HashMap<>(); Map<String, Object> dataMap = new HashMap<>(); appRoleResponseMap.put("data", dataMap); dataMap.put("policies",policiesList); dataMap.put("bind_secret_id",new Boolean(true)); dataMap.put("secret_id_num_uses", new Integer(0)); dataMap.put("secret_id_ttl", new Integer(0)); dataMap.put("token_num_uses", new Integer(0)); dataMap.put("token_ttl", new Integer(0)); dataMap.put("token_max_ttl", new Integer(0)); when(reqProcessor.process("/auth/approle/role/read", "{\"role_name\":\""+role_name+"\"}",userDetails.getSelfSupportToken())).thenReturn(appRoleResponse); when(ControllerUtil.parseJson(appRoleResponseJson)).thenReturn(appRoleResponseMap); String approleusername=username; Response approleMetadataResponse = getMockResponse(HttpStatus.OK, true, getAppRoleMetadataJSON(path, approleusername, role_name)); when(reqProcessor.process("/read","{\"path\":\""+path+"\"}",userDetails.getSelfSupportToken())).thenReturn(approleMetadataResponse); String responseJson = "{\r\n" + " \"data\": {\r\n" + " \"role_id\": \"generated-role-id\"\r\n" + " }\r\n" + "}"; Response response =getMockResponse(HttpStatus.OK, true, responseJson); when(reqProcessor.process("/auth/approle/role/readRoleID","{\"role_name\":\""+role_name+"\"}",userDetails.getSelfSupportToken())).thenReturn(response); ResponseEntity<String> responseEntityExpected = ResponseEntity.status(HttpStatus.OK).body(response.getResponse()); Map<String, Object> responseMap = new HashMap<>(); Map<String,Object> roleIdDataMap = new HashMap<>(); roleIdDataMap.put("role_id", "generated-id"); roleIdDataMap.put("createdBy", username); responseMap.put("data", roleIdDataMap); when(ControllerUtil.parseJson("{\"path\":\""+path+"\",\"data\":{\"name\":\""+role_name+"\",\"createdBy\":\""+username+"\"}}")).thenReturn(responseMap); ResponseEntity<String> responseEntityActual = appRoleService.readAppRoleRoleId(token, role_name, userDetails); assertEquals(HttpStatus.OK, responseEntityActual.getStatusCode()); assertEquals(responseEntityExpected, responseEntityActual); }
@Test public void test_readAppRoleRoleId_WithUserDetails_failure_BAD_REQUEST() throws Exception { String token = "5PDrOhsy4ig8L3EpsJZSLAMg"; UserDetails userDetails = getMockUser("testuser1", false); String role_name = "approle1"; String username = userDetails.getUsername(); String path = TVaultConstants.APPROLE_METADATA_MOUNT_PATH + "/" + role_name; ArrayList<String> policiesList = new ArrayList<String>(); policiesList.add("r_shared_safe01"); String[] policies = policiesList.toArray(new String[policiesList.size()]); AppRole appRole = new AppRole(role_name, policies, true, 0, 0, 0); String appRoleResponseJson = new ObjectMapper().writeValueAsString(appRole); Response appRoleResponse = getMockResponse(HttpStatus.OK, true, appRoleResponseJson); Map<String, Object> appRoleResponseMap = new HashMap<>(); Map<String, Object> dataMap = new HashMap<>(); appRoleResponseMap.put("data", dataMap); dataMap.put("policies",policiesList); dataMap.put("bind_secret_id",new Boolean(true)); dataMap.put("secret_id_num_uses", new Integer(0)); dataMap.put("secret_id_ttl", new Integer(0)); dataMap.put("token_num_uses", new Integer(0)); dataMap.put("token_ttl", new Integer(0)); dataMap.put("token_max_ttl", new Integer(0)); when(reqProcessor.process("/auth/approle/role/read", "{\"role_name\":\""+role_name+"\"}",userDetails.getSelfSupportToken())).thenReturn(appRoleResponse); when(ControllerUtil.parseJson(appRoleResponseJson)).thenReturn(appRoleResponseMap); String approleusername="nonexisting"; Response approleMetadataResponse = getMockResponse(HttpStatus.BAD_REQUEST, true, getAppRoleMetadataJSON(path, approleusername, role_name)); when(reqProcessor.process("/read","{\"path\":\""+path+"\"}",userDetails.getSelfSupportToken())).thenReturn(approleMetadataResponse); String responseJson = "{\"errors\":[\"Access denied: You don't have enough permission to read the role_id associated with the AppRole\"]}"; Response response =getMockResponse(HttpStatus.BAD_REQUEST, true, responseJson); when(reqProcessor.process("/auth/approle/role/readRoleID","{\"role_name\":\""+role_name+"\"}",userDetails.getSelfSupportToken())).thenReturn(response); ResponseEntity<String> responseEntityExpected = ResponseEntity.status(HttpStatus.BAD_REQUEST).body(response.getResponse()); Map<String, Object> responseMap = new HashMap<>(); Map<String,Object> roleIdDataMap = new HashMap<>(); roleIdDataMap.put("role_id", "generated-id"); roleIdDataMap.put("createdBy", username); responseMap.put("data", roleIdDataMap); when(ControllerUtil.parseJson("{\"path\":\""+path+"\",\"data\":{\"name\":\""+role_name+"\",\"createdBy\":\""+username+"\"}}")).thenReturn(responseMap); ResponseEntity<String> responseEntityActual = appRoleService.readAppRoleRoleId(token, role_name, userDetails); assertEquals(HttpStatus.BAD_REQUEST, responseEntityActual.getStatusCode()); assertEquals(responseEntityExpected, responseEntityActual); }
@Test public void test_readAppRoleRoleId_WithUserDetails_failure() throws Exception { String token = "5PDrOhsy4ig8L3EpsJZSLAMg"; UserDetails userDetails = getMockUser("testuser1", false); String role_name = "selfservicesupportrole"; String responseJson = "{\"errors\":[\"Access denied: You don't have enough permission to read the role_id associated with the AppRole\"]}"; Response response =getMockResponse(HttpStatus.BAD_REQUEST, true, responseJson); when(reqProcessor.process("/auth/approle/role/readRoleID","{\"role_name\":\""+role_name+"\"}",userDetails.getSelfSupportToken())).thenReturn(response); ResponseEntity<String> responseEntityExpected = ResponseEntity.status(HttpStatus.BAD_REQUEST).body(response.getResponse()); ResponseEntity<String> responseEntityActual = appRoleService.readAppRoleRoleId(token, role_name, userDetails); assertEquals(HttpStatus.BAD_REQUEST, responseEntityActual.getStatusCode()); assertEquals(responseEntityExpected, responseEntityActual); }
@Test public void test_readAppRoleRoleId_WithUserDetails_failure_NonExistingRole() throws Exception { String token = "5PDrOhsy4ig8L3EpsJZSLAMg"; UserDetails userDetails = getMockUser("testuser1", false); String role_name = "approle1x"; String username = userDetails.getUsername(); String path = TVaultConstants.APPROLE_METADATA_MOUNT_PATH + "/" + role_name; AppRole appRole = null; String appRoleResponseJson = new ObjectMapper().writeValueAsString(appRole); Response appRoleResponse = getMockResponse(HttpStatus.NOT_FOUND, true, appRoleResponseJson); Map<String, Object> appRoleResponseMap = new HashMap<>(); Map<String, Object> dataMap = new HashMap<>(); appRoleResponseMap.put("data", dataMap); dataMap.put("policies",null); dataMap.put("bind_secret_id",new Boolean(true)); dataMap.put("secret_id_num_uses", new Integer(0)); dataMap.put("secret_id_ttl", new Integer(0)); dataMap.put("token_num_uses", new Integer(0)); dataMap.put("token_ttl", new Integer(0)); dataMap.put("token_max_ttl", new Integer(0)); when(reqProcessor.process("/auth/approle/role/read", "{\"role_name\":\""+role_name+"\"}",userDetails.getSelfSupportToken())).thenReturn(appRoleResponse); when(ControllerUtil.parseJson(appRoleResponseJson)).thenReturn(appRoleResponseMap); String approleusername=username; Response approleMetadataResponse = getMockResponse(HttpStatus.BAD_REQUEST, true, getAppRoleMetadataJSON(path, approleusername, role_name)); when(reqProcessor.process("/read","{\"path\":\""+path+"\"}",userDetails.getSelfSupportToken())).thenReturn(approleMetadataResponse); String responseJson = "{\"errors\":[\"AppRole doesn't exist\"]}"; Response response =getMockResponse(HttpStatus.OK, true, responseJson); when(reqProcessor.process("/auth/approle/role/readRoleID","{\"role_name\":\""+role_name+"\"}",userDetails.getSelfSupportToken())).thenReturn(response); ResponseEntity<String> responseEntityExpected = ResponseEntity.status(HttpStatus.OK).body(response.getResponse()); Map<String, Object> responseMap = new HashMap<>(); Map<String,Object> roleIdDataMap = new HashMap<>(); roleIdDataMap.put("role_id", "generated-id"); roleIdDataMap.put("createdBy", username); responseMap.put("data", roleIdDataMap); when(ControllerUtil.parseJson("{\"path\":\""+path+"\",\"data\":{\"name\":\""+role_name+"\",\"createdBy\":\""+username+"\"}}")).thenReturn(responseMap); ResponseEntity<String> responseEntityActual = appRoleService.readAppRoleRoleId(token, role_name, userDetails); assertEquals(HttpStatus.OK, responseEntityActual.getStatusCode()); assertEquals(responseEntityExpected, responseEntityActual); }