From ba13e4ee6c27758348d6f3a70aa2af527778a4df Mon Sep 17 00:00:00 2001 From: atandrewlee Date: Tue, 3 Jun 2025 14:24:27 -0400 Subject: [PATCH] added ability to find license --- .../go_dependency_tree_generator.rs | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/dependency-analysis/src/dependency_tree_generators/go_dependency_tree_generator.rs b/dependency-analysis/src/dependency_tree_generators/go_dependency_tree_generator.rs index b5aa0e4..0f0be8e 100644 --- a/dependency-analysis/src/dependency_tree_generators/go_dependency_tree_generator.rs +++ b/dependency-analysis/src/dependency_tree_generators/go_dependency_tree_generator.rs @@ -45,12 +45,16 @@ pub fn generate_go_dependency_tree( for module in &all_modules { let (name, version) = parse_module(module); let repository_url: String = extract_repository_url(&name, &mut repository_cache); + let license: String = match find_license(&name) { + Some(license) => license, + None => format!("Proprietary"), + }; project_cache.insert( module.clone(), Project::new( name, version, - "".to_string(), + license, repository_url ), ); @@ -137,3 +141,39 @@ fn resolve_vanity_import(module_path: &str) -> Option { None } + +fn find_license(module_path: &str) -> Option { + let url: String = format!("https://pkg.go.dev/{}?go-get=1", module_path); + + let response = match get(&url) { + Ok (resp) => resp, + Err(e) => { + eprintln!("Failed to fetch URL {}: {}", url, e); + return None; + } + }; + let html_text = match response.text() { + Ok(text) => text, + Err(e) => { + eprintln!("Failed to get HTML text: {}", e); + return None; + } + }; + + let document = Html::parse_document(&html_text); + // Create a selector for the span containing the license + let selector = Selector::parse("span").expect("Failed to parse selector"); + + // Find the license + for element in document.select(&selector) { + let text = element.text().collect::>().join(""); + if text.contains("License:") { + // Extract the license part after "License: " + let license = text.replace("License: ", "").trim().to_string(); + return Some(license); + } + } + + // Return None if no license is found + None +}