diff --git a/user/echo_test.go b/user/echo_test.go index 6954f0d..4e125a5 100644 --- a/user/echo_test.go +++ b/user/echo_test.go @@ -110,3 +110,22 @@ func TestRequestVerifyEcho(t *testing.T) { t.Logf("result: %+v", result) require.Equal(t, user.StatusOK, result.Status) } + +func testEchoSigchain(t *testing.T, sk *keys.EdX25519Key, name string, clock tsutil.Clock) *keys.Sigchain { + usr, err := user.NewForSigning(sk.ID(), "echo", name) + require.NoError(t, err) + msg, err := usr.Sign(sk) + require.NoError(t, err) + err = user.Verify(msg, usr) + require.NoError(t, err) + + urs := "test://echo/" + name + "/" + sk.ID().String() + "/" + url.QueryEscape(strings.ReplaceAll(msg, "\n", " ")) + sc := keys.NewSigchain(sk.ID()) + stu, err := user.New(sk.ID(), "echo", "alice", urs, sc.LastSeq()+1) + require.NoError(t, err) + st, err := user.NewSigchainStatement(sc, stu, sk, clock.Now()) + require.NoError(t, err) + err = sc.Add(st) + require.NoError(t, err) + return sc +} diff --git a/user/users.go b/user/users.go index 33cc49a..989a1d5 100644 --- a/user/users.go +++ b/user/users.go @@ -398,17 +398,14 @@ func (u *Users) CheckForExisting(ctx context.Context, sc *keys.Sigchain) (keys.I } if usr != nil { logger.Debugf("Checking for existing user %s...", usr.ID()) - q := usr.ID() - results, err := u.Search(ctx, &SearchRequest{Query: q}) + res, err := u.User(ctx, usr.ID()) if err != nil { return "", err } - if len(results) > 0 { - for _, res := range results { - logger.Debugf("Found user %s with %s", usr.ID(), res.KID) - if res.KID != sc.KID() { - return res.KID, nil - } + if res != nil { + logger.Debugf("Found user %s with %s", usr.ID(), res.User.KID) + if res.User.KID != sc.KID() { + return res.User.KID, nil } } } diff --git a/user/users_test.go b/user/users_test.go index ad985e0..ab3224d 100644 --- a/user/users_test.go +++ b/user/users_test.go @@ -148,3 +148,30 @@ func TestSigchainRevokeUpdate(t *testing.T) { require.NotNil(t, result) require.Equal(t, user.StatusOK, result.Status) } + +func TestCheckForExisting(t *testing.T) { + var err error + + clock := tsutil.NewTestClock() + req := request.NewMockRequestor() + ds := docs.NewMem() + scs := keys.NewSigchains(ds) + users := user.NewUsers(ds, scs, user.Requestor(req), user.Clock(clock)) + + sk1 := keys.NewEdX25519KeyFromSeed(testSeed(0x01)) + sc1 := testEchoSigchain(t, sk1, "alice", clock) + kid, err := users.CheckForExisting(context.TODO(), sc1) + require.NoError(t, err) + require.Empty(t, kid) + err = scs.Save(sc1) + require.NoError(t, err) + _, err = users.Update(context.TODO(), sk1.ID()) + require.NoError(t, err) + + sk2 := keys.NewEdX25519KeyFromSeed(testSeed(0x02)) + sc2 := testEchoSigchain(t, sk2, "alice", clock) + kid, err = users.CheckForExisting(context.TODO(), sc2) + require.NoError(t, err) + require.Equal(t, kid, sk1.ID()) + +}