fleet/server/vulnerabilities/io/fs.go
Juan Fernandez 7e366272c0
Feature 9386: Parse the Mac Office release notes for vulnerability processing (#9993)
This PR adds the capability of parsing the release notes posted in https://learn.microsoft.com/en-us/officeupdates/release-notes-office-for-mac into a JSON metadata file (to be released in the NVD repo) and use it for detecting vulnerabilities on Mac Office apps.
2023-02-24 14:18:25 -04:00

61 lines
1.4 KiB
Go

package io
import (
"os"
"path/filepath"
"strings"
)
type FSAPI interface {
MSRCBulletins() ([]MetadataFileName, error)
MacOfficeReleaseNotes() ([]MetadataFileName, error)
Delete(MetadataFileName) error
}
type FSClient struct {
dir string
}
func NewFSClient(dir string) FSClient {
return FSClient{
dir: dir,
}
}
// Delete deletes the provided metadata file from 'dir'.
func (fs FSClient) Delete(b MetadataFileName) error {
path := filepath.Join(fs.dir, b.filename)
return os.Remove(path)
}
// MSRCBulletins walks 'dir' returning all security bulletin files.
func (fs FSClient) MSRCBulletins() ([]MetadataFileName, error) {
return fs.list(mSRCFilePrefix, NewMSRCMetadata)
}
// MacOfficeReleaseNotes walks 'dir' returning all mac office release notes
func (fs FSClient) MacOfficeReleaseNotes() ([]MetadataFileName, error) {
return fs.list(macOfficeReleaseNotesPrefix, NewMacOfficeRelNotesMetadata)
}
func (fs FSClient) list(
prefix string,
ctor func(filePath string) (MetadataFileName, error),
) ([]MetadataFileName, error) {
var result []MetadataFileName
err := filepath.WalkDir(fs.dir, func(path string, d os.DirEntry, err error) error {
if err != nil {
return err
}
filePath := filepath.Base(path)
if strings.HasPrefix(filePath, prefix) {
mfn, err := ctor(filePath)
if err != nil {
return err
}
result = append(result, mfn)
}
return nil
})
return result, err
}