diff --git a/cmd/csaf_provider/controller.go b/cmd/csaf_provider/controller.go index 4e4e0a3..23d5ad7 100644 --- a/cmd/csaf_provider/controller.go +++ b/cmd/csaf_provider/controller.go @@ -248,19 +248,23 @@ func (c *controller) upload(rw http.ResponseWriter, r *http.Request) { return err } + feedURL := csaf.JsonURL( + c.cfg.Domain + "/.well-known/csaf/" + ts + "/" + feedName) + + tlpLabel := csaf.TLPLabel(strings.ToUpper(ts)) + // Create new if does not exists. if rolie == nil { - feedURL := c.cfg.Domain + - "/.well-known/csaf/" + ts + "/" + feedName rolie = &csaf.ROLIEFeed{ ID: "csaf-feed-tlp-" + ts, - Title: "CSAF feed (TLP:" + strings.ToUpper(ts) + ")", + Title: "CSAF feed (TLP:" + string(tlpLabel) + ")", Link: []csaf.Link{{ Rel: "rel", - HRef: feedURL, + HRef: string(feedURL), }}, } } + rolie.Updated = csaf.TimeStamp(time.Now()) year := strconv.Itoa(ex.currentReleaseDate.Year()) diff --git a/cmd/csaf_provider/transaction.go b/cmd/csaf_provider/transaction.go index f1703be..760338e 100644 --- a/cmd/csaf_provider/transaction.go +++ b/cmd/csaf_provider/transaction.go @@ -3,10 +3,49 @@ package main import ( "os" "path/filepath" + "strings" "github.com/Intevation/csaf_trusted/csaf" ) +func newProviderMetadata(cfg *config) *csaf.ProviderMetadata { + + pmd := csaf.NewProviderMetadata( + cfg.Domain + "/.wellknown/csaf/provider-metadata.json") + + // Register feeds. + + var feeds []csaf.Feed + + for _, t := range cfg.TLPs { + if t == tlpCSAF { + continue + } + var ( + ts = string(t) + feedName = "csaf-feed-tlp-" + ts + ".json" + feedURL = csaf.JsonURL( + cfg.Domain + "/.well-known/csaf/" + ts + "/" + feedName) + tlpLabel = csaf.TLPLabel(strings.ToUpper(ts)) + ) + feeds = append(feeds, csaf.Feed{ + Summary: "TLP:" + string(tlpLabel) + " advisories", + TLPLabel: &tlpLabel, + URL: &feedURL, + }) + } + + if len(feeds) > 0 { + pmd.Distributions = []csaf.Distribution{{ + Rolie: []csaf.ROLIE{{ + Feeds: feeds, + }}, + }} + } + + return pmd +} + func doTransaction( cfg *config, t tlp, @@ -21,8 +60,7 @@ func doTransaction( f, err := os.Open(metadata) if err != nil { if os.IsNotExist(err) { - return csaf.NewProviderMetadata( - cfg.Domain + "/.wellknown/csaf/provider-metadata.json"), nil + return newProviderMetadata(cfg), nil } return nil, err } diff --git a/csaf/models.go b/csaf/models.go index aafc7be..4cb37de 100644 --- a/csaf/models.go +++ b/csaf/models.go @@ -38,12 +38,13 @@ type Feed struct { } type ROLIE struct { - Categories []JsonURL `json:"categories"` + Categories []JsonURL `json:"categories,omitempty"` Feeds []Feed `json:"feeds"` // required + Services []JsonURL `json:"services,omitempty"` } type Distribution struct { - DirectoryURL string `json:"directory_url"` + DirectoryURL string `json:"directory_url,omitempty"` Rolie []ROLIE `json:"rolie"` }