fosslight / fosslight_dependency_scanner

FOSSLight Dependency Scanner
https://fosslight.org
Apache License 2.0
32 stars 20 forks source link

Get license name from Maven homepage #222

Open YongGoose opened 2 months ago

YongGoose commented 2 months ago

Description

AS-IS

image

TO-BE

image

Type of change

YongGoose commented 2 months ago

@soimkim 하기와 같이 상위 링크에서도 license 정보를 찾을 수 없는 경우에는 No license found 라는 문구가 출력되도록 구현했습니다.


그 외 한 가지 상의를 해야 할 점이 있어 코멘트를 작성하게 됐습니다.

예를 들어 Redis 7.2 버전에서 라이센스 정보가 명시 되지 않았다고 가정했을 때, 상위 링크를 통해 찾는 방식으로 라이센스를 출력한다면 RSALv2 + SSPLv1으로 출력이 됩니다. (Redis는 7.4 버전 이후로 BSD-3에서 RSALv2 SSPLv1으로 라이센스가 변경 되었습니다)

하지만, 사용자가 사용하는 버전인 Redis 7.2에서는 라이센스가 변경이 되지 않은 상태인데 현재 PR에 있는 코드에서는 변경이 된 이후의 라이센스로 출력이 됩니다. (RSALv2 + SSPLv1으로 출력이 됩니다)

BSD-3 라이센스에서는 소스 코드 공개에 강제성이 없는 것에 비해 SSPLv1 라이센스에는 강제성이 있어 사용자가 잘못된 라이센스 정보를 확인해 피해를 입는 경우가 혹여나 발생할까 말씀 드립니다..!

soimkim commented 2 months ago

@YongGoose , No license found대신 NO_LICENSE_DETECTED를 출력 부탁드립니다.

soimkim commented 2 months ago

@YongGoose 님, 본 기능이 들어감으로써 버전에 license 가 명시 안 된 경우는 대표 license를 표기하기 때문에 version diff 임에도 다른 license가 표시될 수 있습니다. 그러나 version diff인 경우는 버전에 license가 명시되어 있을 것이기 때문에 이 경우, 상위 repository에 표시된 license를 읽지 않아 Risk가 낮은 것으로 판단합니다.

YongGoose commented 2 months ago

@YongGoose 님, 본 기능이 들어감으로써 버전에 license 가 명시 안 된 경우는 대표 license를 표기하기 때문에 version diff 임에도 다른 license가 표시될 수 있습니다. 그러나 version diff인 경우는 버전에 license가 명시되어 있을 것이기 때문에 이 경우, 상위 repository에 표시된 license를 읽지 않아 Risk가 낮은 것으로 판단합니다.

@soimkim 확인했습니다! 자세한 설명 감사합니다 😊

YongGoose commented 2 months ago

@YongGoose , No license found대신 NO_LICENSE_DETECTED를 출력 부탁드립니다.

넵! 수정하도록 하겠습니다.

soimkim commented 2 months ago

@YongGoose , 제가 gradle project에 https://mvnrepository.com/artifact/com.carrotsearch.randomizedtesting/randomizedtesting-runner/0.0.1를 추가 후 테스트 결과 하기와 같이 NO_LICENSE_DETECTED가 추출됩니다. image

테스트 방법 :

  1. https://github.com/t2y/gradle-multi-project-sample의 build.gradle에 implementation 'com.carrotsearch.randomizedtesting:randomizedtesting-runner:0.0.1'를 추가
  2. build.gradle에서 하기와 같이 추가 수정
    plugins {
    id 'com.github.sherter.google-java-format' version '0.9' apply false
    id 'com.github.hierynomus.license' version '0.15.0'
    }
    downloadLicenses {
    includeProjectDependencies = true
    dependencyConfiguration = 'runtimeClasspath' // If the gradle version is 4.6 or lower, then add the 'runtime' instead of 'runtimeClasspath'.
    }
  3. ./gradlew downloadLicenses
  4. fosslight_dependency 실행

에러 로그

[   INFO] [FOSSLIGHT_DEPENDENCY] Tool Info : fosslight_dependency v3.15.5
[   INFO] [FOSSLIGHT_DEPENDENCY] Found the manifest file(/home/soim/temp/test/gradle-multi-project-sample/build.gradle) automatically.
[WARNING] [FOSSLIGHT_DEPENDENCY] ### Set Package Manager = gradle, android
[   INFO] Parse oss information with file: build/reports/license/dependency-license.json
[  DEBUG] HTTP error occurred: 403 Client Error: Forbidden for url: https://mvnrepository.com/artifact/com.carrotsearch.randomizedtesting/randomizedtesting-runner
[WARNING] ### Complete to analyze: gradle
[   INFO] [FOSSLIGHT_DEPENDENCY] Output file: /home/soim/temp/test/gradle-multi-project-sample/fosslight_report_dep_240828_1009.xlsx
[   INFO] [FOSSLIGHT_DEPENDENCY] Analyzed Package manager: gradle (build.gradle)
[WARNING] [FOSSLIGHT_DEPENDENCY] ### FINISH ###

추가로 maven project에도 본 기능이 동일하게 적용 필요합니다.

soimkim commented 1 month ago

본 기능이 해결되면 License를 읽을 수 있는 package 예시