Skip to content
Snippets Groups Projects
Commit fc48ef9c authored by Jono's avatar Jono
Browse files

Fix to use new ID

parent 1b9a2397
Branches
Tags
No related merge requests found
......@@ -15,6 +15,7 @@ import (
"github.com/pkg/errors"
"gitlab.com/elixxir/client/api"
"gitlab.com/elixxir/client/globals"
"gitlab.com/elixxir/client/user"
"gitlab.com/elixxir/comms/mixmessages"
"gitlab.com/elixxir/crypto/csprng"
"gitlab.com/elixxir/primitives/id"
......@@ -44,7 +45,7 @@ func StartBot(sess string, def *ndf.NetworkDefinition) error {
UDBSessionFileName = sess
// Initialize the client
regCode := udb.UDB_USERID.RegistrationCode()
regCode := user.RegistrationCode(&id.UDB)
_, err := Init(UDBSessionFileName, regCode, def)
if err != nil {
return err
......@@ -95,7 +96,7 @@ func StartBot(sess string, def *ndf.NetworkDefinition) error {
}
// Initialize a session using the given session file and other info
func Init(sessionFile string, regCode string, def *ndf.NetworkDefinition) (*id.User, error) {
func Init(sessionFile string, regCode string, def *ndf.NetworkDefinition) (*id.ID, error) {
// We only register when the session file does not exist
// FIXME: this is super weird -- why have to check for a file,
// then init that file, then register optionally based on that check?
......@@ -135,7 +136,7 @@ func Init(sessionFile string, regCode string, def *ndf.NetworkDefinition) (*id.U
// Register, or to remove the things that aren't actually used for
// registration.
// RegisterWithPermissioning(preCan bool, registrationCode, nick, email,
// password string, privateKeyRSA *rsa.PrivateKey) (*id.User, error)
// password string, privateKeyRSA *rsa.PrivateKey) (*id.ID, error)
err = clientObj.GenerateKeys(nil, "")
if err != nil {
return nil, err
......@@ -157,17 +158,23 @@ func getLatestMessageID() (string, error) {
clientComms := clientObj.GetCommManager().Comms
msg := &mixmessages.ClientRequest{
UserID: udb.UDB_USERID.Bytes(),
UserID: id.UDB.Marshal(),
LastMessageID: "",
}
receiveGateway := id.NewNodeFromBytes(clientObj.GetNDF().Nodes[len(clientObj.GetNDF().Gateways)-1].ID).NewGateway()
nodeIdBytes := clientObj.GetNDF().Nodes[len(clientObj.GetNDF().Gateways)-1].ID
nodeID, err := id.Unmarshal(nodeIdBytes)
if err != nil {
return "", errors.Errorf("Failed to unmarshal node ID: %+v", err)
}
receiveGateway := nodeID
var idList *mixmessages.IDList
for {
var err error
host, ok := clientComms.GetHost(receiveGateway.String())
host, ok := clientComms.GetHost(receiveGateway)
if !ok {
//ERROR getting host log it here
//Needs to be part of a larger discussion for error handling
......
......@@ -5,27 +5,23 @@ go 1.13
require (
github.com/fsnotify/fsnotify v1.4.9 // indirect
github.com/go-pg/pg v8.0.6+incompatible
github.com/golang/protobuf v1.4.0 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/mattn/go-shellwords v1.0.10
github.com/mitchellh/go-homedir v1.1.0
github.com/mitchellh/mapstructure v1.2.2 // indirect
github.com/mitchellh/mapstructure v1.3.0 // indirect
github.com/onsi/ginkgo v1.12.0 // indirect
github.com/onsi/gomega v1.9.0 // indirect
github.com/onsi/gomega v1.10.0 // indirect
github.com/pelletier/go-toml v1.7.0 // indirect
github.com/pkg/errors v0.9.1
github.com/smartystreets/assertions v1.1.0 // indirect
github.com/spf13/cobra v1.0.0
github.com/spf13/jwalterweatherman v1.1.0
github.com/spf13/viper v1.6.3
gitlab.com/elixxir/client v1.1.1-0.20200415211833-9216edbb5996
gitlab.com/elixxir/comms v0.0.0-20200415204952-6d63dd94a0ea
gitlab.com/elixxir/crypto v0.0.0-20200410231849-90e859940f5d
gitlab.com/elixxir/primitives v0.0.0-20200410231944-a57d71d577c9
golang.org/x/crypto v0.0.0-20200414173820-0848c9571904 // indirect
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e // indirect
golang.org/x/sys v0.0.0-20200413165638-669c56c373c4 // indirect
google.golang.org/genproto v0.0.0-20200413115906-b5235f65be36 // indirect
google.golang.org/grpc v1.28.1 // indirect
gopkg.in/ini.v1 v1.55.0 // indirect
github.com/spf13/viper v1.7.0
gitlab.com/elixxir/client v1.1.1-0.20200510010539-caa7e113d03e
gitlab.com/elixxir/comms v0.0.0-20200508234738-931e1e89c9c8
gitlab.com/elixxir/crypto v0.0.0-20200504184505-e210a219cbd9
gitlab.com/elixxir/primitives v0.0.0-20200510221418-b069d509885c
golang.org/x/sys v0.0.0-20200509044756-6aff5f38e54f // indirect
gopkg.in/ini.v1 v1.56.0 // indirect
mellium.im/sasl v0.2.1 // indirect
)
This diff is collapsed.
......@@ -23,13 +23,13 @@ type Database interface {
// Insert or Update a User into the database
UpsertUser(user *User) error
// Fetch a User from the database by ID
GetUser(id []byte) (*User, error)
GetUser(id *id.ID) (*User, error)
// Fetch a User from the database by Value
GetUserByValue(value string) (*User, error)
// Fetch a User from the database by KeyId
GetUserByKeyId(keyId string) (*User, error)
//Delete a user
DeleteUser(id []byte) error
DeleteUser(id *id.ID) error
}
// Struct representing the udb_users table in the database
......@@ -52,7 +52,7 @@ type User struct {
// Initialize a new User object
func NewUser() *User {
return &User{
Id: make([]byte, 0),
Id: make([]byte, id.ArrIDLen),
Value: "",
ValueType: -1,
KeyId: "",
......@@ -60,8 +60,8 @@ func NewUser() *User {
}
}
func (u *User) SetID(id []byte) {
u.Id = id
func (u *User) SetID(id *id.ID) {
u.Id = id.Marshal()
}
func (u *User) SetValue(val string) {
......@@ -99,7 +99,7 @@ func NewDatabase(username, password, database, address string) Database {
globals.Log.ERROR.Printf("Unable to initalize database backend: %+v", err)
globals.Log.INFO.Println("Using map backend for User Discovery!")
return &MapImpl{
Users: make(map[*id.User]*User),
Users: make(map[*id.ID]*User),
}
}
......
......@@ -11,6 +11,7 @@ package storage
import (
"fmt"
"github.com/pkg/errors"
"gitlab.com/elixxir/primitives/id"
)
// Insert or Update a User into the database
......@@ -34,13 +35,13 @@ func (m *DatabaseImpl) UpsertUser(user *User) error {
}
// Fetch a User from the database
func (m *DatabaseImpl) GetUser(id []byte) (*User, error) {
user := &User{Id: id}
func (m *DatabaseImpl) GetUser(userID *id.ID) (*User, error) {
user := &User{Id: userID.Marshal()}
err := m.db.Select(&user)
if err != nil {
// If there was an error, no user for the given ID was found
return nil, errors.New(fmt.Sprintf("unable to get user with id %v: %+v",
string(id),
userID,
errors.New(err.Error())))
}
// If we found a user for the given ID, return it
......@@ -76,8 +77,8 @@ func (m *DatabaseImpl) GetUserByKeyId(keyId string) (*User, error) {
}
//Delete a User from the database by the userID
func (m *DatabaseImpl) DeleteUser(id []byte) error {
user := &User{Id: id}
func (m *DatabaseImpl) DeleteUser(id *id.ID) error {
user := &User{Id: id.Marshal()}
err := m.db.Delete(user)
if err != nil {
// If there was an error, no user for the given id was found
......
......@@ -12,79 +12,83 @@ import (
"bytes"
"fmt"
"github.com/pkg/errors"
idimport "gitlab.com/elixxir/primitives/id"
"gitlab.com/elixxir/primitives/id"
"strings"
"sync"
)
// Struct implementing the Database Interface with an underlying Map
type MapImpl struct {
Users map[*idimport.User]*User
Users map[*id.ID]*User
lock sync.Mutex
}
// Insert or Update a User into the map backend
func (m *MapImpl) UpsertUser(user *User) error {
m.lock.Lock()
defer m.lock.Unlock()
//Insert or update the user in the map
tempIndex := idimport.NewUserFromBytes(user.Id)
tempIndex, err := id.Unmarshal(user.Id)
if err != nil {
return err
}
m.Users[tempIndex] = user
m.lock.Unlock()
return nil
}
// Fetch a User from the database by ID
func (m *MapImpl) GetUser(id []byte) (*User, error) {
func (m *MapImpl) GetUser(userID *id.ID) (*User, error) {
m.lock.Lock()
defer m.lock.Unlock()
//Iterate through the list of users and find matching values
for _, u := range m.Users {
if bytes.Compare(u.Id, id) == 0 && bytes.Compare(u.Id, make([]byte, 0)) != 0 {
m.lock.Unlock()
if bytes.Compare(u.Id, userID.Bytes()) == 0 && bytes.Compare(u.Id, make([]byte, 0)) != 0 {
return u, nil
}
}
m.lock.Unlock()
return NewUser(), errors.New("Unable to find any user with that ID")
}
// Fetch a User from the database by Value
func (m *MapImpl) GetUserByValue(value string) (*User, error) {
m.lock.Lock()
defer m.lock.Unlock()
for _, u := range m.Users {
if strings.Compare(u.Value, value) == 0 && u.Value != "" {
m.lock.Unlock()
fmt.Println(m)
return u, nil
}
}
m.lock.Unlock()
return NewUser(), errors.New("Unable to find any user with that value")
}
// Fetch a User from the database by KeyId
func (m *MapImpl) GetUserByKeyId(keyId string) (*User, error) {
m.lock.Lock()
defer m.lock.Unlock()
for _, u := range m.Users {
if strings.Compare(u.KeyId, keyId) == 0 && u.KeyId != "" {
m.lock.Unlock()
return u, nil
}
}
m.lock.Unlock()
return NewUser(), errors.New("Unable to find any user with that keyID")
}
//Delete user by user id
func (m *MapImpl) DeleteUser(id []byte) error {
func (m *MapImpl) DeleteUser(userID *id.ID) error {
m.lock.Lock()
delete(m.Users, idimport.NewUserFromBytes(id))
delete(m.Users, userID)
m.lock.Unlock()
return nil
......
......@@ -15,11 +15,11 @@ import (
//Happy path
func TestMap_UpsertUser(t *testing.T) {
m := &MapImpl{
Users: make(map[*id.User]*User),
Users: make(map[*id.ID]*User),
}
usr := NewUser()
usr.Id = make([]byte, 8)
usr.Id = id.NewIdFromUInt(0, id.User, t).Bytes()
err := m.UpsertUser(usr)
......@@ -31,11 +31,11 @@ func TestMap_UpsertUser(t *testing.T) {
//Test that map updates a new user being inserted with same id
func TestMap_UpsertDuplicate(t *testing.T) {
m := &MapImpl{
Users: make(map[*id.User]*User),
Users: make(map[*id.ID]*User),
}
usr := NewUser()
usr.SetID(make([]byte, 8))
usr.SetID(id.NewIdFromString("test", id.Node, t))
_ = m.UpsertUser(usr)
......@@ -44,7 +44,7 @@ func TestMap_UpsertDuplicate(t *testing.T) {
_ = m.UpsertUser(usr2)
observedUser, _ := m.GetUser(usr.Id)
observedUser, _ := m.GetUser(id.NewIdFromBytes(usr.Id, t))
if observedUser.Value != usr.Value {
t.Errorf("Failed to update a user with new information")
......@@ -55,18 +55,18 @@ func TestMap_UpsertDuplicate(t *testing.T) {
//Happy path
func TestMapImpl_GetUser(t *testing.T) {
m := &MapImpl{
Users: make(map[*id.User]*User),
Users: make(map[*id.ID]*User),
}
//Populate the user
usr := NewUser()
usr.SetKeyID("testKeyFP")
usr.SetID(make([]byte, 8))
usr.SetID(id.NewIdFromUInt(0, id.User, t))
usr.SetValue("email@website.com")
usr.SetValueType(1)
_ = m.UpsertUser(usr)
retrievedUser, _ := m.GetUser(usr.Id)
retrievedUser, _ := m.GetUser(id.NewIdFromBytes(usr.Id, t))
if !reflect.DeepEqual(retrievedUser, usr) {
t.Errorf("Failed to retrieve by user ID. Expected to retrieve %+v, recieved: %+v", usr, retrievedUser)
......@@ -87,15 +87,15 @@ func TestMapImpl_GetUser(t *testing.T) {
//Error path: pull a nonexistant user
func TestMapImpl_GetUser_EmptyMap(t *testing.T) {
m := &MapImpl{
Users: make(map[*id.User]*User),
Users: make(map[*id.ID]*User),
}
//Create user, never insert in map
usr := NewUser()
usr.SetID(make([]byte, 8))
usr.SetID(id.NewIdFromUInt(0, id.User, t))
usr.SetValue("email@website.com")
usr.SetKeyID("testKeyFP")
//Search for usr in empty map
retrievedUser, _ := m.GetUser(usr.Id)
retrievedUser, _ := m.GetUser(id.NewIdFromBytes(usr.Id, t))
//Check that no user is obtained from an empty map
if !reflect.DeepEqual(retrievedUser, NewUser()) {
......@@ -119,14 +119,20 @@ func TestMapImpl_GetUser_EmptyMap(t *testing.T) {
//Happy path: Insert and get a user for every user attribute
func TestMapImpl_GetUser_AddAndGet(t *testing.T) {
m := &MapImpl{
Users: make(map[*id.User]*User),
Users: make(map[*id.ID]*User),
}
//Insert user with ID and get user
usrID := NewUser()
usrID.Id = make([]byte, 8)
_ = m.UpsertUser(usrID)
retrievedUser, _ := m.GetUser(usrID.Id)
usrID.Id = id.NewIdFromUInt(0, id.User, t).Bytes()
err := m.UpsertUser(usrID)
if err != nil {
t.Errorf("UpsertUser() generated an unexpeted error: %+v", err)
}
retrievedUser, err := m.GetUser(id.NewIdFromBytes(usrID.Id, t))
if err != nil {
t.Errorf("GetUser() generated an unexpeted error: %+v", err)
}
if !reflect.DeepEqual(retrievedUser, usrID) {
t.Errorf("Inserted and pulled an id. "+
"Should have retrieved: %+v, recieved: %+v", retrievedUser, usrID)
......@@ -135,8 +141,14 @@ func TestMapImpl_GetUser_AddAndGet(t *testing.T) {
//Insert user with val and get user
usrVal := NewUser()
usrVal.Value = "email"
_ = m.UpsertUser(usrVal)
retrievedUser, _ = m.GetUserByValue(usrVal.Value)
err = m.UpsertUser(usrVal)
if err != nil {
t.Errorf("UpsertUser() generated an unexpeted error: %+v", err)
}
retrievedUser, err = m.GetUserByValue(usrVal.Value)
if err != nil {
t.Errorf("GetUserByValue() generated an unexpeted error: %+v", err)
}
if !reflect.DeepEqual(retrievedUser, usrVal) {
t.Errorf("Inserted and pulled a value. "+
"Should have retrieved: %+v, recieved: %+v", retrievedUser, usrVal)
......@@ -145,8 +157,14 @@ func TestMapImpl_GetUser_AddAndGet(t *testing.T) {
//Insert a user with key id and then get user
usrKeyId := NewUser()
usrKeyId.KeyId = "testKeyFP"
_ = m.UpsertUser(usrKeyId)
retrievedUser, _ = m.GetUserByKeyId(usrKeyId.KeyId)
err = m.UpsertUser(usrKeyId)
if err != nil {
t.Errorf("UpsertUser() generated an unexpeted error: %+v", err)
}
retrievedUser, err = m.GetUserByKeyId(usrKeyId.KeyId)
if err != nil {
t.Errorf("GetUserByKeyId() produced unexpected error: %+v", err)
}
if !reflect.DeepEqual(retrievedUser, usrKeyId) {
t.Errorf("Inserted and pulled a keyID. "+
"Should have retrieved: %+v, recieved: %+v", retrievedUser, usrKeyId)
......@@ -157,19 +175,22 @@ func TestMapImpl_GetUser_AddAndGet(t *testing.T) {
//Happy path: Deletes a user from the map backend
func TestMapImpl_DeleteUser(t *testing.T) {
m := &MapImpl{
Users: make(map[*id.User]*User),
Users: make(map[*id.ID]*User),
}
//Insert user with ID and get user
usrID := NewUser()
usrID.Id = []byte{0, 0, 0, 0, 8}
_ = m.UpsertUser(usrID)
err := m.DeleteUser(usrID.Id)
usrID.Id = id.NewIdFromBytes([]byte{0, 0, 0, 0, 8}, t).Bytes()
err := m.UpsertUser(usrID)
if err != nil {
t.Errorf("UpsertUser() generated an unexpeted error: %+v", err)
}
err = m.DeleteUser(id.NewIdFromBytes(usrID.Id, t))
if err != nil {
t.Errorf("Failed to delete map")
}
if m.Users[id.NewUserFromBytes(usrID.Id)] != nil {
if m.Users[id.NewIdFromBytes(usrID.Id, t)] != nil {
t.Errorf("Failed to delete user that was inserted")
}
......
......@@ -10,16 +10,11 @@ import (
jww "github.com/spf13/jwalterweatherman"
"gitlab.com/elixxir/client/api"
"gitlab.com/elixxir/client/globals"
"gitlab.com/elixxir/primitives/id"
"io/ioutil"
"log"
"os"
)
// The User Discovery Bot's user ID and registration code
// (this is global in cMix systems)
var UDB_USERID *id.User = id.NewUserFromUints(&[4]uint64{0, 0, 0, 3})
var Log = jww.NewNotepad(jww.LevelDebug, jww.LevelDebug, os.Stdout,
ioutil.Discard, "CLIENT", log.Ldate|log.Ltime)
var BannedUsernameList BlackList
......
......@@ -25,10 +25,10 @@ type GetKeyListener struct{}
// Register the UDB listeners
func RegisterListeners(cl *api.Client) {
Log.DEBUG.Println("Registering UDB listeners")
cl.Listen(id.ZeroID, int32(cmixproto.Type_UDB_SEARCH), SearchListener{})
cl.Listen(id.ZeroID, int32(cmixproto.Type_UDB_REGISTER), RegisterListener{})
cl.Listen(id.ZeroID, int32(cmixproto.Type_UDB_PUSH_KEY), PushKeyListener{})
cl.Listen(id.ZeroID, int32(cmixproto.Type_UDB_GET_KEY), GetKeyListener{})
cl.Listen(&id.ZeroUser, int32(cmixproto.Type_UDB_SEARCH), SearchListener{})
cl.Listen(&id.ZeroUser, int32(cmixproto.Type_UDB_REGISTER), RegisterListener{})
cl.Listen(&id.ZeroUser, int32(cmixproto.Type_UDB_PUSH_KEY), PushKeyListener{})
cl.Listen(&id.ZeroUser, int32(cmixproto.Type_UDB_GET_KEY), GetKeyListener{})
clientObj = cl
}
......
......@@ -32,7 +32,7 @@ const REGISTER_USAGE = "Usage: 'REGISTER [EMAIL] [email-address] " +
// The user ID is taken from the sender at this time, this will need to change
// when a registrar comes online.
// Registration fails if the KEYID is not already pushed and confirmed.
func Register(userId *id.User, args []string) {
func Register(userId *id.ID, args []string) {
Log.DEBUG.Printf("Register %d: %v", userId, args)
RegErr := func(msg string) {
Send(userId, msg, cmixproto.Type_UDB_REGISTER_RESPONSE)
......@@ -71,7 +71,14 @@ func Register(userId *id.User, args []string) {
return
}
err = storage.UserDiscoveryDb.DeleteUser(retrievedUser.Id)
userID, err := id.Unmarshal(retrievedUser.Id)
if err != nil {
msg := fmt.Sprintf("Could not unmarshal retrieved user ID: %+v", err)
RegErr(msg)
return
}
err = storage.UserDiscoveryDb.DeleteUser(userID)
if err != nil {
RegErr("Could not delete premade user")
......@@ -101,7 +108,7 @@ func Register(userId *id.User, args []string) {
//FIXME: Hardcoded to email value, change later
retrievedUser.SetValueType(0)
retrievedUser.SetID(userId.Bytes())
retrievedUser.SetID(userId)
err = storage.UserDiscoveryDb.UpsertUser(retrievedUser)
if err != nil {
......@@ -125,7 +132,7 @@ const PUSHKEY_USAGE = "Usage: 'PUSHKEY [temp-key-id] " +
// - KEYMAT = The part of the key corresponding to that index, in BASE64
// PushKey returns an ACK that it received the command OR a success/failure
// once it receives all pieces of the key.
func PushKey(userId *id.User, args []string) {
func PushKey(userId *id.ID, args []string) {
Log.DEBUG.Printf("PushKey %d, %v", userId, args)
PushErr := func(msg string) {
Send(userId, msg, cmixproto.Type_UDB_PUSH_KEY_RESPONSE)
......@@ -164,7 +171,7 @@ func PushKey(userId *id.User, args []string) {
usr := storage.NewUser()
usr.SetKey(newKeyBytes)
rng := csprng.NewSystemRNG()
UIDBytes := make([]byte, id.UserLen)
UIDBytes := make([]byte, id.ArrIDLen)
rng.Read(UIDBytes)
usr.Id = UIDBytes
usr.SetKeyID(keyFP)
......@@ -190,7 +197,7 @@ const GETKEY_USAGE = "GETKEY [KEYFP]"
// - KEYFP - The Key Fingerprint
// - KEYMAT - Key material in BASE64 encoding
// It sends these messages until the entire key is transmitted.
func GetKey(userId *id.User, args []string) {
func GetKey(userId *id.ID, args []string) {
Log.DEBUG.Printf("GetKey %d:, %v", userId, args)
GetErr := func(msg string) {
Send(userId, msg, cmixproto.Type_UDB_GET_KEY_RESPONSE)
......
......@@ -15,6 +15,7 @@ import (
"gitlab.com/elixxir/client/cmixproto"
"gitlab.com/elixxir/client/globals"
"gitlab.com/elixxir/client/parse"
"gitlab.com/elixxir/client/user"
"gitlab.com/elixxir/comms/gateway"
"gitlab.com/elixxir/primitives/id"
"gitlab.com/elixxir/primitives/ndf"
......@@ -52,7 +53,7 @@ func TestMain(m *testing.M) {
os.Exit(testMainWrapper(m))
}
func (d DummySender) Send(recipientID *id.User, msg string) error {
func (d DummySender) Send(recipientID *id.ID, msg string) error {
// do nothing
jww.INFO.Printf("DummySender!")
return nil
......@@ -63,7 +64,7 @@ func dummyConnectionStatusHandler(status uint32, timeout int) {
}
// Hack around the interface for client to do what we need for testing.
func NewMessage(msg string, msgType cmixproto.Type, sender *id.User) *parse.Message {
func NewMessage(msg string, msgType cmixproto.Type, sender *id.ID, t *testing.T) *parse.Message {
// Create the message body and assign its type
tmp := parse.TypedBody{
MessageType: int32(msgType),
......@@ -71,8 +72,8 @@ func NewMessage(msg string, msgType cmixproto.Type, sender *id.User) *parse.Mess
}
return &parse.Message{
TypedBody: tmp,
Sender: id.NewUserFromUints(&[4]uint64{0, 0, 0, 4}),
Receiver: id.NewUserFromUints(&[4]uint64{0, 0, 0, 3}),
Sender: id.NewIdFromUInts([4]uint64{0, 0, 0, 4}, id.Node, t),
Receiver: id.NewIdFromUInts([4]uint64{0, 0, 0, 3}, id.Node, t),
}
}
......@@ -96,15 +97,15 @@ func TestRegisterHappyPath(t *testing.T) {
fingerprint,
}
sender := id.NewUserFromUint(5, t)
sender := id.NewIdFromUInt(5, id.User, t)
msg := NewMessage(msgs[0], cmixproto.Type_UDB_PUSH_KEY, sender)
msg := NewMessage(msgs[0], cmixproto.Type_UDB_PUSH_KEY, sender, t)
pl.Hear(msg, false, nil)
time.Sleep(50 * time.Millisecond)
msg = NewMessage(msgs[1], cmixproto.Type_UDB_REGISTER, sender)
msg = NewMessage(msgs[1], cmixproto.Type_UDB_REGISTER, sender, t)
rl.Hear(msg, false, nil)
time.Sleep(50 * time.Millisecond)
msg = NewMessage(msgs[2], cmixproto.Type_UDB_GET_KEY, sender)
msg = NewMessage(msgs[2], cmixproto.Type_UDB_GET_KEY, sender, t)
gl.Hear(msg, false, nil)
// Assert expected state
......@@ -162,15 +163,15 @@ func TestRegisterBlacklist(t *testing.T) {
}
BannedUsernameList = *InitBlackList("./blacklists/bannedNames.txt")
sender := id.NewUserFromUint(5, t)
sender := id.NewIdFromUInt(5, id.User, t)
msg := NewMessage(msgs[0], cmixproto.Type_UDB_PUSH_KEY, sender)
msg := NewMessage(msgs[0], cmixproto.Type_UDB_PUSH_KEY, sender, t)
pl.Hear(msg, false)
time.Sleep(50 * time.Millisecond)
msg = NewMessage(msgs[1], cmixproto.Type_UDB_REGISTER, sender)
msg = NewMessage(msgs[1], cmixproto.Type_UDB_REGISTER, sender, t)
rl.Hear(msg, false)
time.Sleep(50 * time.Millisecond)
msg = NewMessage(msgs[2], cmixproto.Type_UDB_GET_KEY, sender)
msg = NewMessage(msgs[2], cmixproto.Type_UDB_GET_KEY, sender, t)
gl.Hear(msg, false)
time.Sleep(1 * time.Second)
......@@ -189,13 +190,13 @@ func TestIncorrectKeyFP(t *testing.T) {
fingerprint,
}
sender := id.NewUserFromUint(9, t)
sender := id.NewIdFromUInt(9, id.User, t)
msg := NewMessage(msgs[0], cmixproto.Type_UDB_PUSH_KEY, sender)
msg := NewMessage(msgs[0], cmixproto.Type_UDB_PUSH_KEY, sender, t)
pl.Hear(msg, false, nil)
msg = NewMessage(msgs[1], cmixproto.Type_UDB_REGISTER, sender)
msg = NewMessage(msgs[1], cmixproto.Type_UDB_REGISTER, sender, t)
rl.Hear(msg, false, nil)
msg = NewMessage(msgs[2], cmixproto.Type_UDB_GET_KEY, sender)
msg = NewMessage(msgs[2], cmixproto.Type_UDB_GET_KEY, sender, t)
gl.Hear(msg, false, nil)
time.Sleep(1 * time.Second)
......@@ -215,13 +216,13 @@ func TestIncorrectValueType(t *testing.T) {
fingerprint,
}
sender := id.NewUserFromUint(22, t)
sender := id.NewIdFromUInt(22, id.User, t)
msg := NewMessage(msgs[0], cmixproto.Type_UDB_PUSH_KEY, sender)
msg := NewMessage(msgs[0], cmixproto.Type_UDB_PUSH_KEY, sender, t)
pl.Hear(msg, false, nil)
msg = NewMessage(msgs[1], cmixproto.Type_UDB_REGISTER, sender)
msg = NewMessage(msgs[1], cmixproto.Type_UDB_REGISTER, sender, t)
rl.Hear(msg, false, nil)
msg = NewMessage(msgs[2], cmixproto.Type_UDB_GET_KEY, sender)
msg = NewMessage(msgs[2], cmixproto.Type_UDB_GET_KEY, sender, t)
gl.Hear(msg, false, nil)
time.Sleep(10 * time.Second)
......@@ -239,13 +240,13 @@ func TestInvalidRegistrationCommands(t *testing.T) {
"vcD8M=",
}
sender := id.NewUserFromUint(33, t)
sender := id.NewIdFromUInt(33, id.User, t)
msg := NewMessage(msgs[0], cmixproto.Type_UDB_PUSH_KEY, sender)
msg := NewMessage(msgs[0], cmixproto.Type_UDB_PUSH_KEY, sender, t)
pl.Hear(msg, false, nil)
for i := 1; i < len(msgs); i++ {
msg = NewMessage(msgs[i], cmixproto.Type_UDB_REGISTER, sender)
msg = NewMessage(msgs[i], cmixproto.Type_UDB_REGISTER, sender, t)
rl.Hear(msg, false, nil)
_, err := storage.UserDiscoveryDb.GetUserByKeyId("8oKh7TYG4KxQcBAymoXPBHSD/uga9pX3Mn/jKh")
if err == nil {
......@@ -253,7 +254,7 @@ func TestInvalidRegistrationCommands(t *testing.T) {
" not exist!")
}
_, err = storage.UserDiscoveryDb.GetUser(id.NewUserFromUint(1, t).Bytes())
_, err = storage.UserDiscoveryDb.GetUser(id.NewIdFromUInt(1, id.User, t))
if err == nil {
t.Errorf("Data store user 1 should not exist!")
}
......@@ -282,20 +283,20 @@ func TestRegister_InvalidGetKeyArgument(t *testing.T) {
//Preregister fingerpritn
sender := id.NewUserFromUint(44, t)
sender := id.NewIdFromUInt(44, id.User, t)
msg := NewMessage(msgs[0], cmixproto.Type_UDB_PUSH_KEY, sender)
msg := NewMessage(msgs[0], cmixproto.Type_UDB_PUSH_KEY, sender, t)
pl.Hear(msg, false, nil)
msg = NewMessage(msgs[1], cmixproto.Type_UDB_REGISTER, sender)
msg = NewMessage(msgs[1], cmixproto.Type_UDB_REGISTER, sender, t)
rl.Hear(msg, false, nil)
msg = NewMessage(msgs[2], cmixproto.Type_UDB_GET_KEY, sender)
msg = NewMessage(msgs[2], cmixproto.Type_UDB_GET_KEY, sender, t)
gl.Hear(msg, false, nil)
time.Sleep(10 * time.Second)
}
func TestRegisterListeners(t *testing.T) {
fmt.Printf("def: %+v\n", def)
// Initialize client with ram storage
client, err := api.NewClient(&globals.RamStorage{}, "", "", def)
if err != nil {
......@@ -313,9 +314,8 @@ func TestRegisterListeners(t *testing.T) {
t.Errorf("GenerateKeys failed: %s", err.Error())
}
udbID := id.NewUserFromUints(&[4]uint64{0, 0, 0, 3})
// Register with UDB registration code
_, err = client.RegisterWithPermissioning(true, udbID.RegistrationCode())
_, err = client.RegisterWithPermissioning(true, user.RegistrationCode(&id.UDB))
if err != nil {
t.Errorf("Register failed: %s", err.Error())
}
......@@ -334,10 +334,12 @@ func TestRegisterListeners(t *testing.T) {
t.Errorf("Start message reciever encountered an issue: %+v", err)
}
fmt.Printf("GW: %+v\n", client.GetNDF().Gateways)
err = client.StartMessageReceiver(startMessageRecieverHandler)
if err != nil {
t.Errorf("Could not start message reciever: %v", err)
t.Errorf("Could not start message reciever: %+v", err)
}
err = client.Logout(time.Second)
......@@ -363,17 +365,20 @@ func testMainWrapper(m *testing.M) int {
for i := 0; i < NumGWs; i++ {
gw := ndf.Gateway{
ID: id.TempGateway.Bytes(),
Address: fmtAddress(GWsStartPort + i + rndPort),
}
def.Gateways = append(def.Gateways, gw)
GWComms[i] = gateway.StartGateway("tmp", gw.Address,
gwID := id.NewIdFromString("tmp", id.Gateway, m)
GWComms[i] = gateway.StartGateway(gwID, gw.Address,
gateway.NewImplementation(), nil, nil)
}
for i := 0; i < NumNodes; i++ {
nIdBytes := make([]byte, id.NodeIdLen)
nIdBytes := make([]byte, id.ArrIDLen)
nIdBytes[0] = byte(i)
n := ndf.Node{
ID: nIdBytes,
......
......@@ -23,7 +23,7 @@ const SEARCH_USAGE = "Usage: 'SEARCH [EMAIL] [email-address]'"
// - TYPE = EMAIL
// - VALUE = "rick@elixxir.io"
// It returns a list of fingerprints if found (1 per message), or NOTFOUND
func Search(userId *id.User, args []string) {
func Search(userId *id.ID, args []string) {
Log.INFO.Printf("Search %d: %v", userId, args)
SearchErr := func(msg string) {
Send(userId, msg, cmixproto.Type_UDB_SEARCH_RESPONSE)
......
......@@ -26,9 +26,9 @@ func TestSearchHappyPath(t *testing.T) {
}
fmt.Println(storage.UserDiscoveryDb)
sender := id.NewUserFromUint(89, t)
sender := id.NewIdFromUInt(89, id.User, t)
msg := NewMessage(msgs[0], cmixproto.Type_UDB_SEARCH, sender)
msg := NewMessage(msgs[0], cmixproto.Type_UDB_SEARCH, sender, t)
sl.Hear(msg, false)
}
......@@ -42,8 +42,8 @@ func TestSearch_InvalidArgs(t *testing.T) {
msgs := []string{
"EMAIL rick@elixxir.io",
}
sender := id.NewUserFromUint(122, t)
msg := NewMessage(msgs[0], cmixproto.Type_UDB_SEARCH, sender)
sender := id.NewIdFromUInt(122, id.User, t)
msg := NewMessage(msgs[0], cmixproto.Type_UDB_SEARCH, sender, t)
sl.Hear(msg, false)
}
......@@ -59,9 +59,9 @@ func TestSearch_InvalidArgs_Email(t *testing.T) {
"NotEMAIL rick@elixxir.io",
}
sender := id.NewUserFromUint(43, t)
sender := id.NewIdFromUInt(43, id.User, t)
msg := NewMessage(msgs[0], cmixproto.Type_UDB_SEARCH, sender)
msg := NewMessage(msgs[0], cmixproto.Type_UDB_SEARCH, sender, t)
sl.Hear(msg, false)
}
......@@ -74,8 +74,8 @@ func TestSearch_Invalid_Type(t *testing.T) {
"SEARCH INVALID test",
"GETKEY " + fingerprint,
}
sender := id.NewUserFromUint(222, t)
msg := NewMessage(msgs[0], cmixproto.Type_UDB_SEARCH, sender)
sender := id.NewIdFromUInt(222, id.User, t)
msg := NewMessage(msgs[0], cmixproto.Type_UDB_SEARCH, sender, t)
sl.Hear(msg, false)
}
......@@ -85,7 +85,7 @@ func TestSearch_Invalid_User(t *testing.T) {
msgs := []string{
"SEARCH EMAIL cat@elixxir.io",
}
sender := id.NewUserFromUint(9000, t)
msg := NewMessage(msgs[0], cmixproto.Type_UDB_SEARCH, sender)
sender := id.NewIdFromUInt(9000, id.User, t)
msg := NewMessage(msgs[0], cmixproto.Type_UDB_SEARCH, sender, t)
sl.Hear(msg, false)
}
......@@ -17,17 +17,17 @@ import (
// Sender interface -- the api is broken here (does not return the error), so
// we reimplement a new interface...
type Sender interface {
Send(recipientID *id.User, msg string) error
Send(recipientID *id.ID, msg string) error
}
// ApiSender calls the api send function
type APISender struct{}
// Send calls the api send function
func (a APISender) Send(recipientID *id.User, msg string) error {
func (a APISender) Send(recipientID *id.ID, msg string) error {
return clientObj.Send(api.APIMessage{
Payload: []byte(msg),
SenderID: UDB_USERID,
SenderID: &id.UDB,
RecipientID: recipientID,
})
}
......@@ -36,7 +36,7 @@ func (a APISender) Send(recipientID *id.User, msg string) error {
var UdbSender Sender = APISender{}
// Wrap the API Send function (useful for mock tests)
func Send(recipientID *id.User, msg string, msgType cmixproto.Type) {
func Send(recipientID *id.ID, msg string, msgType cmixproto.Type) {
// Create the message body and assign its type
message := string(parse.Pack(&parse.TypedBody{
MessageType: int32(msgType),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment