Ver Fonte

Merge pull request #27 from crowdsecurity/add_custom_error

Adding custom error.
Thibault "bui" Koechlin há 5 anos atrás
pai
commit
d9a37683e7
2 ficheiros alterados com 20 adições e 2 exclusões
  1. 8 0
      pkg/cwhub/errors.go
  2. 12 2
      pkg/cwhub/hubMgmt.go

+ 8 - 0
pkg/cwhub/errors.go

@@ -0,0 +1,8 @@
+package cwhub
+
+import (
+	"errors"
+)
+
+/*To be used when reference(s) (is/are) missing in a collection*/
+var ReferenceMissingError = errors.New("Reference(s) missing in collection")

+ 12 - 2
pkg/cwhub/hubMgmt.go

@@ -3,6 +3,7 @@ package cwhub
 import (
 	"crypto/sha256"
 	"encoding/json"
+	"errors"
 	"fmt"
 	"io"
 	"io/ioutil"
@@ -375,7 +376,9 @@ func GetHubIdx() error {
 	}
 	ret, err := LoadPkgIndex(bidx)
 	if err != nil {
-		log.Fatalf("Unable to load existing index : %v.", err)
+		if !errors.Is(err, ReferenceMissingError) {
+			log.Fatalf("Unable to load existing index : %v.", err)
+		}
 	}
 	HubIdx = ret
 	if err := LocalSync(); err != nil {
@@ -391,7 +394,9 @@ func UpdateHubIdx() error {
 	}
 	ret, err := LoadPkgIndex(bidx)
 	if err != nil {
-		log.Fatalf("Unable to load freshly downloaded index : %v.", err)
+		if !errors.Is(err, ReferenceMissingError) {
+			log.Fatalf("Unable to load freshly downloaded index : %v.", err)
+		}
 	}
 	HubIdx = ret
 	if err := LocalSync(); err != nil {
@@ -450,6 +455,7 @@ func DisplaySummary() {
 func LoadPkgIndex(buff []byte) (map[string]map[string]Item, error) {
 	var err error
 	var RawIndex map[string]map[string]Item
+	var missingItems []string
 
 	if err = json.Unmarshal(buff, &RawIndex); err != nil {
 		return nil, fmt.Errorf("failed to unmarshal index : %v", err)
@@ -473,12 +479,16 @@ func LoadPkgIndex(buff []byte) (map[string]map[string]Item, error) {
 					for _, p := range ptr {
 						if _, ok := RawIndex[ptrtype][p]; !ok {
 							log.Errorf("Referred %s %s in collection %s doesn't exist.", ptrtype, p, item.Name)
+							missingItems = append(missingItems, p)
 						}
 					}
 				}
 			}
 		}
 	}
+	if len(missingItems) > 0 {
+		return RawIndex, fmt.Errorf("%q : %w", missingItems, ReferenceMissingError)
+	}
 
 	return RawIndex, nil
 }