feat: 将依赖检测添加到模组

This commit is contained in:
dqy
2024-06-05 15:56:06 +08:00
parent c811e434c6
commit 373defc5bb
2 changed files with 48 additions and 39 deletions

View File

@@ -9,6 +9,7 @@ from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer
from colorama import Fore, Style, init
from tqdm import tqdm
import html
import os
init(autoreset=True) # 初始化colorama并在每次打印后自动重置颜色
@@ -94,7 +95,7 @@ def check_vulnerabilities(requirements: list, base_url: str) -> str:
else:
package_name, version = req, None
url = f"{base_url}{package_name}"
# print(f"Fetching data for {package_name} from {url}")
# print(f"\nFetching data for {package_name} from {url}")
html_content = fetch_html(url)
if html_content:
extracted_data = parse_html(html_content)
@@ -236,34 +237,32 @@ def print_separator(title, char="-", length=50, padding=2):
print(char * (length + 2 * padding)) # 打印分割线两侧各有padding个字符的空格
def main():
parser = argparse.ArgumentParser(
description="Check project dependencies for vulnerabilities."
)
parser.add_argument(
"-r",
"--requirement",
help="Path to the requirements file of the project",
required=True,
)
parser.add_argument(
"-o",
"--output",
help="Output file path with extension, e.g., './output/report.txt'",
)
args = parser.parse_args()
def modify_file_name(file_path: str) -> str:
"""
Modify the file name by adding '-re' before the file extension.
Args:
file_path (str): The original file path.
Returns:
str: The modified file path.
"""
directory, file_name = os.path.split(file_path)
name, ext = os.path.splitext(file_name)
new_file_name = f"{name}-re{ext}"
new_file_path = os.path.join(directory, new_file_name)
return new_file_path
def requirement_detection(requirement_path, output_path=None):
base_url = "https://security.snyk.io/package/pip/"
requirements = load_requirements(args.requirement)
requirements = load_requirements(requirement_path)
results = check_vulnerabilities(requirements, base_url)
if args.output:
save_to_file(args.output, results)
print(f"Vulnerability scan complete. Results saved to {args.output}")
if output_path is not None:
new_path = modify_file_name(output_path)
save_to_file(new_path, results)
print(f"Vulnerability scan complete. Results saved to {output_path}")
print(f"Requirements scan complete. Results saved to {new_path}")
else:
print_separator("\n\nVulnerability Report", "=", 40, 5)
print_separator("\nVulnerability Report", "=", 40, 5)
print(results)
if __name__ == "__main__":
main()