Skip to content

Commit

Permalink
fix: upsert contact didn't work with accessKeys (#556)
Browse files Browse the repository at this point in the history
* fix: upsert contact didn't work with accessKeys

* fix: tests of upsert based on xpub_hash
chris-4chain authored Apr 22, 2024
1 parent cffc32a commit eb1cf14
Showing 4 changed files with 21 additions and 23 deletions.
4 changes: 2 additions & 2 deletions actions/contacts/upsert.go
Original file line number Diff line number Diff line change
@@ -24,7 +24,7 @@ import (
// @Router /v1/contact/{paymail} [PUT]
// @Security x-auth-xpub
func (a *Action) upsert(c *gin.Context) {
requesterPubKey := c.GetString(auth.ParamXPubKey)
reqXPubID := c.GetString(auth.ParamXPubHashKey)
cPaymail := c.Param("paymail")

var req UpsertContact
@@ -41,7 +41,7 @@ func (a *Action) upsert(c *gin.Context) {
contact, err := a.Services.SpvWalletEngine.UpsertContact(
c.Request.Context(),
req.FullName, cPaymail,
requesterPubKey, req.RequesterPaymail,
reqXPubID, req.RequesterPaymail,
engine.WithMetadatas(req.Metadata))

if err != nil && !errors.Is(err, engine.ErrAddingContactRequest) {
8 changes: 3 additions & 5 deletions engine/action_contact.go
Original file line number Diff line number Diff line change
@@ -7,7 +7,6 @@ import (

"github.com/bitcoin-sv/go-paymail"
"github.com/bitcoin-sv/spv-wallet/engine/datastore"
"github.com/bitcoin-sv/spv-wallet/engine/utils"
)

var (
@@ -18,9 +17,8 @@ var (
ErrContactIncorrectStatus = errors.New("contact is in incorrect status to proceed")
)

func (c *Client) UpsertContact(ctx context.Context, ctcFName, ctcPaymail, requesterXpub, requesterPaymail string, opts ...ModelOps) (*Contact, error) {
reqXPubID := utils.Hash(requesterXpub)
reqPm, err := c.getPaymail(ctx, reqXPubID, requesterPaymail)
func (c *Client) UpsertContact(ctx context.Context, ctcFName, ctcPaymail, requesterXPubID, requesterPaymail string, opts ...ModelOps) (*Contact, error) {
reqPm, err := c.getPaymail(ctx, requesterXPubID, requesterPaymail)
if err != nil {
return nil, err
}
@@ -34,7 +32,7 @@ func (c *Client) UpsertContact(ctx context.Context, ctcFName, ctcPaymail, reques
return nil, fmt.Errorf("requested contact paymail is invalid. Reason: %w", err)
}

contact, err := c.upsertContact(ctx, pmSrvnt, reqXPubID, ctcFName, contactPm, opts...)
contact, err := c.upsertContact(ctx, pmSrvnt, requesterXPubID, ctcFName, contactPm, opts...)
if err != nil {
return nil, err
}
30 changes: 15 additions & 15 deletions engine/contact_service_test.go
Original file line number Diff line number Diff line change
@@ -7,12 +7,15 @@ import (
"testing"

"github.com/bitcoin-sv/go-paymail"
"github.com/bitcoin-sv/spv-wallet/engine/utils"
"github.com/jarcoal/httpmock"
"github.com/stretchr/testify/require"
)

const cs_xpub = "xpub661MyMwAqRbcGFL3kTp9Y2fNccswbtC6gceUtkAfo2gn6k49BQbXqxmL1zqKe1MGLrx24S2a5FmK3G8hXtyk8wQS2VRyMNBG14NuxBHhevX"

var cs_xpubHash = utils.Hash(cs_xpub)

func Test_ClientService_UpsertContact(t *testing.T) {
t.Run("insert contact", func(t *testing.T) {
// given
@@ -35,13 +38,12 @@ func Test_ClientService_UpsertContact(t *testing.T) {
require.NoError(t, err)

// when
res, err := client.UpsertContact(ctx, "Bran Stark", paymailAddr, cs_xpub, "", client.DefaultModelOptions()...)
res, err := client.UpsertContact(ctx, "Bran Stark", paymailAddr, cs_xpubHash, "", client.DefaultModelOptions()...)

// then
require.NoError(t, err)
require.NotNil(t, res)
require.Equal(t, ContactNotConfirmed, res.Status)

})

t.Run("insert contact - no xpub", func(t *testing.T) {
@@ -50,12 +52,11 @@ func Test_ClientService_UpsertContact(t *testing.T) {
defer cleanup()

// when
res, err := client.UpsertContact(ctx, "Bran Stark", "bran_the_broken@winterfell.com", cs_xpub, "", client.DefaultModelOptions()...)
res, err := client.UpsertContact(ctx, "Bran Stark", "bran_the_broken@winterfell.com", cs_xpubHash, "", client.DefaultModelOptions()...)

// then
require.ErrorIs(t, err, ErrInvalidRequesterXpub)
require.Nil(t, res)

})

t.Run("insert contact - contact's server doesn't support PIKE", func(t *testing.T) {
@@ -78,7 +79,7 @@ func Test_ClientService_UpsertContact(t *testing.T) {
require.NoError(t, err)

// when
res, err := client.UpsertContact(ctx, "Bran Stark", paymailAddr, cs_xpub, "lady_stoneheart@winterfell.com", client.DefaultModelOptions()...)
res, err := client.UpsertContact(ctx, "Bran Stark", paymailAddr, cs_xpubHash, "lady_stoneheart@winterfell.com", client.DefaultModelOptions()...)

// then
require.ErrorIs(t, err, ErrAddingContactRequest)
@@ -107,7 +108,7 @@ func Test_ClientService_UpsertContact(t *testing.T) {
_, err = client.NewPaymailAddress(ctx, cs_xpub, "lady_stoneheart@winterfell.com", "Catelyn Stark", "", client.DefaultModelOptions()...)
require.NoError(t, err)

contact, err := client.UpsertContact(ctx, "Bran Stark", paymailAddr, cs_xpub, "", client.DefaultModelOptions()...)
contact, err := client.UpsertContact(ctx, "Bran Stark", paymailAddr, cs_xpubHash, "", client.DefaultModelOptions()...)
require.NoError(t, err)
require.NotNil(t, contact)

@@ -117,7 +118,7 @@ func Test_ClientService_UpsertContact(t *testing.T) {
require.NoError(t, err)

// when
updatedContact, err := client.UpsertContact(ctx, updatedFullname, paymailAddr, cs_xpub, "", client.DefaultModelOptions()...)
updatedContact, err := client.UpsertContact(ctx, updatedFullname, paymailAddr, cs_xpubHash, "", client.DefaultModelOptions()...)

// then
require.NoError(t, err)
@@ -128,7 +129,6 @@ func Test_ClientService_UpsertContact(t *testing.T) {

// status shouldn't change
require.Equal(t, ContactConfirmed, updatedContact.Status)

})

t.Run("update contact - PKI has changed", func(t *testing.T) {
@@ -153,7 +153,7 @@ func Test_ClientService_UpsertContact(t *testing.T) {
_, err = client.NewPaymailAddress(ctx, cs_xpub, "lady_stoneheart@winterfell.com", "Catelyn Stark", "", client.DefaultModelOptions()...)
require.NoError(t, err)

contact, err := client.UpsertContact(ctx, "Bran Stark", paymailAddr, cs_xpub, "", client.DefaultModelOptions()...)
contact, err := client.UpsertContact(ctx, "Bran Stark", paymailAddr, cs_xpubHash, "", client.DefaultModelOptions()...)
require.NoError(t, err)
require.NotNil(t, contact)

@@ -166,7 +166,7 @@ func Test_ClientService_UpsertContact(t *testing.T) {
// change PKI
pt.mockPki(paymailAddr, updatedPki)

updatedContact, err := client.UpsertContact(ctx, updatedFullname, paymailAddr, cs_xpub, "lady_stoneheart@winterfell.com", client.DefaultModelOptions()...)
updatedContact, err := client.UpsertContact(ctx, updatedFullname, paymailAddr, cs_xpubHash, "lady_stoneheart@winterfell.com", client.DefaultModelOptions()...)

// then
require.NoError(t, err)
@@ -202,7 +202,7 @@ func TestClientService_AddContactRequest(t *testing.T) {
require.NoError(t, err)

// when
res, err := client.AddContactRequest(ctx, "Sansa Stark", paymailAddr, cs_xpub, client.DefaultModelOptions()...)
res, err := client.AddContactRequest(ctx, "Sansa Stark", paymailAddr, cs_xpubHash, client.DefaultModelOptions()...)

// then
require.NoError(t, err)
@@ -230,7 +230,7 @@ func TestClientService_AddContactRequest(t *testing.T) {
_, err = client.NewPaymailAddress(ctx, cs_xpub, "lady_stoneheart@winterfell.com", "Catelyn Stark", "", client.DefaultModelOptions()...)
require.NoError(t, err)

contact, err := client.AddContactRequest(ctx, "Sansa Stark", paymailAddr, cs_xpub, client.DefaultModelOptions()...)
contact, err := client.AddContactRequest(ctx, "Sansa Stark", paymailAddr, cs_xpubHash, client.DefaultModelOptions()...)
require.NoError(t, err)
require.NotNil(t, contact)

@@ -240,7 +240,7 @@ func TestClientService_AddContactRequest(t *testing.T) {
require.NoError(t, err)

// when
updatedContact, err := client.AddContactRequest(ctx, "Alayne Stone", paymailAddr, cs_xpub, client.DefaultModelOptions()...)
updatedContact, err := client.AddContactRequest(ctx, "Alayne Stone", paymailAddr, cs_xpubHash, client.DefaultModelOptions()...)

// then
require.NoError(t, err)
@@ -272,7 +272,7 @@ func TestClientService_AddContactRequest(t *testing.T) {
_, err = client.NewPaymailAddress(ctx, cs_xpub, "lady_stoneheart@winterfell.com", "Catelyn Stark", "", client.DefaultModelOptions()...)
require.NoError(t, err)

contact, err := client.AddContactRequest(ctx, "Sansa Stark", paymailAddr, cs_xpub, client.DefaultModelOptions()...)
contact, err := client.AddContactRequest(ctx, "Sansa Stark", paymailAddr, cs_xpubHash, client.DefaultModelOptions()...)
require.NoError(t, err)
require.NotNil(t, contact)

@@ -285,7 +285,7 @@ func TestClientService_AddContactRequest(t *testing.T) {
// change PKI
pt.mockPki(paymailAddr, updatedPki)

updatedContact, err := client.AddContactRequest(ctx, "Alayne Stone", paymailAddr, cs_xpub, client.DefaultModelOptions()...)
updatedContact, err := client.AddContactRequest(ctx, "Alayne Stone", paymailAddr, cs_xpubHash, client.DefaultModelOptions()...)

// then
require.NoError(t, err)
2 changes: 1 addition & 1 deletion engine/interface.go
Original file line number Diff line number Diff line change
@@ -58,7 +58,7 @@ type ClientService interface {
}

type ContactService interface {
UpsertContact(ctx context.Context, fullName, paymailAdress, requesterPubKey, requesterPaymail string, opts ...ModelOps) (*Contact, error)
UpsertContact(ctx context.Context, fullName, paymailAdress, requesterXPubID, requesterPaymail string, opts ...ModelOps) (*Contact, error)
AddContactRequest(ctx context.Context, fullName, paymailAdress, requesterXPubID string, opts ...ModelOps) (*Contact, error)

AcceptContact(ctx context.Context, xPubID, paymail string) error

0 comments on commit eb1cf14

Please sign in to comment.