Skip to content
Snippets Groups Projects
Select Git revision
  • 1183b4083e51a64cf8df2a797795729bce5de995
  • release default
  • 11-22-implement-kv-interface-defined-in-collectiveversionedkvgo
  • master protected
  • XX-4688/DbEncoding
  • hotfix/update
  • @XX-4682/Files
  • hotfix/XX-4655
  • dev protected
  • project/HavenNotifications
  • XX-4602/SilentMessageType
  • jono/npmTest
  • wasmTest2
  • XX-4461/FileUpload
  • XX-4505/blockuser
  • XX-4441
  • Jakub/Emoji-CI-Test
  • testing/websockets
  • fastReg
  • fast-registration
  • NewHostPool
  • v0.3.22
  • v0.3.21
  • v0.3.20
  • v0.3.18
  • v0.3.17
  • v0.3.16
  • v0.3.15
  • v0.3.14
  • v0.3.13
  • v0.3.12
  • v0.3.11
  • v0.3.10
  • v0.3.9
  • v0.3.8
  • v0.3.7
  • v0.3.6
  • v0.3.5
  • v0.3.4
  • 812b395df518ce096d01d5292596ca26f8fe92d9c4487ddfa515e190a51aa1a1
  • 76ba08e2dfa1798412a265404fa271840b52c035869111fce8e8cdb23a036a5a
41 results

wasm_test.go

Blame
  • addFact.go 2.17 KiB
    package ud
    
    import (
    	"crypto/rand"
    	"github.com/pkg/errors"
    	jww "github.com/spf13/jwalterweatherman"
    	pb "gitlab.com/elixxir/comms/mixmessages"
    	"gitlab.com/elixxir/crypto/factID"
    	"gitlab.com/elixxir/crypto/hash"
    	"gitlab.com/elixxir/primitives/fact"
    	"gitlab.com/xx_network/comms/connect"
    	"gitlab.com/xx_network/crypto/signature/rsa"
    	"gitlab.com/xx_network/primitives/id"
    )
    
    type addFactComms interface {
    	SendRegisterFact(host *connect.Host, message *pb.FactRegisterRequest) (*pb.FactRegisterResponse, error)
    }
    
    // SendRegisterFact adds a fact for the user to user discovery. Will only
    // succeed if the user is already registered and the system does not have the
    // fact currently registered for any user.
    // This does not complete the fact registration process, it returns a
    // confirmation id instead. Over the communications system the fact is
    // associated with, a code will be sent. This confirmation ID needs to be
    // called along with the code to finalize the fact.
    func (m *Manager) SendRegisterFact(fact fact.Fact) (string, error) {
    	jww.INFO.Printf("ud.SendRegisterFact(%s)", fact.Stringify())
    	return m.addFact(fact, m.myID, m.comms)
    }
    
    func (m *Manager) addFact(inFact fact.Fact, uid *id.ID, aFC addFactComms) (string, error) {
    
    	if !m.IsRegistered() {
    		return "", errors.New("Failed to add fact: " +
    			"client is not registered")
    	}
    
    	// Create a primitives Fact so we can hash it
    	f, err := fact.NewFact(inFact.T, inFact.Fact)
    	if err != nil {
    		return "", err
    	}
    
    	// Create a hash of our fact
    	fHash := factID.Fingerprint(f)
    
    	// Sign our inFact for putting into the request
    	fSig, err := rsa.Sign(rand.Reader, m.privKey, hash.CMixHash, fHash, nil)
    	if err != nil {
    		return "", err
    	}
    
    	// Create our Fact Removal Request message data
    	remFactMsg := pb.FactRegisterRequest{
    		UID: uid.Marshal(),
    		Fact: &pb.Fact{
    			Fact:     inFact.Fact,
    			FactType: uint32(inFact.T),
    		},
    		FactSig: fSig,
    	}
    
    	// Get UD host
    	host, err := m.getHost()
    	if err != nil {
    		return "", err
    	}
    
    	// Send the message
    	response, err := aFC.SendRegisterFact(host, &remFactMsg)
    
    	confirmationID := ""
    	if response != nil {
    		confirmationID = response.ConfirmationID
    	}
    
    	// Return the error
    	return confirmationID, err
    }