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  }