mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-07-27 00:45:23 -04:00
add paysafe payment method
This commit is contained in:
parent
71fab722ee
commit
ae8760d72c
26 changed files with 409 additions and 4 deletions
|
@ -77,7 +77,8 @@ public final class PaymentAccountForm implements PersistablePayload {
|
|||
AUSTRALIA_PAYID,
|
||||
CASH_APP,
|
||||
PAYPAL,
|
||||
VENMO;
|
||||
VENMO,
|
||||
PAYSAFE;
|
||||
|
||||
public static PaymentAccountForm.FormId fromProto(protobuf.PaymentAccountForm.FormId formId) {
|
||||
return ProtoUtil.enumFromProto(PaymentAccountForm.FormId.class, formId.name());
|
||||
|
|
|
@ -136,6 +136,8 @@ public class PaymentAccountFactory {
|
|||
return new CashAppAccount();
|
||||
case PaymentMethod.VENMO_ID:
|
||||
return new VenmoAccount();
|
||||
case PaymentMethod.PAYSAFE_ID:
|
||||
return new PaysafeAccount();
|
||||
|
||||
// Cannot be deleted as it would break old trade history entries
|
||||
case PaymentMethod.OK_PAY_ID:
|
||||
|
|
113
core/src/main/java/haveno/core/payment/PaysafeAccount.java
Normal file
113
core/src/main/java/haveno/core/payment/PaysafeAccount.java
Normal file
|
@ -0,0 +1,113 @@
|
|||
/*
|
||||
* This file is part of Haveno.
|
||||
*
|
||||
* Haveno is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or (at
|
||||
* your option) any later version.
|
||||
*
|
||||
* Haveno is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with Haveno. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package haveno.core.payment;
|
||||
|
||||
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.PaysafeAccountPayload;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public final class PaysafeAccount extends PaymentAccount {
|
||||
|
||||
private static final List<PaymentAccountFormField.FieldId> INPUT_FIELD_IDS = List.of(
|
||||
PaymentAccountFormField.FieldId.ACCOUNT_NAME,
|
||||
PaymentAccountFormField.FieldId.EMAIL,
|
||||
PaymentAccountFormField.FieldId.TRADE_CURRENCIES,
|
||||
PaymentAccountFormField.FieldId.SALT
|
||||
);
|
||||
|
||||
// https://developer.paysafe.com/en/support/reference-information/codes/
|
||||
public static final List<TradeCurrency> SUPPORTED_CURRENCIES = List.of(
|
||||
new TraditionalCurrency("AED"),
|
||||
new TraditionalCurrency("ARS"),
|
||||
new TraditionalCurrency("AUD"),
|
||||
new TraditionalCurrency("BGN"),
|
||||
new TraditionalCurrency("BRL"),
|
||||
new TraditionalCurrency("CAD"),
|
||||
new TraditionalCurrency("CHF"),
|
||||
new TraditionalCurrency("CZK"),
|
||||
new TraditionalCurrency("DKK"),
|
||||
new TraditionalCurrency("EGP"),
|
||||
new TraditionalCurrency("EUR"),
|
||||
new TraditionalCurrency("GBP"),
|
||||
new TraditionalCurrency("GEL"),
|
||||
new TraditionalCurrency("HRK"),
|
||||
new TraditionalCurrency("HUF"),
|
||||
new TraditionalCurrency("ILS"),
|
||||
new TraditionalCurrency("INR"),
|
||||
new TraditionalCurrency("JPY"),
|
||||
new TraditionalCurrency("ISK"),
|
||||
new TraditionalCurrency("KWD"),
|
||||
new TraditionalCurrency("KRW"),
|
||||
new TraditionalCurrency("MXN"),
|
||||
new TraditionalCurrency("NOK"),
|
||||
new TraditionalCurrency("NZD"),
|
||||
new TraditionalCurrency("PEN"),
|
||||
new TraditionalCurrency("PHP"),
|
||||
new TraditionalCurrency("PLN"),
|
||||
new TraditionalCurrency("RON"),
|
||||
new TraditionalCurrency("RSD"),
|
||||
new TraditionalCurrency("RUB"),
|
||||
new TraditionalCurrency("SAR"),
|
||||
new TraditionalCurrency("SEK"),
|
||||
new TraditionalCurrency("TRY"),
|
||||
new TraditionalCurrency("USD"),
|
||||
new TraditionalCurrency("UYU")
|
||||
);
|
||||
|
||||
public PaysafeAccount() {
|
||||
super(PaymentMethod.PAYSAFE);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PaymentAccountPayload createPayload() {
|
||||
return new PaysafeAccountPayload(paymentMethod.getId(), id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull List<TradeCurrency> getSupportedCurrencies() {
|
||||
return SUPPORTED_CURRENCIES;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull List<PaymentAccountFormField.FieldId> getInputFieldIds() {
|
||||
return INPUT_FIELD_IDS;
|
||||
}
|
||||
|
||||
public void setEmail(String accountId) {
|
||||
((PaysafeAccountPayload) paymentAccountPayload).setEmail(accountId);
|
||||
}
|
||||
|
||||
public String getEmail() {
|
||||
return ((PaysafeAccountPayload) paymentAccountPayload).getEmail();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PaymentAccountFormField getEmptyFormField(PaymentAccountFormField.FieldId fieldId) {
|
||||
var field = super.getEmptyFormField(fieldId);
|
||||
if (field.getId() == PaymentAccountFormField.FieldId.TRADE_CURRENCIES) field.setValue("");
|
||||
return field;
|
||||
}
|
||||
}
|
|
@ -51,6 +51,7 @@ import haveno.core.payment.CashAppAccount;
|
|||
import haveno.core.payment.CashAtAtmAccount;
|
||||
import haveno.core.payment.PayByMailAccount;
|
||||
import haveno.core.payment.PayPalAccount;
|
||||
import haveno.core.payment.PaysafeAccount;
|
||||
import haveno.core.payment.CashDepositAccount;
|
||||
import haveno.core.payment.CelPayAccount;
|
||||
import haveno.core.payment.ZelleAccount;
|
||||
|
@ -193,6 +194,7 @@ public final class PaymentMethod implements PersistablePayload, Comparable<Payme
|
|||
public static final String CASH_APP_ID = "CASH_APP";
|
||||
public static final String VENMO_ID = "VENMO";
|
||||
public static final String PAYPAL_ID = "PAYPAL";
|
||||
public static final String PAYSAFE_ID = "PAYSAFE";
|
||||
|
||||
public static PaymentMethod UPHOLD;
|
||||
public static PaymentMethod MONEY_BEAM;
|
||||
|
@ -252,6 +254,7 @@ public final class PaymentMethod implements PersistablePayload, Comparable<Payme
|
|||
public static PaymentMethod PAYPAL;
|
||||
public static PaymentMethod CASH_APP;
|
||||
public static PaymentMethod VENMO;
|
||||
public static PaymentMethod PAYSAFE;
|
||||
|
||||
// Cannot be deleted as it would break old trade history entries
|
||||
@Deprecated
|
||||
|
@ -322,6 +325,7 @@ public final class PaymentMethod implements PersistablePayload, Comparable<Payme
|
|||
DOMESTIC_WIRE_TRANSFER = new PaymentMethod(DOMESTIC_WIRE_TRANSFER_ID, 3 * DAY, DEFAULT_TRADE_LIMIT_HIGH_RISK, getAssetCodes(DomesticWireTransferAccount.SUPPORTED_CURRENCIES)),
|
||||
PAYPAL = new PaymentMethod(PAYPAL_ID, DAY, DEFAULT_TRADE_LIMIT_HIGH_RISK, getAssetCodes(PayPalAccount.SUPPORTED_CURRENCIES)),
|
||||
CASH_APP = new PaymentMethod(CASH_APP_ID, DAY, DEFAULT_TRADE_LIMIT_HIGH_RISK, getAssetCodes(CashAppAccount.SUPPORTED_CURRENCIES)),
|
||||
PAYSAFE = new PaymentMethod(PaymentMethod.PAYSAFE_ID, DAY, DEFAULT_TRADE_LIMIT_HIGH_RISK, getAssetCodes(PaysafeAccount.SUPPORTED_CURRENCIES)),
|
||||
|
||||
// Japan
|
||||
JAPAN_BANK = new PaymentMethod(JAPAN_BANK_ID, DAY, DEFAULT_TRADE_LIMIT_LOW_RISK, getAssetCodes(JapanBankAccount.SUPPORTED_CURRENCIES)),
|
||||
|
@ -364,7 +368,8 @@ public final class PaymentMethod implements PersistablePayload, Comparable<Payme
|
|||
AUSTRALIA_PAYID_ID,
|
||||
CASH_APP_ID,
|
||||
PAYPAL_ID,
|
||||
VENMO_ID);
|
||||
VENMO_ID,
|
||||
PAYSAFE_ID);
|
||||
return paymentMethods.stream().filter(paymentMethod -> paymentMethodIds.contains(paymentMethod.getId())).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
|
@ -588,7 +593,8 @@ public final class PaymentMethod implements PersistablePayload, Comparable<Payme
|
|||
id.equals(PaymentMethod.UPHOLD_ID) ||
|
||||
id.equals(PaymentMethod.CASH_APP_ID) ||
|
||||
id.equals(PaymentMethod.PAYPAL_ID) ||
|
||||
id.equals(PaymentMethod.VENMO_ID);
|
||||
id.equals(PaymentMethod.VENMO_ID) ||
|
||||
id.equals(PaymentMethod.PAYSAFE_ID);
|
||||
}
|
||||
|
||||
public static boolean isRoundedForAtmCash(String id) {
|
||||
|
|
|
@ -0,0 +1,96 @@
|
|||
/*
|
||||
* This file is part of Haveno.
|
||||
*
|
||||
* Haveno is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or (at
|
||||
* your option) any later version.
|
||||
*
|
||||
* Haveno is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with Haveno. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package haveno.core.payment.payload;
|
||||
|
||||
import com.google.protobuf.Message;
|
||||
import haveno.core.locale.Res;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString
|
||||
@Setter
|
||||
@Getter
|
||||
@Slf4j
|
||||
public final class PaysafeAccountPayload extends PaymentAccountPayload {
|
||||
private String email = "";
|
||||
|
||||
public PaysafeAccountPayload(String paymentMethod, String id) {
|
||||
super(paymentMethod, id);
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
// PROTO BUFFER
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
private PaysafeAccountPayload(String paymentMethod,
|
||||
String id,
|
||||
String email,
|
||||
long maxTradePeriod,
|
||||
Map<String, String> excludeFromJsonDataMap) {
|
||||
super(paymentMethod,
|
||||
id,
|
||||
maxTradePeriod,
|
||||
excludeFromJsonDataMap);
|
||||
|
||||
this.email = email;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Message toProtoMessage() {
|
||||
return getPaymentAccountPayloadBuilder()
|
||||
.setPaysafeAccountPayload(protobuf.PaysafeAccountPayload.newBuilder().setEmail(email))
|
||||
.build();
|
||||
}
|
||||
|
||||
public static PaysafeAccountPayload fromProto(protobuf.PaymentAccountPayload proto) {
|
||||
return new PaysafeAccountPayload(proto.getPaymentMethodId(),
|
||||
proto.getId(),
|
||||
proto.getPaysafeAccountPayload().getEmail(),
|
||||
proto.getMaxTradePeriod(),
|
||||
new HashMap<>(proto.getExcludeFromJsonDataMap()));
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
// API
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@Override
|
||||
public String getPaymentDetails() {
|
||||
return Res.get(paymentMethodId) + " - " + Res.getWithCol("payment.email") + " " + email;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPaymentDetailsForTradePopup() {
|
||||
return getPaymentDetails();
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] getAgeWitnessInputData() {
|
||||
return super.getAgeWitnessInputData(email.getBytes(StandardCharsets.UTF_8));
|
||||
}
|
||||
}
|
|
@ -54,6 +54,7 @@ import haveno.core.payment.payload.NequiAccountPayload;
|
|||
import haveno.core.payment.payload.OKPayAccountPayload;
|
||||
import haveno.core.payment.payload.PaxumAccountPayload;
|
||||
import haveno.core.payment.payload.PaymentAccountPayload;
|
||||
import haveno.core.payment.payload.PaysafeAccountPayload;
|
||||
import haveno.core.payment.payload.PayPalAccountPayload;
|
||||
import haveno.core.payment.payload.PayseraAccountPayload;
|
||||
import haveno.core.payment.payload.PaytmAccountPayload;
|
||||
|
@ -239,6 +240,8 @@ public class CoreProtoResolver implements ProtoResolver {
|
|||
return VenmoAccountPayload.fromProto(proto);
|
||||
case PAYPAL_ACCOUNT_PAYLOAD:
|
||||
return PayPalAccountPayload.fromProto(proto);
|
||||
case PAYSAFE_ACCOUNT_PAYLOAD:
|
||||
return PaysafeAccountPayload.fromProto(proto);
|
||||
|
||||
default:
|
||||
throw new ProtobufferRuntimeException("Unknown proto message case(PB.PaymentAccountPayload). messageCase=" + messageCase);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue