| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| package checklicenses |
| |
| import ( |
| "encoding/json" |
| "errors" |
| "os" |
| "strings" |
| ) |
| |
| type CustomProjectLicense struct { |
| ProjectRoot string |
| LicenseLocation string |
| } |
| |
| // Config values are populated from the the json file at the default or user-specified path |
| type Config struct { |
| FilesRegex []string `json:"filesRegex,omitempty"` |
| SkipDirs []string `json:"skipDirs"` |
| SkipFiles []string `json:"skipFiles"` |
| ProhibitedLicenseTypes []string `json:"prohibitedLicenseTypes"` |
| TextExtensionList []string `json:"textExtensionList"` |
| StrictTextExtensionList []string `json:"strictTextExtensionList"` |
| ExitOnProhibitedLicenseTypes bool `json:"exitOnProhibitedLicenseTypes"` |
| ExitOnUnlicensedFiles bool `json:"exitOnUnlicensedFiles"` |
| StrictAnalysis bool `json:"strictAnalysis"` |
| OutputLicenseFile bool `json:"outputLicenseFile"` |
| MaxReadSize int `json:"maxReadSize"` |
| SeparatorWidth int `json:"separatorWidth"` |
| OutputFilePrefix string `json:"outputFilePrefix"` |
| OutputFileExtension string `json:"outputFileExtension"` |
| OutputTreeStateFilename string `json:"outputTreeStateFilename"` |
| Product string `json:"product"` |
| SingleLicenseFiles []string `json:"singleLicenseFiles"` |
| StopLicensePropagation []string `json:"stopLicensePropagation"` |
| LicensePatternDir string `json:"licensePatternDir"` |
| CustomProjectLicenses []CustomProjectLicense `json:"customProjectLicenses"` |
| FlutterLicenses []string `json:"flutterLicenses"` |
| NoticeTxtFiles []string `json:"noticeTxtFiles"` |
| BaseDir string `json:"baseDir"` |
| Target string `json:"target"` |
| LogLevel string `json:"logLevel"` |
| } |
| |
| // Init populates Config object with values found in the json config file. |
| // |
| // Both SkipFiles and SingleLicenseFiles are lowered. |
| func NewConfig(path string) (*Config, error) { |
| c := &Config{} |
| |
| f, err := os.Open(path) |
| if err != nil { |
| return nil, err |
| } |
| defer f.Close() |
| d := json.NewDecoder(f) |
| d.DisallowUnknownFields() |
| if err = d.Decode(c); err != nil { |
| return nil, err |
| } |
| for i := range c.SingleLicenseFiles { |
| c.SingleLicenseFiles[i] = strings.ToLower(c.SingleLicenseFiles[i]) |
| } |
| for i := range c.SkipFiles { |
| c.SkipFiles[i] = strings.ToLower(c.SkipFiles[i]) |
| } |
| if c.BaseDir == "" { |
| c.BaseDir = "." |
| } |
| if c.Target != "all" { |
| return nil, errors.New("target must be \"all\"") |
| } |
| return c, nil |
| } |