Skip to content
Snippets Groups Projects
Commit f57da0b1 authored by Josh Brooks's avatar Josh Brooks
Browse files

Remove ud.LoadManager for LoadOrNewManager

parent 9b8afc50
No related branches found
No related tags found
2 merge requests!510Release,!292Remove ud.LoadManager for LoadOrNewManager
...@@ -10,7 +10,6 @@ package cmd ...@@ -10,7 +10,6 @@ package cmd
import ( import (
"fmt" "fmt"
"strings"
"time" "time"
"gitlab.com/elixxir/client/single" "gitlab.com/elixxir/client/single"
...@@ -65,18 +64,10 @@ var udCmd = &cobra.Command{ ...@@ -65,18 +64,10 @@ var udCmd = &cobra.Command{
rng := messenger.GetRng() rng := messenger.GetRng()
userToRegister := viper.GetString(udRegisterFlag) userToRegister := viper.GetString(udRegisterFlag)
jww.TRACE.Printf("[UD] Registering user %v...", userToRegister) jww.TRACE.Printf("[UD] Registering user %v...", userToRegister)
userDiscoveryMgr, err := ud.NewManager(messenger, messenger.GetComms(), userDiscoveryMgr, err := ud.LoadOrNewManager(messenger, messenger.GetComms(),
messenger.NetworkFollowerStatus, userToRegister, nil) messenger.NetworkFollowerStatus, userToRegister, nil)
if err != nil { if err != nil {
if strings.Contains(err.Error(), ud.IsRegisteredErr) { jww.FATAL.Panicf("Failed to load or create new UD manager: %+v", err)
userDiscoveryMgr, err = ud.LoadManager(messenger, messenger.GetComms())
if err != nil {
jww.FATAL.Panicf("Failed to load UD manager: %+v", err)
}
} else {
jww.FATAL.Panicf("Failed to create new UD manager: %+v", err)
}
} }
jww.INFO.Printf("[UD] Registered user %v", userToRegister) jww.INFO.Printf("[UD] Registered user %v", userToRegister)
......
...@@ -18,12 +18,6 @@ import ( ...@@ -18,12 +18,6 @@ import (
"gitlab.com/xx_network/primitives/id" "gitlab.com/xx_network/primitives/id"
) )
const (
IsRegisteredErr = "NewManager is already registered. " +
"NewManager is meant for the first instantiation. Use LoadManager " +
"for all other calls"
)
// Manager is the control structure for the contacting the user discovery service. // Manager is the control structure for the contacting the user discovery service.
type Manager struct { type Manager struct {
...@@ -48,19 +42,15 @@ type Manager struct { ...@@ -48,19 +42,15 @@ type Manager struct {
// alternativeUd is an alternate User discovery service to circumvent // alternativeUd is an alternate User discovery service to circumvent
// production. This is for testing with a separately deployed UD service. // production. This is for testing with a separately deployed UD service.
alternativeUd *alternateUd alternativeUd *alternateUd
// registrationValidationSignature for the ReceptionID
// Optional, depending on UD configuration
registrationValidationSignature []byte
} }
// NewManager builds a new user discovery manager. // LoadOrNewManager builds a new user discovery manager.
// It requires that an updated // It requires that an updated
// NDF is available and will error if one is not. // NDF is available and will error if one is not.
// registrationValidationSignature may be set to nil // registrationValidationSignature may be set to nil
func NewManager(messenger udE2e, comms Comms, follower udNetworkStatus, func LoadOrNewManager(messenger udE2e, comms Comms, follower udNetworkStatus,
username string, registrationValidationSignature []byte) (*Manager, error) { username string, networkValidationSig []byte) (*Manager, error) {
jww.INFO.Println("ud.NewManager()") jww.INFO.Println("ud.LoadOrNewManager()")
if follower() != xxdk.Running { if follower() != xxdk.Running {
return nil, errors.New( return nil, errors.New(
...@@ -69,13 +59,18 @@ func NewManager(messenger udE2e, comms Comms, follower udNetworkStatus, ...@@ -69,13 +59,18 @@ func NewManager(messenger udE2e, comms Comms, follower udNetworkStatus,
// Initialize manager // Initialize manager
m := &Manager{ m := &Manager{
messenger: messenger, messenger: messenger,
comms: comms, comms: comms,
registrationValidationSignature: registrationValidationSignature,
} }
if m.isRegistered() { if m.isRegistered() {
return nil, errors.Errorf(IsRegisteredErr) // Load manager if already registered
var err error
m.store, err = store.NewOrLoadStore(m.getKv())
if err != nil {
return nil, errors.Errorf("Failed to initialize store: %v", err)
}
return m, nil
} }
// Initialize store // Initialize store
...@@ -95,7 +90,7 @@ func NewManager(messenger udE2e, comms Comms, follower udNetworkStatus, ...@@ -95,7 +90,7 @@ func NewManager(messenger udE2e, comms Comms, follower udNetworkStatus,
// Register with user discovery // Register with user discovery
stream := m.getRng().GetStream() stream := m.getRng().GetStream()
defer stream.Close() defer stream.Close()
err = m.register(username, stream, m.comms, udHost) err = m.register(username, networkValidationSig, stream, m.comms, udHost)
if err != nil { if err != nil {
return nil, errors.Errorf("Failed to register: %v", err) return nil, errors.Errorf("Failed to register: %v", err)
} }
...@@ -185,29 +180,6 @@ func InitStoreFromBackup(kv *versioned.KV, ...@@ -185,29 +180,6 @@ func InitStoreFromBackup(kv *versioned.KV,
return nil return nil
} }
// LoadManager loads the state of the Manager
// from disk. This is meant to be called after any the first
// instantiation of the manager by NewUserDiscovery.
func LoadManager(messenger udE2e, comms Comms) (*Manager, error) {
m := &Manager{
messenger: messenger,
comms: comms,
}
if !m.isRegistered() {
return nil, errors.Errorf("LoadManager could not detect that " +
"the user has been registered. Has a manager been initiated before?")
}
var err error
m.store, err = store.NewOrLoadStore(m.getKv())
if err != nil {
return nil, errors.Errorf("Failed to initialize store: %v", err)
}
return m, err
}
// GetFacts returns a list of fact.Fact objects that exist within the // GetFacts returns a list of fact.Fact objects that exist within the
// Store's registeredFacts map. // Store's registeredFacts map.
func (m *Manager) GetFacts() []fact.Fact { func (m *Manager) GetFacts() []fact.Fact {
......
...@@ -14,8 +14,8 @@ import ( ...@@ -14,8 +14,8 @@ import (
// register initiates registration with user discovery given a specified // register initiates registration with user discovery given a specified
// username. Provided a comms sub-interface to facilitate testing. // username. Provided a comms sub-interface to facilitate testing.
func (m *Manager) register(username string, rng csprng.Source, func (m *Manager) register(username string, networkSignature []byte,
comm registerUserComms, udHost *connect.Host) error { rng csprng.Source, comm registerUserComms, udHost *connect.Host) error {
var err error var err error
identity := m.messenger.GetReceptionIdentity() identity := m.messenger.GetReceptionIdentity()
...@@ -35,7 +35,7 @@ func (m *Manager) register(username string, rng csprng.Source, ...@@ -35,7 +35,7 @@ func (m *Manager) register(username string, rng csprng.Source,
// Construct the user registration message // Construct the user registration message
msg := &pb.UDBUserRegistration{ msg := &pb.UDBUserRegistration{
PermissioningSignature: m.registrationValidationSignature, PermissioningSignature: networkSignature,
RSAPublicPem: string(rsa.CreatePublicKeyPem(privKey.GetPublic())), RSAPublicPem: string(rsa.CreatePublicKeyPem(privKey.GetPublic())),
IdentityRegistration: &pb.Identity{ IdentityRegistration: &pb.Identity{
Username: username, Username: username,
......
...@@ -34,13 +34,15 @@ func TestManager_register(t *testing.T) { ...@@ -34,13 +34,15 @@ func TestManager_register(t *testing.T) {
c := &testRegisterComm{} c := &testRegisterComm{}
prng := NewPrng(42) prng := NewPrng(42)
err = m.register("testUser", prng, c, udHost) mockSig := []byte("mock")
err = m.register("testUser", mockSig, prng, c, udHost)
if err != nil { if err != nil {
t.Errorf("register() returned an error: %+v", err) t.Errorf("register() returned an error: %+v", err)
} }
// Check if the UDBUserRegistration contents are correct // Check if the UDBUserRegistration contents are correct
isCorrect("testUser", c.msg, m, t) isCorrect("testUser", mockSig, c.msg, m, t)
// Verify the signed identity data // Verify the signed identity data
pubKeyPem := m.messenger.GetReceptionIdentity().RSAPrivatePem pubKeyPem := m.messenger.GetReceptionIdentity().RSAPrivatePem
...@@ -66,10 +68,10 @@ func TestManager_register(t *testing.T) { ...@@ -66,10 +68,10 @@ func TestManager_register(t *testing.T) {
// isCorrect checks if the UDBUserRegistration has all the expected fields minus // isCorrect checks if the UDBUserRegistration has all the expected fields minus
// any signatures. // any signatures.
func isCorrect(username string, msg *pb.UDBUserRegistration, m *Manager, t *testing.T) { func isCorrect(username string, mockSig []byte, msg *pb.UDBUserRegistration, m *Manager, t *testing.T) {
if !bytes.Equal(m.registrationValidationSignature, msg.PermissioningSignature) { if !bytes.Equal(mockSig, msg.PermissioningSignature) {
t.Errorf("PermissioningSignature incorrect.\n\texpected: %v\n\treceived: %v", t.Errorf("PermissioningSignature incorrect.\n\texpected: %v\n\treceived: %v",
m.registrationValidationSignature, msg.PermissioningSignature) mockSig, msg.PermissioningSignature)
} }
identity := m.messenger.GetReceptionIdentity() identity := m.messenger.GetReceptionIdentity()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment