1*ba677afaSXin Li// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 2*ba677afaSXin Li 3*ba677afaSXin Lipackage v2_3 4*ba677afaSXin Li 5*ba677afaSXin Liimport "github.com/spdx/tools-golang/spdx/common" 6*ba677afaSXin Li 7*ba677afaSXin Li// Package is a Package section of an SPDX Document for version 2.3 of the spec. 8*ba677afaSXin Litype Package struct { 9*ba677afaSXin Li // NOT PART OF SPEC 10*ba677afaSXin Li // flag: does this "package" contain files that were in fact "unpackaged", 11*ba677afaSXin Li // e.g. included directly in the Document without being in a Package? 12*ba677afaSXin Li IsUnpackaged bool `json:"-" yaml:"-"` 13*ba677afaSXin Li 14*ba677afaSXin Li // 7.1: Package Name 15*ba677afaSXin Li // Cardinality: mandatory, one 16*ba677afaSXin Li PackageName string `json:"name"` 17*ba677afaSXin Li 18*ba677afaSXin Li // 7.2: Package SPDX Identifier: "SPDXRef-[idstring]" 19*ba677afaSXin Li // Cardinality: mandatory, one 20*ba677afaSXin Li PackageSPDXIdentifier common.ElementID `json:"SPDXID"` 21*ba677afaSXin Li 22*ba677afaSXin Li // 7.3: Package Version 23*ba677afaSXin Li // Cardinality: optional, one 24*ba677afaSXin Li PackageVersion string `json:"versionInfo,omitempty"` 25*ba677afaSXin Li 26*ba677afaSXin Li // 7.4: Package File Name 27*ba677afaSXin Li // Cardinality: optional, one 28*ba677afaSXin Li PackageFileName string `json:"packageFileName,omitempty"` 29*ba677afaSXin Li 30*ba677afaSXin Li // 7.5: Package Supplier: may have single result for either Person or Organization, 31*ba677afaSXin Li // or NOASSERTION 32*ba677afaSXin Li // Cardinality: optional, one 33*ba677afaSXin Li PackageSupplier *common.Supplier `json:"supplier,omitempty"` 34*ba677afaSXin Li 35*ba677afaSXin Li // 7.6: Package Originator: may have single result for either Person or Organization, 36*ba677afaSXin Li // or NOASSERTION 37*ba677afaSXin Li // Cardinality: optional, one 38*ba677afaSXin Li PackageOriginator *common.Originator `json:"originator,omitempty"` 39*ba677afaSXin Li 40*ba677afaSXin Li // 7.7: Package Download Location 41*ba677afaSXin Li // Cardinality: mandatory, one 42*ba677afaSXin Li PackageDownloadLocation string `json:"downloadLocation"` 43*ba677afaSXin Li 44*ba677afaSXin Li // 7.8: FilesAnalyzed 45*ba677afaSXin Li // Cardinality: optional, one; default value is "true" if omitted 46*ba677afaSXin Li FilesAnalyzed bool `json:"filesAnalyzed,omitempty"` 47*ba677afaSXin Li // NOT PART OF SPEC: did FilesAnalyzed tag appear? 48*ba677afaSXin Li IsFilesAnalyzedTagPresent bool `json:"-" yaml:"-"` 49*ba677afaSXin Li 50*ba677afaSXin Li // 7.9: Package Verification Code 51*ba677afaSXin Li // Cardinality: if FilesAnalyzed == true must be present, if FilesAnalyzed == false must be omitted 52*ba677afaSXin Li PackageVerificationCode *common.PackageVerificationCode `json:"packageVerificationCode,omitempty"` 53*ba677afaSXin Li 54*ba677afaSXin Li // 7.10: Package Checksum: may have keys for SHA1, SHA256, SHA512, MD5, SHA3-256, SHA3-384, SHA3-512, BLAKE2b-256, BLAKE2b-384, BLAKE2b-512, BLAKE3, ADLER32 55*ba677afaSXin Li // Cardinality: optional, one or many 56*ba677afaSXin Li PackageChecksums []common.Checksum `json:"checksums,omitempty"` 57*ba677afaSXin Li 58*ba677afaSXin Li // 7.11: Package Home Page 59*ba677afaSXin Li // Cardinality: optional, one 60*ba677afaSXin Li PackageHomePage string `json:"homepage,omitempty"` 61*ba677afaSXin Li 62*ba677afaSXin Li // 7.12: Source Information 63*ba677afaSXin Li // Cardinality: optional, one 64*ba677afaSXin Li PackageSourceInfo string `json:"sourceInfo,omitempty"` 65*ba677afaSXin Li 66*ba677afaSXin Li // 7.13: Concluded License: SPDX License Expression, "NONE" or "NOASSERTION" 67*ba677afaSXin Li // Cardinality: optional, one 68*ba677afaSXin Li PackageLicenseConcluded string `json:"licenseConcluded,omitempty"` 69*ba677afaSXin Li 70*ba677afaSXin Li // 7.14: All Licenses Info from Files: SPDX License Expression, "NONE" or "NOASSERTION" 71*ba677afaSXin Li // Cardinality: optional, one or many if filesAnalyzed is true / omitted; 72*ba677afaSXin Li // zero (must be omitted) if filesAnalyzed is false 73*ba677afaSXin Li PackageLicenseInfoFromFiles []string `json:"licenseInfoFromFiles,omitempty"` 74*ba677afaSXin Li 75*ba677afaSXin Li // 7.15: Declared License: SPDX License Expression, "NONE" or "NOASSERTION" 76*ba677afaSXin Li // Cardinality: optional, one 77*ba677afaSXin Li PackageLicenseDeclared string `json:"licenseDeclared,omitempty"` 78*ba677afaSXin Li 79*ba677afaSXin Li // 7.16: Comments on License 80*ba677afaSXin Li // Cardinality: optional, one 81*ba677afaSXin Li PackageLicenseComments string `json:"licenseComments,omitempty"` 82*ba677afaSXin Li 83*ba677afaSXin Li // 7.17: Copyright Text: copyright notice(s) text, "NONE" or "NOASSERTION" 84*ba677afaSXin Li // Cardinality: mandatory, one 85*ba677afaSXin Li PackageCopyrightText string `json:"copyrightText"` 86*ba677afaSXin Li 87*ba677afaSXin Li // 7.18: Package Summary Description 88*ba677afaSXin Li // Cardinality: optional, one 89*ba677afaSXin Li PackageSummary string `json:"summary,omitempty"` 90*ba677afaSXin Li 91*ba677afaSXin Li // 7.19: Package Detailed Description 92*ba677afaSXin Li // Cardinality: optional, one 93*ba677afaSXin Li PackageDescription string `json:"description,omitempty"` 94*ba677afaSXin Li 95*ba677afaSXin Li // 7.20: Package Comment 96*ba677afaSXin Li // Cardinality: optional, one 97*ba677afaSXin Li PackageComment string `json:"comment,omitempty"` 98*ba677afaSXin Li 99*ba677afaSXin Li // 7.21: Package External Reference 100*ba677afaSXin Li // Cardinality: optional, one or many 101*ba677afaSXin Li PackageExternalReferences []*PackageExternalReference `json:"externalRefs,omitempty"` 102*ba677afaSXin Li 103*ba677afaSXin Li // 7.22: Package External Reference Comment 104*ba677afaSXin Li // Cardinality: conditional (optional, one) for each External Reference 105*ba677afaSXin Li // contained within PackageExternalReference2_1 struct, if present 106*ba677afaSXin Li 107*ba677afaSXin Li // 7.23: Package Attribution Text 108*ba677afaSXin Li // Cardinality: optional, one or many 109*ba677afaSXin Li PackageAttributionTexts []string `json:"attributionTexts,omitempty"` 110*ba677afaSXin Li 111*ba677afaSXin Li // 7.24: Primary Package Purpose 112*ba677afaSXin Li // Cardinality: optional, one or many 113*ba677afaSXin Li // Allowed values: APPLICATION, FRAMEWORK, LIBRARY, CONTAINER, OPERATING-SYSTEM, DEVICE, FIRMWARE, SOURCE, ARCHIVE, FILE, INSTALL, OTHER 114*ba677afaSXin Li PrimaryPackagePurpose string `json:"primaryPackagePurpose,omitempty"` 115*ba677afaSXin Li 116*ba677afaSXin Li // 7.25: Release Date: YYYY-MM-DDThh:mm:ssZ 117*ba677afaSXin Li // Cardinality: optional, one 118*ba677afaSXin Li ReleaseDate string `json:"releaseDate,omitempty"` 119*ba677afaSXin Li 120*ba677afaSXin Li // 7.26: Build Date: YYYY-MM-DDThh:mm:ssZ 121*ba677afaSXin Li // Cardinality: optional, one 122*ba677afaSXin Li BuiltDate string `json:"builtDate,omitempty"` 123*ba677afaSXin Li 124*ba677afaSXin Li // 7.27: Valid Until Date: YYYY-MM-DDThh:mm:ssZ 125*ba677afaSXin Li // Cardinality: optional, one 126*ba677afaSXin Li ValidUntilDate string `json:"validUntilDate,omitempty"` 127*ba677afaSXin Li 128*ba677afaSXin Li // Files contained in this Package 129*ba677afaSXin Li Files []*File `json:"files,omitempty"` 130*ba677afaSXin Li 131*ba677afaSXin Li Annotations []Annotation `json:"annotations,omitempty"` 132*ba677afaSXin Li} 133*ba677afaSXin Li 134*ba677afaSXin Li// PackageExternalReference is an External Reference to additional info 135*ba677afaSXin Li// about a Package, as defined in section 7.21 in version 2.3 of the spec. 136*ba677afaSXin Litype PackageExternalReference struct { 137*ba677afaSXin Li // category is "SECURITY", "PACKAGE-MANAGER" or "OTHER" 138*ba677afaSXin Li Category string `json:"referenceCategory"` 139*ba677afaSXin Li 140*ba677afaSXin Li // type is an [idstring] as defined in Appendix VI; 141*ba677afaSXin Li // called RefType here due to "type" being a Golang keyword 142*ba677afaSXin Li RefType string `json:"referenceType"` 143*ba677afaSXin Li 144*ba677afaSXin Li // locator is a unique string to access the package-specific 145*ba677afaSXin Li // info, metadata or content within the target location 146*ba677afaSXin Li Locator string `json:"referenceLocator"` 147*ba677afaSXin Li 148*ba677afaSXin Li // 7.22: Package External Reference Comment 149*ba677afaSXin Li // Cardinality: conditional (optional, one) for each External Reference 150*ba677afaSXin Li ExternalRefComment string `json:"comment,omitempty"` 151*ba677afaSXin Li} 152