1515package checks
1616
1717import (
18- "fmt"
19- "regexp"
20- "strings"
21-
2218 "github.com/ossf/scorecard/v4/checker"
23- "github.com/ossf/scorecard/v4/checks/fileparser"
19+ "github.com/ossf/scorecard/v4/checks/evaluation"
20+ "github.com/ossf/scorecard/v4/checks/raw"
21+ sce "github.com/ossf/scorecard/v4/errors"
2422)
2523
26- type check func (str string , extCheck []string ) bool
27-
28- type checks struct {
29- rstr string // regex string
30- f check
31- p []string
32- }
33-
3424// CheckLicense is the registered name for License.
3525const CheckLicense = "License"
3626
@@ -40,123 +30,24 @@ func init() {
4030 checker .FileBased ,
4131 checker .CommitBased ,
4232 }
43- if err := registerCheck (CheckLicense , LicenseCheck , supportedRequestTypes ); err != nil {
33+ if err := registerCheck (CheckLicense , License , supportedRequestTypes ); err != nil {
4434 // this should never happen
4535 panic (err )
4636 }
4737}
4838
49- const (
50- copying = "copy(ing|right)"
51- license = "(un)?licen[sc]e"
52- preferredExt = "*\\ .(md|markdown|html)$"
53- anyExt = ".[^./]"
54- ofl = "ofl"
55- patents = "patents"
56- )
57-
58- // Regex converted from
59- // https://github.com/licensee/licensee/blob/master/lib/licensee/project_files/license_file.rb
60- var (
61- extensions = []string {"xml" , "go" , "gemspec" }
62- regexChecks = []checks {
63- {rstr : copying , f : nil },
64- {rstr : license , f : nil },
65- {rstr : license + preferredExt , f : nil },
66- {rstr : copying + preferredExt , f : nil },
67- {rstr : copying + anyExt , f : nil },
68- {rstr : ofl , f : nil },
69- {rstr : ofl + preferredExt , f : nil },
70- {rstr : patents , f : nil },
71- {rstr : license , f : extensionMatch , p : []string {"spdx" , "header" }},
72- {rstr : license + "[-_][^.]*" , f : extensionMatch , p : extensions },
73- {rstr : copying + "[-_][^.]*" , f : extensionMatch , p : extensions },
74- {rstr : "\\ w+[-_]" + license + "[^.]*" , f : extensionMatch , p : extensions },
75- {rstr : "\\ w+[-_]" + copying + "[^.]*" , f : extensionMatch , p : extensions },
76- {rstr : ofl , f : extensionMatch , p : extensions },
77- }
78- )
79-
80- // ExtensionMatch to check for matching extension.
81- func extensionMatch (f string , exts []string ) bool {
82- s := strings .Split (f , "." )
83-
84- if len (s ) <= 1 {
85- return false
86- }
87-
88- fext := s [len (s )- 1 ]
89-
90- found := false
91- for _ , ext := range exts {
92- if ext == fext {
93- found = true
94- break
95- }
96- }
97-
98- return found
99- }
100-
101- // TestLicenseCheck used for testing purposes.
102- func testLicenseCheck (name string ) bool {
103- return checkLicense (name )
104- }
105-
106- // LicenseCheck runs LicenseCheck check.
107- func LicenseCheck (c * checker.CheckRequest ) checker.CheckResult {
108- var s string
109-
110- err := fileparser .OnAllFilesDo (c .RepoClient , isLicenseFile , & s )
39+ // License runs License check.
40+ func License (c * checker.CheckRequest ) checker.CheckResult {
41+ rawData , err := raw .License (c )
11142 if err != nil {
112- return checker .CreateRuntimeErrorResult (CheckLicense , err )
113- }
114- if s != "" {
115- c .Dlogger .Info (& checker.LogMessage {
116- Path : s ,
117- Type : checker .FileTypeSource ,
118- Offset : 1 ,
119- })
120- return checker .CreateMaxScoreResult (CheckLicense , "license file detected" )
43+ e := sce .WithMessage (sce .ErrScorecardInternal , err .Error ())
44+ return checker .CreateRuntimeErrorResult (CheckLicense , e )
12145 }
122- return checker .CreateMinScoreResult (CheckLicense , "license file not detected" )
123- }
12446
125- var isLicenseFile fileparser. DoWhileTrueOnFilename = func ( name string , args ... interface {}) ( bool , error ) {
126- if len ( args ) != 1 {
127- return false , fmt . Errorf ( "isLicenseFile requires exactly one argument: %w" , errInvalidArgLength )
47+ // Set the raw results.
48+ if c . RawResults != nil {
49+ c . RawResults . LicenseResults = rawData
12850 }
129- s , ok := args [0 ].(* string )
130- if ! ok {
131- return false , fmt .Errorf ("isLicenseFile requires argument of type: *string: %w" , errInvalidArgType )
132- }
133- if checkLicense (name ) {
134- if s != nil {
135- * s = name
136- }
137- return false , nil
138- }
139- return true , nil
140- }
141-
142- // CheckLicense to check whether the name parameter fulfill license file criteria.
143- func checkLicense (name string ) bool {
144- for _ , check := range regexChecks {
145- rg := regexp .MustCompile (check .rstr )
14651
147- nameLower := strings .ToLower (name )
148- t := rg .MatchString (nameLower )
149- if t {
150- extFound := true
151-
152- // check extension calling f function.
153- // f function will always be func extensionMatch(..)
154- if check .f != nil {
155- extFound = check .f (nameLower , check .p )
156- }
157-
158- return extFound
159- }
160- }
161- return false
52+ return evaluation .License (CheckLicense , c .Dlogger , & rawData )
16253}
0 commit comments