1
0
Fork 0
mirror of https://github.com/gocsaf/csaf.git synced 2025-12-22 18:15:42 +01:00

create service.json document in provider.

This commit is contained in:
Sascha L. Teichmann 2022-06-30 16:24:39 +02:00
parent 7bafb210cf
commit 7f62caeedc
2 changed files with 49 additions and 0 deletions

View file

@ -57,6 +57,7 @@ type config struct {
Issuer *string `toml:"issuer"`
RemoteValidator *csaf.RemoteValidatorOptions `toml:"remote_validator"`
Categories *[]string `toml:"categories"`
ServiceDocument bool `toml:"create_service_document"`
}
func (pmdc *providerMetadataConfig) apply(pmd *csaf.ProviderMetadata) {

View file

@ -34,6 +34,7 @@ func ensureFolders(c *config) error {
for _, create := range []func(*config, string) error{
createWellknown,
createFeedFolders,
createService,
createOpenPGPFolder,
createProviderMetadata,
} {
@ -61,6 +62,53 @@ func createWellknown(_ *config, wellknown string) error {
return nil
}
// createService creates the ROLIE service document (if configured).
func createService(c *config, wellknownCSAF string) error {
// no service document needed.
if !c.ServiceDocument {
return nil
}
categories := csaf.ROLIEServiceWorkspaceCollectionCategories{
Category: []csaf.ROLIEServiceWorkspaceCollectionCategoriesCategory{{
Scheme: "urn:ietf:params:rolie:category:information-type",
Term: "csaf",
}},
}
var collections []csaf.ROLIEServiceWorkspaceCollection
for _, t := range c.TLPs {
if t == tlpCSAF {
continue
}
ts := string(t)
title := "CSAF feed (TLP:" + strings.ToUpper(ts) + ")"
feedName := "csaf-feed-tlp-" + ts + ".json"
href := c.CanonicalURLPrefix +
"/.well-known/csaf/" + ts + "/" + feedName
collection := csaf.ROLIEServiceWorkspaceCollection{
Title: title,
HRef: href,
Categories: categories,
}
collections = append(collections, collection)
}
rsd := &csaf.ROLIEServiceDocument{
Service: csaf.ROLIEService{
Workspace: []csaf.ROLIEServiceWorkspace{{
Title: "CSAF feeds",
Collection: collections,
}},
},
}
path := filepath.Join(wellknownCSAF, "service.json")
return util.WriteToFile(path, rsd)
}
// createFeedFolders creates the feed folders according to the tlp values
// in the "tlps" config option if they do not already exist.
// No creation for the "csaf" option will be done.