From 59e509d3e3cb47ae097dab4fecfa597d317348e4 Mon Sep 17 00:00:00 2001 From: woodser <13068859+woodser@users.noreply.github.com> Date: Thu, 19 Jun 2025 16:05:24 -0400 Subject: [PATCH] support swish payment account over grpc api --- .../core/api/model/PaymentAccountForm.java | 3 ++- .../haveno/core/payment/PaymentAccount.java | 4 +++- .../haveno/core/payment/SwishAccount.java | 23 ++++++++++++++++++- .../core/payment/payload/PaymentMethod.java | 3 ++- proto/src/main/proto/pb.proto | 1 + 5 files changed, 30 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/haveno/core/api/model/PaymentAccountForm.java b/core/src/main/java/haveno/core/api/model/PaymentAccountForm.java index d13a9b4300..bd23e18ee7 100644 --- a/core/src/main/java/haveno/core/api/model/PaymentAccountForm.java +++ b/core/src/main/java/haveno/core/api/model/PaymentAccountForm.java @@ -80,7 +80,8 @@ public final class PaymentAccountForm implements PersistablePayload { VENMO, PAYSAFE, WECHAT_PAY, - ALI_PAY; + ALI_PAY, + SWISH; public static PaymentAccountForm.FormId fromProto(protobuf.PaymentAccountForm.FormId formId) { return ProtoUtil.enumFromProto(PaymentAccountForm.FormId.class, formId.name()); diff --git a/core/src/main/java/haveno/core/payment/PaymentAccount.java b/core/src/main/java/haveno/core/payment/PaymentAccount.java index 14dd88482b..61a332336d 100644 --- a/core/src/main/java/haveno/core/payment/PaymentAccount.java +++ b/core/src/main/java/haveno/core/payment/PaymentAccount.java @@ -755,7 +755,9 @@ public abstract class PaymentAccount implements PersistablePayload { field.setLabel(Res.get("payment.swift.swiftCode.intermediary")); break; case MOBILE_NR: - throw new IllegalArgumentException("Not implemented"); + field.setComponent(PaymentAccountFormField.Component.TEXT); + field.setLabel(Res.get("payment.mobile")); + break; case NATIONAL_ACCOUNT_ID: throw new IllegalArgumentException("Not implemented"); case PAYID: diff --git a/core/src/main/java/haveno/core/payment/SwishAccount.java b/core/src/main/java/haveno/core/payment/SwishAccount.java index a726a9a14a..eb2e10de87 100644 --- a/core/src/main/java/haveno/core/payment/SwishAccount.java +++ b/core/src/main/java/haveno/core/payment/SwishAccount.java @@ -17,12 +17,14 @@ package haveno.core.payment; +import haveno.core.api.model.PaymentAccountForm; import haveno.core.api.model.PaymentAccountFormField; import haveno.core.locale.TraditionalCurrency; import haveno.core.locale.TradeCurrency; import haveno.core.payment.payload.PaymentAccountPayload; import haveno.core.payment.payload.PaymentMethod; import haveno.core.payment.payload.SwishAccountPayload; +import haveno.core.payment.validation.SwishValidator; import lombok.EqualsAndHashCode; import lombok.NonNull; @@ -33,6 +35,13 @@ public final class SwishAccount extends PaymentAccount { public static final List SUPPORTED_CURRENCIES = List.of(new TraditionalCurrency("SEK")); + private static final List INPUT_FIELD_IDS = List.of( + PaymentAccountFormField.FieldId.ACCOUNT_NAME, + PaymentAccountFormField.FieldId.MOBILE_NR, + PaymentAccountFormField.FieldId.HOLDER_NAME, + PaymentAccountFormField.FieldId.SALT + ); + public SwishAccount() { super(PaymentMethod.SWISH); setSingleTradeCurrency(SUPPORTED_CURRENCIES.get(0)); @@ -50,7 +59,7 @@ public final class SwishAccount extends PaymentAccount { @Override public @NonNull List getInputFieldIds() { - throw new RuntimeException("Not implemented"); + return INPUT_FIELD_IDS; } public void setMobileNr(String mobileNr) { @@ -68,4 +77,16 @@ public final class SwishAccount extends PaymentAccount { public String getHolderName() { return ((SwishAccountPayload) paymentAccountPayload).getHolderName(); } + + @Override + public void validateFormField(PaymentAccountForm form, PaymentAccountFormField.FieldId fieldId, String value) { + switch (fieldId) { + case MOBILE_NR: + processValidationResult(new SwishValidator().validate(value)); + break; + default: + super.validateFormField(form, fieldId, value); + break; + } + } } diff --git a/core/src/main/java/haveno/core/payment/payload/PaymentMethod.java b/core/src/main/java/haveno/core/payment/payload/PaymentMethod.java index d4a67ef9e1..d3c05d5d48 100644 --- a/core/src/main/java/haveno/core/payment/payload/PaymentMethod.java +++ b/core/src/main/java/haveno/core/payment/payload/PaymentMethod.java @@ -371,7 +371,8 @@ public final class PaymentMethod implements PersistablePayload, Comparable paymentMethodIds.contains(paymentMethod.getId())).collect(Collectors.toList()); } diff --git a/proto/src/main/proto/pb.proto b/proto/src/main/proto/pb.proto index 94ffb0447e..2df4245b71 100644 --- a/proto/src/main/proto/pb.proto +++ b/proto/src/main/proto/pb.proto @@ -1905,6 +1905,7 @@ message PaymentAccountForm { PAYSAFE = 19; WECHAT_PAY = 20; ALI_PAY = 21; + SWISH = 22; } FormId id = 1; repeated PaymentAccountFormField fields = 2;