From 0646f1399871e0b2e0c79e47d9911271ddf8b9c8 Mon Sep 17 00:00:00 2001
From: josh <josh@elixxir.io>
Date: Mon, 28 Mar 2022 16:27:23 -0700
Subject: [PATCH] Allow backup facts to be empty

---
 bindings/ud.go      | 30 ++++++++++++++++++++++--------
 storage/ud/facts.go |  4 +++-
 2 files changed, 25 insertions(+), 9 deletions(-)

diff --git a/bindings/ud.go b/bindings/ud.go
index c791d0e0b..5c20b78fd 100644
--- a/bindings/ud.go
+++ b/bindings/ud.go
@@ -9,6 +9,7 @@ package bindings
 
 import (
 	"fmt"
+	jww "github.com/spf13/jwalterweatherman"
 	"time"
 
 	"github.com/pkg/errors"
@@ -62,22 +63,35 @@ func NewUserDiscoveryFromBackup(client *Client,
 	if err != nil {
 		return nil, errors.WithMessage(err, "Failed to create User Discovery Manager")
 	}
+
+	// Parse username as a fact, which should not be empty
 	userFact, err := fact.NewFact(fact.Username, username)
 	if err != nil {
 		return nil, errors.WithMessagef(err, "Failed to parse "+
 			"stringified username fact %q", username)
 	}
 
-	emailFact, err := fact.NewFact(fact.Email, email)
-	if err != nil {
-		return nil, errors.WithMessagef(err, "Failed to parse "+
-			"stringified email fact %q", email)
+	var emailFact, phoneFact fact.Fact
+	// Parse email as a fact, if it exists
+	if email != "" {
+		emailFact, err = fact.NewFact(fact.Email, email)
+		if err != nil {
+			return nil, errors.WithMessagef(err, "Failed to parse "+
+				"stringified email fact %q", email)
+		}
+	} else {
+		jww.WARN.Printf("Loading manager without a registered email")
 	}
 
-	phoneFact, err := fact.NewFact(fact.Phone, phone)
-	if err != nil {
-		return nil, errors.WithMessagef(err, "Failed to parse "+
-			"stringified phone fact %q", phone)
+	// Parse phone number as a fact, if it exists
+	if phone != "" {
+		phoneFact, err = fact.NewFact(fact.Phone, phone)
+		if err != nil {
+			return nil, errors.WithMessagef(err, "Failed to parse "+
+				"stringified phone fact %q", phone)
+		}
+	} else {
+		jww.WARN.Printf("Loading manager without a registered phone number")
 	}
 
 	m, err := ud.NewManagerFromBackup(&client.api, single, fact.FactList{userFact, emailFact, phoneFact})
diff --git a/storage/ud/facts.go b/storage/ud/facts.go
index 7f099fac4..460d1dbb3 100644
--- a/storage/ud/facts.go
+++ b/storage/ud/facts.go
@@ -62,7 +62,9 @@ func (s *Store) RestoreFromBackUp(backupData fact.FactList) error {
 	}
 
 	for _, f := range backupData {
-		s.confirmedFacts[f] = struct{}{}
+		if !isFactZero(f) {
+			s.confirmedFacts[f] = struct{}{}
+		}
 	}
 
 	return s.save()
-- 
GitLab