diff --git a/bindings/ud.go b/bindings/ud.go index 89ae1d9dbb47d3f0faa515812d9ee507d255659b..8170f87bfd8f154e2733a3f13b26ea6280ed00b9 100644 --- a/bindings/ud.go +++ b/bindings/ud.go @@ -105,6 +105,29 @@ type UdNetworkStatus interface { // Manager functions // //////////////////////////////////////////////////////////////////////////////// +// IsRegisteredWithUD is a function which checks the internal state +// files to determine if a user has registered with UD in the past. +// +// Parameters: +// - e2eID - REQUIRED. The tracked e2e object ID. This can be retrieved using [E2e.GetID]. +// +// Returns: +// - bool - A boolean representing true if the user has been registered with UD already +// or false if it has not been registered already. +// - error - An error should only be returned if the internal tracker failed to retrieve an +// E2e object given the e2eId. If an error was returned, the registration state check +// was not performed properly, and the boolean returned should be ignored. +func IsRegisteredWithUD(e2eId int) (bool, error) { + + // Get user from singleton + user, err := e2eTrackerSingleton.get(e2eId) + if err != nil { + return false, err + } + + return ud.IsRegistered(user.api.GetStorage().GetKV()), nil +} + // NewOrLoadUd loads an existing UserDiscovery from storage or creates a new // UserDiscovery if there is no storage data. Regardless of storage state, // the UserDiscovery object returned will be registered with the diff --git a/ud/manager.go b/ud/manager.go index 75380113f86a7632db15d99b830e47c2e855181b..1f2301050e12503412dadcd9139c27e71cf70934 100644 --- a/ud/manager.go +++ b/ud/manager.go @@ -90,7 +90,7 @@ func NewOrLoad(user udE2e, comms Comms, follower udNetworkStatus, } // If already registered, return - if m.isRegistered() { + if IsRegistered(m.getKv()) { return m, nil } @@ -223,7 +223,7 @@ func (m *Manager) getCmix() udCmix { return m.user.GetCmix() } -// getKv returns a versioned.KV used for isRegistered and setRegistered. +// getKv returns a versioned.KV used for IsRegistered and setRegistered. // This is separated from store operations as store's kv // has a different prefix which breaks backwards compatibility. func (m *Manager) getKv() *versioned.KV { diff --git a/ud/registered.go b/ud/registered.go index 06dba95886e3d92717ae9d8143fbd3ca8bd3189c..77742fc17923e1b0a30c03622db40e797e76ec36 100644 --- a/ud/registered.go +++ b/ud/registered.go @@ -11,10 +11,10 @@ import ( const isRegisteredKey = "isRegisteredKey" const isRegisteredVersion = 0 -// isRegistered loads from storage if the user is registered with user +// IsRegistered loads from storage if the user is registered with user // discovery. -func (m *Manager) isRegistered() bool { - _, err := m.getKv().Get(isRegisteredKey, isRegisteredVersion) +func IsRegistered(kv *versioned.KV) bool { + _, err := kv.Get(isRegisteredKey, isRegisteredVersion) if err != nil { return false }