From 2e48537d8267770c89762ae125b1a701e5ce413f Mon Sep 17 00:00:00 2001
From: Sydney Anne Erickson <sydney@elixxir.io>
Date: Wed, 18 Nov 2020 11:31:45 -0800
Subject: [PATCH] Add fact

---
 ud/addFact.go      | 44 +++++++++++++++++++++++++++++++++++++
 ud/addFact_test.go | 55 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 99 insertions(+)
 create mode 100644 ud/addFact.go
 create mode 100644 ud/addFact_test.go

diff --git a/ud/addFact.go b/ud/addFact.go
new file mode 100644
index 000000000..6c941717e
--- /dev/null
+++ b/ud/addFact.go
@@ -0,0 +1,44 @@
+package ud
+
+import (
+	"gitlab.com/elixxir/client/interfaces/contact"
+	pb "gitlab.com/elixxir/comms/mixmessages"
+	"gitlab.com/elixxir/primitives/fact"
+	"gitlab.com/xx_network/comms/connect"
+	"gitlab.com/xx_network/crypto/signature"
+	"gitlab.com/xx_network/crypto/signature/rsa"
+	"io"
+)
+
+type addFactComms interface {
+	SendRegisterFact(host *connect.Host, message *pb.FactRegisterRequest) (*pb.FactRegisterResponse, error)
+}
+
+func (m *Manager) SendRegisterFact(fact contact.Fact) (*pb.FactRegisterResponse, error) {
+	return m.addFact(fact, m.comms)
+}
+
+func (m *Manager) addFact(fact fact.Fact, aFC addFactComms) (*pb.FactRegisterResponse, error) {
+	// Construct the message to send
+	// Convert our Fact to a mixmessages Fact for sending
+	mmFact := pb.Fact{
+		Fact:     fact.Fact,
+		FactType: uint32(fact.T),
+	}
+
+	rsa.Sign(io.Reader, m.privKey, )
+	//signature.Sign(mmFact, m.privKey)
+
+	// Create our Fact Removal Request message data
+	remFactMsg := pb.FactRegisterRequest{
+		UID: m.host.GetId().Marshal(),
+		Fact: &mmFact,
+		FactSig: []byte("B"),
+	}
+
+	// Send the message
+	response, err := aFC.SendRegisterFact(m.host, &remFactMsg)
+
+	// Return the error
+	return response, err
+}
diff --git a/ud/addFact_test.go b/ud/addFact_test.go
new file mode 100644
index 000000000..8284215b5
--- /dev/null
+++ b/ud/addFact_test.go
@@ -0,0 +1,55 @@
+package ud
+
+import (
+"gitlab.com/elixxir/client/interfaces/contact"
+"gitlab.com/elixxir/comms/client"
+	pb "gitlab.com/elixxir/comms/mixmessages"
+"gitlab.com/xx_network/comms/connect"
+"gitlab.com/xx_network/crypto/csprng"
+"gitlab.com/xx_network/crypto/signature/rsa"
+"gitlab.com/xx_network/primitives/id"
+"testing"
+)
+
+type testAFC struct{}
+
+func (rFC *testAFC) SendRegisterFact(host *connect.Host, message *pb.FactRegisterRequest) (*pb.FactRegisterResponse, error) {
+	return &pb.FactRegisterResponse{}, nil
+}
+
+func TestAddFact(t *testing.T) {
+	c, err := client.NewClientComms(&id.DummyUser, nil, nil, nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	h, err := connect.NewHost(&id.DummyUser, "address", nil, connect.GetDefaultHostParams())
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	rng := csprng.NewSystemRNG()
+	cpk, err := rsa.GenerateKey(rng, 2048)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	m := Manager{
+		comms:   c,
+		host:    h,
+		privKey: cpk,
+	}
+
+	f := contact.Fact{
+		Fact: "testing",
+		T:    2,
+	}
+
+	tafc := testAFC{}
+
+	_, err = m.addFact(f, &tafc)
+	if err != nil {
+		t.Fatal(err)
+	}
+}
+
-- 
GitLab