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

Merge branch 'main' into rolie-categories

This commit is contained in:
Sascha L. Teichmann 2022-07-05 16:54:12 +02:00
commit dc8c89c886
8 changed files with 57 additions and 28 deletions

View file

@ -41,6 +41,7 @@ type provider struct {
Categories *[]string `toml:"categories"` Categories *[]string `toml:"categories"`
// ServiceDocument incidates if we should create a service.json document. // ServiceDocument incidates if we should create a service.json document.
ServiceDocument *bool `toml:"create_service_document"` ServiceDocument *bool `toml:"create_service_document"`
WriteIndices *bool `toml:"write_indices"`
} }
type config struct { type config struct {
@ -54,6 +55,7 @@ type config struct {
Rate *float64 `toml:"rate"` Rate *float64 `toml:"rate"`
Insecure *bool `toml:"insecure"` Insecure *bool `toml:"insecure"`
Categories *[]string `toml:"categories"` Categories *[]string `toml:"categories"`
WriteIndices bool `toml:"write_indices"`
Aggregator csaf.AggregatorInfo `toml:"aggregator"` Aggregator csaf.AggregatorInfo `toml:"aggregator"`
Providers []*provider `toml:"providers"` Providers []*provider `toml:"providers"`
OpenPGPPrivateKey string `toml:"openpgp_private_key"` OpenPGPPrivateKey string `toml:"openpgp_private_key"`
@ -91,6 +93,14 @@ func (p *provider) serviceDocument(c *config) bool {
return c.ServiceDocument return c.ServiceDocument
} }
// writeIndices tells if we should write index.txt and changes.csv.
func (p *provider) writeIndices(c *config) bool {
if p.WriteIndices != nil {
return *p.WriteIndices
}
return c.WriteIndices
}
// runAsMirror determines if the aggregator should run in mirror mode. // runAsMirror determines if the aggregator should run in mirror mode.
func (c *config) runAsMirror() bool { func (c *config) runAsMirror() bool {
return c.Aggregator.Category != nil && return c.Aggregator.Category != nil &&

View file

@ -299,11 +299,14 @@ func (w *worker) writeIndices() error {
if err := w.writeInterims(label, summaries); err != nil { if err := w.writeInterims(label, summaries); err != nil {
return err return err
} }
if err := w.writeCSV(label, summaries); err != nil { // Only write index.txt and changes.csv if configured.
return err if w.provider.writeIndices(w.processor.cfg) {
} if err := w.writeCSV(label, summaries); err != nil {
if err := w.writeIndex(label, summaries); err != nil { return err
return err }
if err := w.writeIndex(label, summaries); err != nil {
return err
}
} }
if err := w.writeROLIE(label, summaries); err != nil { if err := w.writeROLIE(label, summaries); err != nil {
return err return err

View file

@ -261,11 +261,14 @@ func (c *controller) upload(r *http.Request) (interface{}, error) {
return err return err
} }
if err := updateIndices( // Only write index.txt and changes.csv if configured.
folder, filepath.Join(year, newCSAF), if c.cfg.WriteIndices {
ex.CurrentReleaseDate, if err := updateIndices(
); err != nil { folder, filepath.Join(year, newCSAF),
return err ex.CurrentReleaseDate,
); err != nil {
return err
}
} }
// Take over publisher // Take over publisher

View file

@ -58,6 +58,8 @@ type config struct {
RemoteValidator *csaf.RemoteValidatorOptions `toml:"remote_validator"` RemoteValidator *csaf.RemoteValidatorOptions `toml:"remote_validator"`
Categories *[]string `toml:"categories"` Categories *[]string `toml:"categories"`
ServiceDocument bool `toml:"create_service_document"` ServiceDocument bool `toml:"create_service_document"`
WriteIndices bool `toml:"write_indices"`
WriteSecurity bool `toml:"write_security"`
} }
func (pmdc *providerMetadataConfig) apply(pmd *csaf.ProviderMetadata) { func (pmdc *providerMetadataConfig) apply(pmd *csaf.ProviderMetadata) {

View file

@ -43,7 +43,13 @@ func ensureFolders(c *config) error {
} }
} }
return setupSecurity(c, wellknown) // Only write/modify security.txt if configured.
if c.WriteSecurity {
if err := setupSecurity(c, wellknown); err != nil {
return err
}
}
return nil
} }
// createWellknown creates ".well-known" directory if not exist and returns nil. // createWellknown creates ".well-known" directory if not exist and returns nil.

View file

@ -78,8 +78,7 @@ web // directory to be served by the webserver
domain // base url where the contents will be reachable from outside domain // base url where the contents will be reachable from outside
rate // overall downloading limit per worker rate // overall downloading limit per worker
insecure // do not check validity of TLS certificates insecure // do not check validity of TLS certificates
aggregator // table with basic infos for the aggregator object write_indices // write index.txt and changes.csv
providers // array of tables, each entry to be mirrored or listed
openpgp_private_key // OpenPGP private key openpgp_private_key // OpenPGP private key
openpgp_public_key // OpenPGP public key openpgp_public_key // OpenPGP public key
passphrase // passphrase of the OpenPGP key passphrase // passphrase of the OpenPGP key
@ -88,6 +87,8 @@ interim_years // limiting the years for which interim documents are sear
verbose // print more diagnostic output, e.g. https request verbose // print more diagnostic output, e.g. https request
allow_single_provider // debugging option allow_single_provider // debugging option
remote_validator // use remote validation checker remote_validator // use remote validation checker
aggregator // table with basic infos for the aggregator object
providers // array of tables, each entry to be mirrored or listed
``` ```
Rates are specified as floats in HTTPS operations per second. Rates are specified as floats in HTTPS operations per second.
@ -99,6 +100,7 @@ name
domain domain
rate rate
insecure insecure
write_indices
``` ```
#### Example config file #### Example config file
@ -112,6 +114,13 @@ web = "/var/csaf_aggregator/html"
domain = "https://localhost:9443" domain = "https://localhost:9443"
rate = 10.0 rate = 10.0
insecure = true insecure = true
#key =
#passphrase =
#write_indices = false
# specification requires at least two providers (default),
# to override for testing, enable:
# allow_single_provider = true
[aggregator] [aggregator]
category = "aggregator" category = "aggregator"
@ -131,12 +140,6 @@ insecure = true
domain = "localhost" domain = "localhost"
# rate = 1.2 # rate = 1.2
# insecure = true # insecure = true
write_indices = true
#key =
#passphrase =
# specification requires at least two providers (default),
# to override for testing, enable:
# allow_single_provider = true
``` ```
<!-- MARKDOWN-AUTO-DOCS:END --> <!-- MARKDOWN-AUTO-DOCS:END -->

View file

@ -21,6 +21,8 @@ Following options are supported in the config file:
- dynamic_provider_metadata: Take the publisher from the CSAF document. Default: `false`. - dynamic_provider_metadata: Take the publisher from the CSAF document. Default: `false`.
- upload_limit: Set the upload limit size of a file in bytes. Default: `52428800` (aka 50 MiB). - upload_limit: Set the upload limit size of a file in bytes. Default: `52428800` (aka 50 MiB).
- issuer: The issuer of the CA, which if set, restricts the writing permission and the accessing to the web-interface to only the client certificates signed with this CA. - issuer: The issuer of the CA, which if set, restricts the writing permission and the accessing to the web-interface to only the client certificates signed with this CA.
- write_indices: Write/update `index.txt` and `changes.csv`. Default: false
- write_security: Write `CSAF:` entry into `security.txt`: Default: false
- tlps: Set the allowed TLP comming with the upload request (one or more of "csaf", "white", "amber", "green", "red"). - tlps: Set the allowed TLP comming with the upload request (one or more of "csaf", "white", "amber", "green", "red").
The "csaf" selection lets the provider takes the value from the CSAF document. The "csaf" selection lets the provider takes the value from the CSAF document.
These affects the list items in the web interface. These affects the list items in the web interface.

View file

@ -5,6 +5,13 @@ web = "/var/csaf_aggregator/html"
domain = "https://localhost:9443" domain = "https://localhost:9443"
rate = 10.0 rate = 10.0
insecure = true insecure = true
#key =
#passphrase =
#write_indices = false
# specification requires at least two providers (default),
# to override for testing, enable:
# allow_single_provider = true
[aggregator] [aggregator]
category = "aggregator" category = "aggregator"
@ -24,11 +31,4 @@ insecure = true
domain = "localhost" domain = "localhost"
# rate = 1.2 # rate = 1.2
# insecure = true # insecure = true
write_indices = true
#key =
#passphrase =
# specification requires at least two providers (default),
# to override for testing, enable:
# allow_single_provider = true