github.com/devseccon/trivy@v0.47.1-0.20231123133102-bd902a0bd996/pkg/flag/license_flags.go (about) 1 package flag 2 3 import ( 4 "github.com/devseccon/trivy/pkg/fanal/types" 5 "github.com/devseccon/trivy/pkg/licensing" 6 ) 7 8 var ( 9 LicenseFull = Flag{ 10 Name: "license-full", 11 ConfigName: "license.full", 12 Default: false, 13 Usage: "eagerly look for licenses in source code headers and license files", 14 } 15 IgnoredLicenses = Flag{ 16 Name: "ignored-licenses", 17 ConfigName: "license.ignored", 18 Default: []string{}, 19 Usage: "specify a list of license to ignore", 20 } 21 LicenseConfidenceLevel = Flag{ 22 Name: "license-confidence-level", 23 ConfigName: "license.confidenceLevel", 24 Default: 0.9, 25 Usage: "specify license classifier's confidence level", 26 } 27 28 // LicenseForbidden is an option only in a config file 29 LicenseForbidden = Flag{ 30 ConfigName: "license.forbidden", 31 Default: licensing.ForbiddenLicenses, 32 Usage: "forbidden licenses", 33 } 34 // LicenseRestricted is an option only in a config file 35 LicenseRestricted = Flag{ 36 ConfigName: "license.restricted", 37 Default: licensing.RestrictedLicenses, 38 Usage: "restricted licenses", 39 } 40 // LicenseReciprocal is an option only in a config file 41 LicenseReciprocal = Flag{ 42 ConfigName: "license.reciprocal", 43 Default: licensing.ReciprocalLicenses, 44 Usage: "reciprocal licenses", 45 } 46 // LicenseNotice is an option only in a config file 47 LicenseNotice = Flag{ 48 ConfigName: "license.notice", 49 Default: licensing.NoticeLicenses, 50 Usage: "notice licenses", 51 } 52 // LicensePermissive is an option only in a config file 53 LicensePermissive = Flag{ 54 ConfigName: "license.permissive", 55 Default: licensing.PermissiveLicenses, 56 Usage: "permissive licenses", 57 } 58 // LicenseUnencumbered is an option only in a config file 59 LicenseUnencumbered = Flag{ 60 ConfigName: "license.unencumbered", 61 Default: licensing.UnencumberedLicenses, 62 Usage: "unencumbered licenses", 63 } 64 ) 65 66 type LicenseFlagGroup struct { 67 LicenseFull *Flag 68 IgnoredLicenses *Flag 69 LicenseConfidenceLevel *Flag 70 71 // License Categories 72 LicenseForbidden *Flag // mapped to CRITICAL 73 LicenseRestricted *Flag // mapped to HIGH 74 LicenseReciprocal *Flag // mapped to MEDIUM 75 LicenseNotice *Flag // mapped to LOW 76 LicensePermissive *Flag // mapped to LOW 77 LicenseUnencumbered *Flag // mapped to LOW 78 } 79 80 type LicenseOptions struct { 81 LicenseFull bool 82 IgnoredLicenses []string 83 LicenseConfidenceLevel float64 84 LicenseRiskThreshold int 85 LicenseCategories map[types.LicenseCategory][]string 86 } 87 88 func NewLicenseFlagGroup() *LicenseFlagGroup { 89 return &LicenseFlagGroup{ 90 LicenseFull: &LicenseFull, 91 IgnoredLicenses: &IgnoredLicenses, 92 LicenseConfidenceLevel: &LicenseConfidenceLevel, 93 LicenseForbidden: &LicenseForbidden, 94 LicenseRestricted: &LicenseRestricted, 95 LicenseReciprocal: &LicenseReciprocal, 96 LicenseNotice: &LicenseNotice, 97 LicensePermissive: &LicensePermissive, 98 LicenseUnencumbered: &LicenseUnencumbered, 99 } 100 } 101 102 func (f *LicenseFlagGroup) Name() string { 103 return "License" 104 } 105 106 func (f *LicenseFlagGroup) Flags() []*Flag { 107 return []*Flag{f.LicenseFull, f.IgnoredLicenses, f.LicenseForbidden, f.LicenseRestricted, f.LicenseReciprocal, 108 f.LicenseNotice, f.LicensePermissive, f.LicenseUnencumbered, f.LicenseConfidenceLevel} 109 } 110 111 func (f *LicenseFlagGroup) ToOptions() LicenseOptions { 112 licenseCategories := make(map[types.LicenseCategory][]string) 113 licenseCategories[types.CategoryForbidden] = getStringSlice(f.LicenseForbidden) 114 licenseCategories[types.CategoryRestricted] = getStringSlice(f.LicenseRestricted) 115 licenseCategories[types.CategoryReciprocal] = getStringSlice(f.LicenseReciprocal) 116 licenseCategories[types.CategoryNotice] = getStringSlice(f.LicenseNotice) 117 licenseCategories[types.CategoryPermissive] = getStringSlice(f.LicensePermissive) 118 licenseCategories[types.CategoryUnencumbered] = getStringSlice(f.LicenseUnencumbered) 119 120 return LicenseOptions{ 121 LicenseFull: getBool(f.LicenseFull), 122 IgnoredLicenses: getStringSlice(f.IgnoredLicenses), 123 LicenseConfidenceLevel: getFloat(f.LicenseConfidenceLevel), 124 LicenseCategories: licenseCategories, 125 } 126 }