diff --git a/src/resqui/plugins/openssfscorecard.py b/src/resqui/plugins/openssfscorecard.py index 01f33c5..62e0b88 100644 --- a/src/resqui/plugins/openssfscorecard.py +++ b/src/resqui/plugins/openssfscorecard.py @@ -8,7 +8,7 @@ class OpenSSFScorecard(IndicatorPlugin): name = "OpenSSF Scorecard" id = "https://github.com/ossf/scorecard" - version = "v5.1.1" + version = "v5.4.0" indicators = [ "has_ci_tests", "human_code_review_requirement", @@ -144,3 +144,103 @@ def has_published_package(self, url, branch_hash_or_tag): evidence=evidence, success=success, ) + + def project_is_active(self, url, branch_hash_or_tag): + results = self.execute(url, branch_hash_or_tag) + score = self.get_score(results, "Maintained") + if score >= 5: + output = "true" + evidence = f"Maintained score is 5 or higher ({score})." + success = True + else: + output = "false" + evidence = f"Maintained score is less than 5 ({score})." + success = False + + return CheckResult( + process="Calculates the Maintained score.", + status_id="schema:CompletedActionStatus", + output=output, + evidence=evidence, + success=success, + ) + + def static_analysis_common_vulnerabilities(self, url, branch_hash_or_tag): + results = self.execute(url, branch_hash_or_tag) + score = self.get_score(results, "SAST") + if score >= 5: + output = "true" + evidence = f"SAST score is 5 or higher ({score})." + success = True + else: + output = "false" + evidence = f"SAST score is less than 5 ({score})." + success = False + + return CheckResult( + process="Calculates the SAST score.", + status_id="schema:CompletedActionStatus", + output=output, + evidence=evidence, + success=success, + ) + + def dependency_management(self, url, branch_hash_or_tag): + results = self.execute(url, branch_hash_or_tag) + score = self.get_score(results, "Dependency-Update-Tool") + if score >= 5: + output = "true" + evidence = f"Dependency-Update-Tool score is 5 or higher ({score})." + success = True + else: + output = "false" + evidence = f"Dependency-Update-Tool score is less than 5 ({score})." + success = False + + return CheckResult( + process="Calculates the Dependency-Update-Tool score.", + status_id="schema:CompletedActionStatus", + output=output, + evidence=evidence, + success=success, + ) + + def no_critical_vulnerability(self, url, branch_hash_or_tag): + results = self.execute(url, branch_hash_or_tag) + score = self.get_score(results, "Vulnerabilities") + if score >= 5: + output = "true" + evidence = f"Vulnerabilities score is 5 or higher ({score})." + success = True + else: + output = "false" + evidence = f"Vulnerabilities score is less than 5 ({score})." + success = False + + return CheckResult( + process="Calculates the Vulnerabilities score.", + status_id="schema:CompletedActionStatus", + output=output, + evidence=evidence, + success=success, + ) + + def uses_fuzzing(self, url, branch_hash_or_tag): + results = self.execute(url, branch_hash_or_tag) + score = self.get_score(results, "Fuzzing") + if score >= 5: + output = "true" + evidence = f"Fuzzing score is 5 or higher ({score})." + success = True + else: + output = "false" + evidence = f"Fuzzing score is less than 5 ({score})." + success = False + + return CheckResult( + process="Calculates the Fuzzing score.", + status_id="schema:CompletedActionStatus", + output=output, + evidence=evidence, + success=success, + ) \ No newline at end of file diff --git a/src/resqui/plugins/rsfc.py b/src/resqui/plugins/rsfc.py index 7b8a162..687a540 100644 --- a/src/resqui/plugins/rsfc.py +++ b/src/resqui/plugins/rsfc.py @@ -11,7 +11,7 @@ class RSFC(IndicatorPlugin): name = "RSFC" id = "https://w3id.org/everse/tools/rsfc" - version = "0.1.1" + version = "0.1.5" image_url = f"docker.io/amonterodx/rsfc:{version}" indicators = [ "persistent_and_unique_identifier", @@ -26,6 +26,7 @@ class RSFC(IndicatorPlugin): "software_has_tests", "repository_workflows", "archived_in_software_heritage", + "has_contribution_guidelines" ] def __init__(self, context): @@ -352,3 +353,27 @@ def archived_in_software_heritage(self, url, branch_hash_or_tag): check_list.append(check_res) return check_list + + def has_contribution_guidelines(self, url, branch_hash_or_tag): + report = self.execute(url, branch_hash_or_tag) + checks = report["checks"] + check_list = [] + + for check in checks: + if "has_contribution_guidelines" in check["assessesIndicator"]["@id"]: + if check["output"] == "true": + success = True + else: + success = False + + check_res = CheckResult( + process=check["process"], + status_id=check["status"]["@id"], + output=check["output"], + evidence=check["evidence"], + success=success, + ) + + check_list.append(check_res) + + return check_list