def process(report: ReportWrapper) -> Optional[VulnTestInfo]: """ Process the given report into a VulnTestInfo named tuple """ # If the user has not yet been prompted for automatic triaging if not report.botHasCommented(): token = AutoTriageUtils.generateToken() return VulnTestInfo(reproduced=False, message=constants.initialMessage(token, 'redirect to a domain', 'Open Redirect'), type='Open Redirect', info={}) elif report.shouldBackoff(): if not report.hasPostedBackoffComment(): addFailureToDB(report.getReporterUsername(), report.getReportID()) return VulnTestInfo(reproduced=False, message=('Automatic verification of vulnerability has failed, Backing off! Falling ' 'back to human verification. '), type='Open Redirect', info={}) else: return None elif report.isVerified(): return None try: if isStructured(report.getLatestActivity()): return processStructured(report, token=report.getToken()) else: return processUnstructured(report, token=report.getToken()) except Exception as e: print("Caught exception: %s" % str(e)) traceback.print_exc() print("+" * 80) return VulnTestInfo(reproduced=False, message=('Internal error detected! Backing off...'), type='Open Redirect', info={})
def shouldProcessReport(report: ReportWrapper) -> bool: """ Whether the bot should process the given ReportWrapper """ username = report.getReporterUsername() return (shouldProcess_blacklist(username) and shouldProcess_whitelist(username) and shouldProcess_failures(username) and shouldProcess_match(report))