Skip to content

Commit 79c2403

Browse files
committed
createIntent web API handler now passes the proto message directly
1 parent 942d232 commit 79c2403

File tree

1 file changed

+25
-38
lines changed
  • pkg/code/server/web/paymentrequest

1 file changed

+25
-38
lines changed

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

Lines changed: 25 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ import (
1515
messagingpb "github.com/code-payments/code-protobuf-api/generated/go/messaging/v1"
1616
transactionpb "github.com/code-payments/code-protobuf-api/generated/go/transaction/v2"
1717

18+
"github.com/code-payments/code-server/pkg/code/common"
19+
"github.com/code-payments/code-server/pkg/code/limit"
1820
currency_lib "github.com/code-payments/code-server/pkg/currency"
1921
"github.com/code-payments/code-server/pkg/kikcode"
2022
"github.com/code-payments/code-server/pkg/kin"
2123
"github.com/code-payments/code-server/pkg/netutil"
2224
"github.com/code-payments/code-server/pkg/solana"
23-
"github.com/code-payments/code-server/pkg/code/common"
24-
"github.com/code-payments/code-server/pkg/code/limit"
2525
)
2626

2727
type trustedPaymentRequest struct {
@@ -138,35 +138,23 @@ func (r *trustedPaymentRequest) GetPrivateRendezvousKey() *common.Account {
138138
}
139139

140140
type trustlessPaymentRequest struct {
141-
currency currency_lib.Code
142-
nativeAmount float64
143-
destination *common.Account
144-
145-
publicRendezvousKey *common.Account
146-
clientSignature solana.Signature // For a messagingpb.RequestToReceiveBill
147-
148-
webhookUrl *string
141+
originalProtoMessage *messagingpb.RequestToReceiveBill
142+
publicRendezvousKey *common.Account
143+
clientSignature solana.Signature // For a messagingpb.RequestToReceiveBill
144+
webhookUrl *string
149145
}
150146

151147
func newTrustlessPaymentRequest(
152-
currency currency_lib.Code,
153-
nativeAmount float64,
154-
destination *common.Account,
155-
148+
originalProtoMessage *messagingpb.RequestToReceiveBill,
156149
publicRendezvousKey *common.Account,
157150
clientSignature solana.Signature,
158-
159151
webhookUrl *string,
160152
) (*trustlessPaymentRequest, error) {
161153
return &trustlessPaymentRequest{
162-
currency: currency,
163-
nativeAmount: nativeAmount,
164-
destination: destination,
165-
166-
publicRendezvousKey: publicRendezvousKey,
167-
clientSignature: clientSignature,
168-
169-
webhookUrl: webhookUrl,
154+
originalProtoMessage: originalProtoMessage,
155+
publicRendezvousKey: publicRendezvousKey,
156+
clientSignature: clientSignature,
157+
webhookUrl: webhookUrl,
170158
}, nil
171159
}
172160

@@ -193,15 +181,15 @@ func newTrustlessPaymentRequestFromHttpContext(r *http.Request) (*trustlessPayme
193181
return nil, errors.New("intent is not a public key")
194182
}
195183

196-
var messageProto messagingpb.RequestToReceiveBill
184+
var protoMesage messagingpb.RequestToReceiveBill
197185
messageBytes, err := base64.RawURLEncoding.DecodeString(httpRequestBody.Message)
198186
if err != nil {
199187
return nil, errors.New("message not valid base64")
200188
}
201-
err = proto.Unmarshal(messageBytes, &messageProto)
189+
err = proto.Unmarshal(messageBytes, &protoMesage)
202190
if err != nil {
203191
return nil, errors.New("message bytes is not a RequestToReceiveBill")
204-
} else if err := messageProto.Validate(); err != nil {
192+
} else if err := protoMesage.Validate(); err != nil {
205193
return nil, errors.Wrap(err, "message failed proto validation")
206194
}
207195

@@ -212,14 +200,14 @@ func newTrustlessPaymentRequestFromHttpContext(r *http.Request) (*trustlessPayme
212200
}
213201
copy(signature[:], decodedSignature)
214202

215-
destination, err := common.NewAccountFromProto(messageProto.RequestorAccount)
203+
_, err = common.NewAccountFromProto(protoMesage.RequestorAccount)
216204
if err != nil {
217205
return nil, errors.New("destination is not a public key")
218206
}
219207

220208
var currency currency_lib.Code
221209
var amount float64
222-
switch typed := messageProto.ExchangeData.(type) {
210+
switch typed := protoMesage.ExchangeData.(type) {
223211
case *messagingpb.RequestToReceiveBill_Exact:
224212
currency = currency_lib.Code(strings.ToLower(typed.Exact.Currency))
225213
amount = float64(kin.FromQuarks(typed.Exact.Quarks)) // Because of minimum bucket sizes
@@ -255,6 +243,9 @@ func newTrustlessPaymentRequestFromHttpContext(r *http.Request) (*trustlessPayme
255243
return nil, errors.Errorf("%s currency has a minimum amount of %.2f", currency, limits.Min)
256244
}
257245

246+
// todo: Validate domain fields with user-friendly error messaging. The
247+
// messaging service will do this for now, and will be translated.
248+
258249
if httpRequestBody.Webhook != nil {
259250
err = netutil.ValidateHttpUrl(*httpRequestBody.Webhook, true, false)
260251
if err != nil {
@@ -263,13 +254,9 @@ func newTrustlessPaymentRequestFromHttpContext(r *http.Request) (*trustlessPayme
263254
}
264255

265256
return newTrustlessPaymentRequest(
266-
currency,
267-
amount,
268-
destination,
269-
257+
&protoMesage,
270258
rendezvousKey,
271259
signature,
272-
273260
httpRequestBody.Webhook,
274261
)
275262
}
@@ -283,11 +270,11 @@ func (r *trustlessPaymentRequest) GetClientSignature() solana.Signature {
283270
}
284271

285272
func (r *trustlessPaymentRequest) ToProtoMessage() *messagingpb.Message {
286-
return getRequestToReceiveBillMessage(
287-
r.currency,
288-
r.nativeAmount,
289-
r.destination,
290-
)
273+
return &messagingpb.Message{
274+
Kind: &messagingpb.Message_RequestToReceiveBill{
275+
RequestToReceiveBill: r.originalProtoMessage,
276+
},
277+
}
291278
}
292279

293280
func getRequestToReceiveBillMessage(

0 commit comments

Comments
 (0)