// This method returns all of the vulnerabilities and tab numbers public Object tableMap(int orgId, int appId, TableSortBean bean) throws IOException { if (appId != -1) { Application application = applicationService.loadApplication(appId); if (application == null || !application.isActive()) { log.warn(ResourceNotFoundException.getLogMessage("Application", appId)); throw new ResourceNotFoundException(); } // we update vulns and application information but not scan vulnerabilityFilterService.updateVulnerabilities(application); } if (orgId != -1) { Organization organization = organizationService.loadById(orgId); if (organization == null || !organization.isActive()) { log.warn(ResourceNotFoundException.getLogMessage("Team", orgId)); throw new ResourceNotFoundException(); } // we update vulns and team information but not scan vulnerabilityFilterService.updateVulnerabilities( organization, organization.getActiveAppIds()); } if (!PermissionUtils.isAuthorized(Permission.READ_ACCESS, orgId, appId)) { return RestResponse.failure("You are not authorized to view this information."); } return RestResponse.success("Bulk Operation successfully ended."); }
@JsonView(AllViews.UIVulnSearch.class) @RequestMapping(value = "/addBatchComment", method = RequestMethod.POST) public Object addBatchComment( @PathVariable("orgId") Integer orgId, @PathVariable("appId") Integer appId, @ModelAttribute VulnerabilityCollectionModel vulnerabilityCollectionModel, Model model) throws IOException { if (!PermissionUtils.isAuthorized(Permission.CAN_SUBMIT_COMMENTS, orgId, appId)) { return RestResponse.failure("You are not authorized to modify vulnerabilities."); } if (!checkCollectionModel(vulnerabilityCollectionModel, model)) { return RestResponse.failure("Couldn't complete bulk vulnerability operation."); } log.info( "About to add comment to " + vulnerabilityCollectionModel.getVulnerabilityIds().size() + " Vulnerabilities."); VulnerabilityComment vulnerabilityComment = null; for (int vulnerabilityId : vulnerabilityCollectionModel.getVulnerabilityIds()) { vulnerabilityComment = new VulnerabilityComment(); vulnerabilityComment.setComment(vulnerabilityCollectionModel.getComment()); vulnerabilityComment.setTags(vulnerabilityCollectionModel.getTags()); vulnerabilityCommentService.addCommentToVuln(vulnerabilityComment, vulnerabilityId); } return RestResponse.success(vulnerabilityComment); }
@JsonView(AllViews.UIVulnSearch.class) @RequestMapping(value = "/addBatchVulnTagging", method = RequestMethod.POST) public Object addBatchTagging( @PathVariable("orgId") Integer orgId, @PathVariable("appId") Integer appId, @ModelAttribute VulnerabilityCollectionModel vulnerabilityCollectionModel, Model model) throws IOException { if (!PermissionUtils.isAuthorized(Permission.CAN_MODIFY_VULNERABILITIES, orgId, appId)) { return RestResponse.failure("You are not authorized to modify vulnerabilities."); } if (!checkCollectionModel(vulnerabilityCollectionModel, model)) { return RestResponse.failure("Couldn't complete bulk vulnerability operation."); } log.info( "About to tag to " + vulnerabilityCollectionModel.getVulnerabilityIds().size() + " Vulnerabilities."); vulnerabilityService.batchTagging( vulnerabilityCollectionModel.getVulnerabilityIds(), vulnerabilityCollectionModel.getTags()); return RestResponse.success(vulnerabilityCollectionModel.getTags()); }
@JsonView(AllViews.TableRow.class) @RequestMapping(value = "/severity/change/{genericSeverityId}", method = RequestMethod.POST) public Object changeSeverity( @PathVariable("orgId") Integer orgId, @PathVariable("appId") Integer appId, @PathVariable("genericSeverityId") Integer severityId, @ModelAttribute VulnerabilityCollectionModel vulnerabilityCollectionModel, @ModelAttribute TableSortBean bean, Model model) throws IOException { if (!PermissionUtils.isAuthorized(Permission.CAN_MODIFY_VULNERABILITIES, orgId, appId)) { return RestResponse.failure("You are not authorized to modify vulnerabilities."); } if (!checkCollectionModel(vulnerabilityCollectionModel, model)) { return RestResponse.failure("Couldn't complete bulk vulnerability operation."); } GenericSeverity genericSeverity = genericSeverityService.loadById(severityId); if (genericSeverity == null) return RestResponse.failure("Invalid generic severity Id."); vulnerabilityService.changeSeverities( vulnerabilityCollectionModel.getVulnerabilityIds(), genericSeverity); return tableMap(orgId, appId, bean); }
@RequestMapping(value = "/{filterId}/deleteChannelFilter", method = RequestMethod.POST) @JsonView(AllViews.TableRow.class) public @ResponseBody RestResponse<String> submitDeleteChannelFilter(@PathVariable int filterId) { if (!EnterpriseTest.isEnterprise()) { String msg = "You do not have permission to delete channel vulnerability filter. You need to update to enterprise license."; log.warn(msg); return RestResponse.failure(msg); } return RestResponse.success(submitDeleteChannelFilterBackend(filterId)); }
@RequestMapping(value = "/getTopApps", method = RequestMethod.POST) public @ResponseBody RestResponse<Map<String, Object>> processTopApps( @ModelAttribute VulnerabilitySearchParameters reportParameters, HttpServletRequest request) throws IOException { log.info("Generating Top 20 Vulnerable applications report"); Map<String, Object> map = reportsService.generateMostAppsReport(reportParameters, request); return RestResponse.success(map); }
@RequestMapping(value = "/trendingScans", method = RequestMethod.POST) @JsonView(AllViews.RestViewScanStatistic.class) public @ResponseBody Object processTrendingScans( @ModelAttribute ReportParameters reportParameters, HttpServletRequest request) throws IOException { log.info("Generating trending scans report"); return RestResponse.success(reportsService.generateTrendingReport(reportParameters, request)); }
@RequestMapping(value = "/snapshot", method = RequestMethod.POST) @JsonView(AllViews.VulnSearchApplications.class) public @ResponseBody RestResponse<Map<String, Object>> processSnapShot( @ModelAttribute ReportParameters reportParameters, HttpServletRequest request) throws IOException { log.info("Generating snapshot report"); Map<String, Object> map = reportsService.generateSnapshotReport(reportParameters, request); map.put("tags", tagService.loadAllApplicationTags()); map.put("vulnTags", tagService.loadAllVulnTags()); return RestResponse.success(map); }
@RequestMapping(value = "/snapshot/scanComparison", method = RequestMethod.POST) public @ResponseBody Object getScanComparison( @ModelAttribute VulnerabilitySearchParameters reportParameters) throws IOException { long start = System.currentTimeMillis(); log.info("Generating Scan Comparison report"); Map<String, Object> result = vulnerabilitySearchService.generateScanComparisonReport(reportParameters); log.info("Scan Comparison report took " + (System.currentTimeMillis() - start) + " ms"); return RestResponse.success(result); }
@JsonView(AllViews.TableRow.class) @RequestMapping(value = "/table/close", method = RequestMethod.POST) public Object closeTableVulnList( @PathVariable("orgId") Integer orgId, @PathVariable("appId") Integer appId, @ModelAttribute VulnerabilityCollectionModel vulnerabilityCollectionModel, @ModelAttribute TableSortBean bean, Model model) throws IOException { if (!PermissionUtils.isAuthorized(Permission.CAN_MODIFY_VULNERABILITIES, orgId, appId)) { return RestResponse.failure("You are not authorized to modify vulnerabilities."); } if (!checkCollectionModel(vulnerabilityCollectionModel, model)) { return RestResponse.failure("Couldn't complete bulk vulnerability operation."); } vulnerabilityService.closeAll(vulnerabilityCollectionModel.getVulnerabilityIds()); return tableMap(orgId, appId, bean); }
@RequestMapping(value = "/newChannelFilter", method = RequestMethod.POST) @JsonView(AllViews.TableRow.class) public @ResponseBody RestResponse<ChannelVulnerabilityFilter> submitNewChannelFilter( ChannelVulnerabilityFilter channelVulnerabilityFilter, BindingResult bindingResult, SessionStatus status) { if (!EnterpriseTest.isEnterprise()) { String msg = "You do not have permission to add new channel vulnerability filter. You need to update to enterprise license."; log.warn(msg); return RestResponse.failure(msg); } return submitNewChannelFilterBackend(channelVulnerabilityFilter, bindingResult, status); }
@RequestMapping(value = "/snapshot/averageAge", method = RequestMethod.POST) public @ResponseBody RestResponse<Map<String, Object>> getPointInTimeAge( @ModelAttribute VulnerabilitySearchParameters reportParameters) throws IOException { long start = System.currentTimeMillis(); log.info("Generating Average Age in Point In Time report"); reportParameters.setShowHidden(false); reportParameters.setShowFalsePositive(false); reportParameters.setShowClosed(false); reportParameters.setShowOpen(true); Map<String, Object> map = vulnerabilitySearchService.generatePointInTimeAgeReport(reportParameters); log.info( "Get Average Age in Point In Time took " + (System.currentTimeMillis() - start) + " ms"); return RestResponse.success(map); }
@RequestMapping(value = "/snapshot/progressByType", method = RequestMethod.POST) public @ResponseBody Object getProgressByType( @ModelAttribute VulnerabilitySearchParameters reportParameters) throws IOException { long start = System.currentTimeMillis(); log.info("Generating Vulnerability Progress By Type report"); reportParameters.setShowHidden(false); reportParameters.setShowFalsePositive(false); reportParameters.setShowClosed(true); reportParameters.setShowOpen(true); List<Object> map = vulnerabilitySearchService.generateProgressByTypeReport(reportParameters); log.info( "Vulnerability Progress By Type report took " + (System.currentTimeMillis() - start) + " ms"); return RestResponse.success(map); }