Skip to content

Commit ae85cfa

Browse files
committed
Add a test endpoint that includes domain verification
1 parent 79c2403 commit ae85cfa

File tree

3 files changed

+74
-70
lines changed

3 files changed

+74
-70
lines changed

pkg/code/server/web/paymentrequest/client.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,22 @@ import (
1111
messagingpb "github.com/code-payments/code-protobuf-api/generated/go/messaging/v1"
1212
micropaymentpb "github.com/code-payments/code-protobuf-api/generated/go/micropayment/v1"
1313

14-
"github.com/code-payments/code-server/pkg/pointer"
1514
"github.com/code-payments/code-server/pkg/code/common"
15+
"github.com/code-payments/code-server/pkg/pointer"
1616
)
1717

1818
const (
1919
testWebhookEndpoint = "https://api.getcode.com/v1/testWebhook"
2020
)
2121

22-
func (s *Server) createTrustedPaymentRequest(ctx context.Context, paymentRequest *trustedPaymentRequest) (err error) {
22+
func (s *Server) createTestGetcodeTrustedPaymentRequest(ctx context.Context, paymentRequest *trustedPaymentRequest) (err error) {
2323
rendezvousKey := paymentRequest.GetPrivateRendezvousKey()
2424

2525
sendMessageReq := &messagingpb.SendMessageRequest{
2626
RendezvousKey: &messagingpb.RendezvousKey{
2727
Value: rendezvousKey.PublicKey().ToBytes(),
2828
},
29-
Message: paymentRequest.ToProtoMessage(),
29+
Message: paymentRequest.ToProtoMessageWithVerifidDomain(pointer.String("app.getcode.com"), s.getcodeDomainVerifier),
3030
}
3131

3232
// This is obviously the worst part about a trusted payment request. Server can

pkg/code/server/web/paymentrequest/model.go

Lines changed: 51 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/pkg/errors"
1313
"google.golang.org/protobuf/proto"
1414

15+
commonpb "github.com/code-payments/code-protobuf-api/generated/go/common/v1"
1516
messagingpb "github.com/code-payments/code-protobuf-api/generated/go/messaging/v1"
1617
transactionpb "github.com/code-payments/code-protobuf-api/generated/go/transaction/v2"
1718

@@ -121,12 +122,56 @@ func (r *trustedPaymentRequest) ToKikCodePayload() *kikcode.Payload {
121122
return r.kikCodePayload
122123
}
123124

124-
func (r *trustedPaymentRequest) ToProtoMessage() *messagingpb.Message {
125-
return getRequestToReceiveBillMessage(
126-
r.currency,
127-
r.nativeAmount,
128-
r.destination,
129-
)
125+
func (r *trustedPaymentRequest) ToProtoMessageWithVerifidDomain(domain *string, domainVerifier *common.Account) *messagingpb.Message {
126+
var msg *messagingpb.RequestToReceiveBill
127+
if r.currency == currency_lib.KIN {
128+
quarks := kin.ToQuarks(uint64(r.nativeAmount))
129+
if int(100.0*r.nativeAmount)%100.0 != 0 {
130+
quarks += kin.ToQuarks(1)
131+
}
132+
133+
msg = &messagingpb.RequestToReceiveBill{
134+
ExchangeData: &messagingpb.RequestToReceiveBill_Exact{
135+
Exact: &transactionpb.ExchangeData{
136+
Currency: string(r.currency),
137+
ExchangeRate: 1.0,
138+
NativeAmount: r.nativeAmount,
139+
Quarks: quarks,
140+
},
141+
},
142+
}
143+
} else {
144+
msg = &messagingpb.RequestToReceiveBill{
145+
ExchangeData: &messagingpb.RequestToReceiveBill_Partial{
146+
Partial: &transactionpb.ExchangeDataWithoutRate{
147+
Currency: string(r.currency),
148+
NativeAmount: r.nativeAmount,
149+
},
150+
},
151+
}
152+
}
153+
154+
msg.RequestorAccount = r.destination.ToProto()
155+
156+
if domain != nil {
157+
msg.Domain = &commonpb.Domain{
158+
Value: *domain,
159+
}
160+
161+
if domainVerifier != nil {
162+
msg.Verifier = domainVerifier.ToProto()
163+
msg.RendezvousKey = &messagingpb.RendezvousKey{
164+
Value: r.privateRendezvousKey.ToProto().Value,
165+
}
166+
msg.Signature, _ = signProtoMessage(msg, domainVerifier)
167+
}
168+
}
169+
170+
return &messagingpb.Message{
171+
Kind: &messagingpb.Message_RequestToReceiveBill{
172+
RequestToReceiveBill: msg,
173+
},
174+
}
130175
}
131176

132177
func (r *trustedPaymentRequest) GetIdempotencyKey() kikcode.IdempotencyKey {
@@ -276,46 +321,3 @@ func (r *trustlessPaymentRequest) ToProtoMessage() *messagingpb.Message {
276321
},
277322
}
278323
}
279-
280-
func getRequestToReceiveBillMessage(
281-
currency currency_lib.Code,
282-
nativeAmount float64,
283-
destination *common.Account,
284-
) *messagingpb.Message {
285-
if currency == currency_lib.KIN {
286-
quarks := kin.ToQuarks(uint64(nativeAmount))
287-
if int(100.0*nativeAmount)%100.0 != 0 {
288-
quarks += kin.ToQuarks(1)
289-
}
290-
291-
return &messagingpb.Message{
292-
Kind: &messagingpb.Message_RequestToReceiveBill{
293-
RequestToReceiveBill: &messagingpb.RequestToReceiveBill{
294-
RequestorAccount: destination.ToProto(),
295-
ExchangeData: &messagingpb.RequestToReceiveBill_Exact{
296-
Exact: &transactionpb.ExchangeData{
297-
Currency: string(currency),
298-
ExchangeRate: 1.0,
299-
NativeAmount: nativeAmount,
300-
Quarks: quarks,
301-
},
302-
},
303-
},
304-
},
305-
}
306-
}
307-
308-
return &messagingpb.Message{
309-
Kind: &messagingpb.Message_RequestToReceiveBill{
310-
RequestToReceiveBill: &messagingpb.RequestToReceiveBill{
311-
RequestorAccount: destination.ToProto(),
312-
ExchangeData: &messagingpb.RequestToReceiveBill_Partial{
313-
Partial: &transactionpb.ExchangeDataWithoutRate{
314-
Currency: string(currency),
315-
NativeAmount: nativeAmount,
316-
},
317-
},
318-
},
319-
},
320-
}
321-
}

pkg/code/server/web/paymentrequest/server.go

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ import (
1919
)
2020

2121
const (
22-
v1PathPrefix = "/v1"
23-
v1CreateIntentPath = v1PathPrefix + "/createIntent"
24-
v1GetStatusPath = v1PathPrefix + "/getStatus"
25-
v1RequestPath = v1PathPrefix + "/request"
26-
v1TestWebhookpath = v1PathPrefix + "/testWebhook"
22+
v1PathPrefix = "/v1"
23+
v1CreateIntentPath = v1PathPrefix + "/createIntent"
24+
v1GetStatusPath = v1PathPrefix + "/getStatus"
25+
v1TestVerifiedDomainRequestPath = v1PathPrefix + "/testVerifiedDomainRequest"
26+
v1TestWebhookpath = v1PathPrefix + "/testWebhook"
2727

2828
intentHeaderName = "x-code-intent"
2929
idempotencyHeaderName = "x-code-idempotency"
@@ -49,16 +49,18 @@ type Assets struct {
4949
}
5050

5151
type Server struct {
52-
log *logrus.Entry
53-
cc *grpc.ClientConn
54-
assets *Assets
52+
log *logrus.Entry
53+
cc *grpc.ClientConn
54+
assets *Assets
55+
getcodeDomainVerifier *common.Account
5556
}
5657

57-
func NewPaymentRequestServer(cc *grpc.ClientConn, assets *Assets) *Server {
58+
func NewPaymentRequestServer(cc *grpc.ClientConn, assets *Assets, getcodeDomainVerifier *common.Account) *Server {
5859
return &Server{
59-
log: logrus.StandardLogger().WithField("type", "paymentrequest/server"),
60-
cc: cc,
61-
assets: assets,
60+
log: logrus.StandardLogger().WithField("type", "paymentrequest/server"),
61+
cc: cc,
62+
assets: assets,
63+
getcodeDomainVerifier: getcodeDomainVerifier,
6264
}
6365
}
6466

@@ -134,7 +136,7 @@ func (s *Server) getStatusHandler(path string) func(w http.ResponseWriter, r *ht
134136
}
135137
}
136138

137-
func (s *Server) requestHandler(path string) func(w http.ResponseWriter, r *http.Request) {
139+
func (s *Server) testVerifiedDomainRequestHandler(path string) func(w http.ResponseWriter, r *http.Request) {
138140
return func(w http.ResponseWriter, r *http.Request) {
139141
log := s.log.WithField("path", path)
140142

@@ -163,7 +165,7 @@ func (s *Server) requestHandler(path string) func(w http.ResponseWriter, r *http
163165

164166
log = log.WithField("intent", intentId.PublicKey().ToBase58())
165167

166-
err = s.createTrustedPaymentRequest(ctx, model)
168+
err = s.createTestGetcodeTrustedPaymentRequest(ctx, model)
167169
if err != nil {
168170
log.WithError(err).Warn("failure creating payment request")
169171
HandleGrpcErrorInWebContext(w, err)
@@ -224,9 +226,9 @@ func (s *Server) testWebhookHandler(path string) func(w http.ResponseWriter, r *
224226

225227
func (s *Server) GetHandlers() map[string]http.HandlerFunc {
226228
return map[string]http.HandlerFunc{
227-
v1CreateIntentPath: s.createIntentHandler(v1CreateIntentPath),
228-
v1GetStatusPath: s.getStatusHandler(v1GetStatusPath),
229-
v1RequestPath: s.requestHandler(v1RequestPath),
230-
v1TestWebhookpath: s.testWebhookHandler(v1TestWebhookpath),
229+
v1CreateIntentPath: s.createIntentHandler(v1CreateIntentPath),
230+
v1GetStatusPath: s.getStatusHandler(v1GetStatusPath),
231+
v1TestVerifiedDomainRequestPath: s.testVerifiedDomainRequestHandler(v1TestVerifiedDomainRequestPath),
232+
v1TestWebhookpath: s.testWebhookHandler(v1TestWebhookpath),
231233
}
232234
}

0 commit comments

Comments
 (0)