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

Write feed URLs in provider metadata.

This commit is contained in:
Sascha L. Teichmann 2021-11-17 11:47:09 +01:00
parent 1d0d8a6d03
commit b82882eb09
3 changed files with 51 additions and 8 deletions

View file

@ -248,19 +248,23 @@ func (c *controller) upload(rw http.ResponseWriter, r *http.Request) {
return err 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. // Create new if does not exists.
if rolie == nil { if rolie == nil {
feedURL := c.cfg.Domain +
"/.well-known/csaf/" + ts + "/" + feedName
rolie = &csaf.ROLIEFeed{ rolie = &csaf.ROLIEFeed{
ID: "csaf-feed-tlp-" + ts, ID: "csaf-feed-tlp-" + ts,
Title: "CSAF feed (TLP:" + strings.ToUpper(ts) + ")", Title: "CSAF feed (TLP:" + string(tlpLabel) + ")",
Link: []csaf.Link{{ Link: []csaf.Link{{
Rel: "rel", Rel: "rel",
HRef: feedURL, HRef: string(feedURL),
}}, }},
} }
} }
rolie.Updated = csaf.TimeStamp(time.Now()) rolie.Updated = csaf.TimeStamp(time.Now())
year := strconv.Itoa(ex.currentReleaseDate.Year()) year := strconv.Itoa(ex.currentReleaseDate.Year())

View file

@ -3,10 +3,49 @@ package main
import ( import (
"os" "os"
"path/filepath" "path/filepath"
"strings"
"github.com/Intevation/csaf_trusted/csaf" "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( func doTransaction(
cfg *config, cfg *config,
t tlp, t tlp,
@ -21,8 +60,7 @@ func doTransaction(
f, err := os.Open(metadata) f, err := os.Open(metadata)
if err != nil { if err != nil {
if os.IsNotExist(err) { if os.IsNotExist(err) {
return csaf.NewProviderMetadata( return newProviderMetadata(cfg), nil
cfg.Domain + "/.wellknown/csaf/provider-metadata.json"), nil
} }
return nil, err return nil, err
} }

View file

@ -38,12 +38,13 @@ type Feed struct {
} }
type ROLIE struct { type ROLIE struct {
Categories []JsonURL `json:"categories"` Categories []JsonURL `json:"categories,omitempty"`
Feeds []Feed `json:"feeds"` // required Feeds []Feed `json:"feeds"` // required
Services []JsonURL `json:"services,omitempty"`
} }
type Distribution struct { type Distribution struct {
DirectoryURL string `json:"directory_url"` DirectoryURL string `json:"directory_url,omitempty"`
Rolie []ROLIE `json:"rolie"` Rolie []ROLIE `json:"rolie"`
} }