github.com/google/osv-scalibr@v0.4.1/extractor/filesystem/os/flatpak/metadata/metadata.go (about) 1 // Copyright 2025 Google LLC 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 // Package metadata defines a Metadata struct for flatpak packages. 16 package metadata 17 18 import ( 19 "fmt" 20 21 "github.com/google/osv-scalibr/log" 22 23 pb "github.com/google/osv-scalibr/binary/proto/scan_result_go_proto" 24 ) 25 26 // Metadata holds parsing information for a flatpak package. 27 type Metadata struct { 28 PackageName string 29 PackageID string 30 PackageVersion string 31 ReleaseDate string 32 OSName string 33 OSID string 34 OSVersionID string 35 OSBuildID string 36 Developer string 37 } 38 39 // ToNamespace extracts the PURL namespace from the metadata. 40 func (m *Metadata) ToNamespace() string { 41 if m.OSID != "" { 42 return m.OSID 43 } 44 log.Errorf("os-release[ID] not set, fallback to ''") 45 return "" 46 } 47 48 // ToDistro extracts the OS distro from the metadata. 49 func (m *Metadata) ToDistro() string { 50 v := m.OSVersionID 51 if v == "" { 52 v = m.OSBuildID 53 if v == "" { 54 log.Errorf("VERSION_ID and BUILD_ID not set in os-release") 55 return "" 56 } 57 log.Errorf("os-release[VERSION_ID] not set, fallback to BUILD_ID") 58 } 59 60 id := m.OSID 61 if id == "" { 62 log.Errorf("os-release[ID] not set, fallback to ''") 63 return v 64 } 65 return fmt.Sprintf("%s-%s", id, v) 66 } 67 68 // SetProto sets the FlatpakPackageMetadata field in the Package proto. 69 func (m *Metadata) SetProto(p *pb.Package) { 70 if m == nil { 71 return 72 } 73 if p == nil { 74 return 75 } 76 77 p.Metadata = &pb.Package_FlatpakMetadata{ 78 FlatpakMetadata: &pb.FlatpakPackageMetadata{ 79 PackageName: m.PackageName, 80 PackageId: m.PackageID, 81 PackageVersion: m.PackageVersion, 82 ReleaseDate: m.ReleaseDate, 83 OsName: m.OSName, 84 OsId: m.OSID, 85 OsVersionId: m.OSVersionID, 86 OsBuildId: m.OSBuildID, 87 Developer: m.Developer, 88 }, 89 } 90 } 91 92 // ToStruct converts the FlatpakPackageMetadata proto to a Metadata struct. 93 func ToStruct(m *pb.FlatpakPackageMetadata) *Metadata { 94 if m == nil { 95 return nil 96 } 97 98 return &Metadata{ 99 PackageName: m.GetPackageName(), 100 PackageID: m.GetPackageId(), 101 PackageVersion: m.GetPackageVersion(), 102 ReleaseDate: m.GetReleaseDate(), 103 OSName: m.GetOsName(), 104 OSID: m.GetOsId(), 105 OSVersionID: m.GetOsVersionId(), 106 OSBuildID: m.GetOsBuildId(), 107 Developer: m.GetDeveloper(), 108 } 109 }