Exemple #1
0
        public virtual async Task <IActionResult> PayInvoice(string cryptoCode, PayLightningInvoiceRequest lightningInvoice, CancellationToken cancellationToken = default)
        {
            var lightningClient = await GetLightningClient(cryptoCode, true);

            var network = _btcPayNetworkProvider.GetNetwork <BTCPayNetwork>(cryptoCode);

            if (lightningInvoice?.BOLT11 is null ||
                !BOLT11PaymentRequest.TryParse(lightningInvoice.BOLT11, out _, network.NBitcoinNetwork))
            {
                ModelState.AddModelError(nameof(lightningInvoice.BOLT11), "The BOLT11 invoice was invalid.");
            }

            if (!ModelState.IsValid)
            {
                return(this.CreateValidationError(ModelState));
            }

            var param = lightningInvoice?.MaxFeeFlat != null || lightningInvoice?.MaxFeePercent != null
                ? new PayInvoiceParams {
                MaxFeePercent = lightningInvoice.MaxFeePercent, MaxFeeFlat = lightningInvoice.MaxFeeFlat
            }
                : null;
            var result = await lightningClient.Pay(lightningInvoice.BOLT11, param, cancellationToken);

            return(result.Result switch
            {
                PayResult.CouldNotFindRoute => this.CreateAPIError("could-not-find-route", "Impossible to find a route to the peer"),
                PayResult.Error => this.CreateAPIError("generic-error", result.ErrorDetail),
                PayResult.Ok => Ok(new LightningPaymentData
                {
                    TotalAmount = result.Details?.TotalAmount,
                    FeeAmount = result.Details?.FeeAmount
                }),
                _ => throw new NotSupportedException("Unsupported Payresult")
            });
        public virtual async Task <IActionResult> PayInvoice(string cryptoCode, PayLightningInvoiceRequest lightningInvoice)
        {
            var lightningClient = await GetLightningClient(cryptoCode, true);

            var network = _btcPayNetworkProvider.GetNetwork <BTCPayNetwork>(cryptoCode);

            if (lightningInvoice?.BOLT11 is null ||
                !BOLT11PaymentRequest.TryParse(lightningInvoice.BOLT11, out _, network.NBitcoinNetwork))
            {
                ModelState.AddModelError(nameof(lightningInvoice.BOLT11), "The BOLT11 invoice was invalid.");
            }

            if (!ModelState.IsValid)
            {
                return(this.CreateValidationError(ModelState));
            }

            var result = await lightningClient.Pay(lightningInvoice.BOLT11);

            switch (result.Result)
            {
            case PayResult.CouldNotFindRoute:
                return(this.CreateAPIError("could-not-find-route", "Impossible to find a route to the peer"));

            case PayResult.Error:
                return(this.CreateAPIError("generic-error", result.ErrorDetail));

            case PayResult.Ok:
                return(Ok());

            default:
                throw new NotSupportedException("Unsupported Payresult");
            }
        }
Exemple #3
0
        public virtual async Task PayLightningInvoice(string cryptoCode, PayLightningInvoiceRequest request,
                                                      CancellationToken token = default)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }
            var response = await _httpClient.SendAsync(
                CreateHttpRequest($"api/v1/server/lightning/{cryptoCode}/invoices/pay", bodyPayload : request,
                                  method : HttpMethod.Post), token);

            await HandleResponse(response);
        }
Exemple #4
0
        public virtual async Task <IActionResult> PayInvoice(string cryptoCode, PayLightningInvoiceRequest lightningInvoice)
        {
            var lightningClient = await GetLightningClient(cryptoCode, true);

            var network = _btcPayNetworkProvider.GetNetwork <BTCPayNetwork>(cryptoCode);

            if (lightningClient == null || network == null)
            {
                return(NotFound());
            }

            try
            {
                BOLT11PaymentRequest.TryParse(lightningInvoice.Invoice, out var bolt11PaymentRequest, network.NBitcoinNetwork);
            }
            catch (Exception)
            {
                ModelState.AddModelError(nameof(lightningInvoice), "The BOLT11 invoice was invalid.");
            }

            if (CheckValidation(out var errorActionResult))
            {
                return(errorActionResult);
            }

            var result = await lightningClient.Pay(lightningInvoice.Invoice);

            switch (result.Result)
            {
            case PayResult.Ok:
                return(Ok());

            case PayResult.CouldNotFindRoute:
                ModelState.AddModelError(nameof(lightningInvoice.Invoice), "Could not find route");
                break;

            case PayResult.Error:
                ModelState.AddModelError(nameof(lightningInvoice.Invoice), result.ErrorDetail);
                break;
            }

            return(BadRequest(new ValidationProblemDetails(ModelState)));
        }
Exemple #5
0
 public override Task <IActionResult> PayInvoice(string cryptoCode, PayLightningInvoiceRequest lightningInvoice)
 {
     return(base.PayInvoice(cryptoCode, lightningInvoice));
 }
Exemple #6
0
 public override Task <IActionResult> PayInvoice(string cryptoCode, PayLightningInvoiceRequest lightningInvoice, CancellationToken cancellationToken = default)
 {
     return(base.PayInvoice(cryptoCode, lightningInvoice, cancellationToken));
 }