diff --git a/internal/identity/manager.go b/internal/identity/manager.go index 7588aa1..88f1801 100644 --- a/internal/identity/manager.go +++ b/internal/identity/manager.go @@ -44,6 +44,10 @@ func NewManager(engine *store.Engine, masterKey [32]byte, prefix string, cooldow } func (m *Manager) Allocate(pubKey [32]byte) (*Identity, error) { + if existing, err := m.GetByPubKey(pubKey); err == nil { + return existing, nil + } + var number string for attempts := 0; attempts < 100; attempts++ { number = GenerateNumber(m.prefix) @@ -141,11 +145,12 @@ func (m *Manager) Exists(number string) bool { func (m *Manager) GetByPubKey(pubKey [32]byte) (*Identity, error) { var found *Identity + var latest int64 err := m.store.Iterate(func(keyHash uint64, payload []byte) bool { ident := m.unmarshalIdentity(payload) - if ident != nil && ident.PubKey == pubKey { + if ident != nil && ident.PubKey == pubKey && ident.CreatedAt > latest { found = ident - return false + latest = ident.CreatedAt } return true }, m.masterKey)