From ec61a6c78466523e3bca16f134ef1b6239877bcb Mon Sep 17 00:00:00 2001
From: joshemb <josh@elixxir.io>
Date: Wed, 17 Aug 2022 09:53:25 -0700
Subject: [PATCH] Expose ud.IsRegistered to bindings

---
 bindings/ud.go   | 23 +++++++++++++++++++++++
 ud/manager.go    |  4 ++--
 ud/registered.go |  6 +++---
 3 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/bindings/ud.go b/bindings/ud.go
index 89ae1d9db..8170f87bf 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 75380113f..1f2301050 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 06dba9588..77742fc17 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
 	}
-- 
GitLab