diff --git a/cmd/csaf_provider/actions.go b/cmd/csaf_provider/actions.go index 1e46c2d..137283a 100644 --- a/cmd/csaf_provider/actions.go +++ b/cmd/csaf_provider/actions.go @@ -3,8 +3,8 @@ // // SPDX-License-Identifier: MIT // -// SPDX-FileCopyrightText: 2021 German Federal Office for Information Security (BSI) -// Software-Engineering: 2021 Intevation GmbH +// SPDX-FileCopyrightText: 2022 German Federal Office for Information Security (BSI) +// Software-Engineering: 2022 Intevation GmbH package main @@ -155,7 +155,7 @@ func (c *controller) upload(r *http.Request) (interface{}, error) { return nil, err } - // Validate againt JSON schema. + // Validate against JSON schema. if !c.cfg.NoValidation { validationErrors, err := csaf.ValidateCSAF(content) if err != nil { @@ -167,7 +167,7 @@ func (c *controller) upload(r *http.Request) (interface{}, error) { } } - // Validate against remote validator + // Validate against remote validator. if c.cfg.RemoteValidator != nil { validator, err := c.cfg.RemoteValidator.Open() if err != nil { diff --git a/csaf/models.go b/csaf/models.go index 683c4bd..d9197d5 100644 --- a/csaf/models.go +++ b/csaf/models.go @@ -318,6 +318,24 @@ func (a *Aggregator) Validate() error { return nil } +// UnmarshalText implements the encoding.TextUnmarshaller interface. +func (mdv *MetadataVersion) UnmarshalText(data []byte) error { + s, err := metadataVersionPattern(data) + if err == nil { + *mdv = MetadataVersion(s) + } + return err +} + +// UnmarshalText implements the encoding.TextUnmarshaller interface. +func (mdr *MetadataRole) UnmarshalText(data []byte) error { + s, err := metadataRolePattern(data) + if err == nil { + *mdr = MetadataRole(s) + } + return err +} + // UnmarshalText implements the encoding.TextUnmarshaller interface. func (ac *AggregatorCategory) UnmarshalText(data []byte) error { s, err := aggregatorCategoryPattern(data) diff --git a/docs/scripts/setupProviderForITest.sh b/docs/scripts/setupProviderForITest.sh index fd5c054..ea69ba8 100755 --- a/docs/scripts/setupProviderForITest.sh +++ b/docs/scripts/setupProviderForITest.sh @@ -104,6 +104,20 @@ curl https://localhost:8443/cgi-bin/csaf_provider.go/create --cert-type p12 --ce popd +# Setup validation service +./setupValidationService.sh + +# Disable exit for the next error as these is expected. +set +e + +# Wait for the service to be started +for ((i = 1; i <= 10; i++)); do + if [ $(curl -IL http://localhost:3000/api/v1/tests | grep -c HTTP ) != "0" ]; then + break + fi + sleep 3 +done + # Upload files ./uploadToProvider.sh diff --git a/docs/scripts/setupValidationService.sh b/docs/scripts/setupValidationService.sh new file mode 100755 index 0000000..ba6a43e --- /dev/null +++ b/docs/scripts/setupValidationService.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +sudo mkdir -p /var/lib/csaf +sudo chgrp www-data /var/lib/csaf/ +sudo chmod g+s /var/lib/csaf/ +sudo touch /var/lib/csaf/validations.db +sudo chgrp www-data /var/lib/csaf/validations.db +sudo chmod g+rw,o-rwx /var/lib/csaf/validations.db + +echo ' +remote_validator= { "url" = "http://localhost:3000", "presets" = ["mandatory"], "cache" = "/var/lib/csaf/validations.db" } +' | sudo tee --append /usr/lib/csaf/config.toml + +# Install nodejs +curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash - +sudo apt-get install -y nodejs + +npm install pm2 -g + +pushd ~ +git clone https://github.com/secvisogram/csaf-validator-service.git +cd csaf-validator-service +npm ci +pm2 start npm -- run dev +popd