mirror of
https://github.com/aljazceru/btcpayserver.git
synced 2026-01-05 23:24:27 +01:00
* wip * Cleanups * UI updates * Update UIFormsController.cs * Make predefined forms usable statically * Add support for pos app + forms * pay request form rough support * invoice form through receipt page * Display form name in inherit from store setting * Do not request additional forms on invoice from pay request * fix up code * move checkoutform id in checkout appearance outside of checkotu v2 toggle * general fixes for form system * fix pav bug * UI updates * Fix warnings in Form builder (#4331) * Fix build warnings about string? Enable nullable on UIFormsController.cs Fixes CS8632 The annotation for nullable reference types should only be used in code within a '#nullable' annotations context. * Clean up lack of space in injected services in Submit() of UIFormsController.cs * Remove unused variables (CS0219) and assignment of nullable value to nullable type (CS8600) * Cleanup double semicolons while we're at tit * Fix: If reverse proxy wasn't well configured, and error message should have been displayed (#4322) * fix monero issue * Server Settings: Update Policies page (#4326) Handles the multiple submit buttons on that page and closes #4319. Contains some UI unifications with other pages and also shows the block explorers without needing to toggle the section via JS. * Change confirmed to settled. (#4328) * POS: Fix null pointer Introduced in #4307, the referenced object needs to be `itemChoice` instead of `choice`. * Add documentation link to plugins (#4329) * Add documentation link to plugins * Minor UI updates Co-authored-by: Dennis Reimann <mail@dennisreimann.de> * Fix flaky test (#4330) * Fix flaky test * Update BTCPayServer/PayoutProcessors/BaseAutomatedPayoutProcessor.cs Co-authored-by: d11n <mail@dennisreimann.de> Co-authored-by: d11n <mail@dennisreimann.de> * Remove invoice and store level form * add form test * fix migration for forms * fix * make pay request form submission redirect to invoice * Refactor FormQuery to only be able to query single store and single form * Put the Authorize at controller level on UIForms * Fix warnings * Fix ef request * Fix query to forms, ensure no permission bypass * Fix modify * Remove storeId from step form * Remove useless storeId parameter * Hide custom form feature in UI * Minor cleanups * Remove custom form options from select for now * More minor syntax cleanups * Update test * Add index - needs migration * Refactoring: Use PostRedirect instead of TempData for data transfer * Remove untested and unfinished code * formResponse should be a JObject, not a string * Fix case for Form type Co-authored-by: Dennis Reimann <mail@dennisreimann.de> Co-authored-by: JesterHodl <103882255+jesterhodl@users.noreply.github.com> Co-authored-by: Nicolas Dorier <nicolas.dorier@gmail.com> Co-authored-by: Andreas Tasch <andy.tasch@gmail.com>
100 lines
3.2 KiB
C#
100 lines
3.2 KiB
C#
#nullable enable
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Globalization;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using BTCPayServer.Abstractions.Constants;
|
|
using BTCPayServer.Abstractions.Extensions;
|
|
using BTCPayServer.Abstractions.Form;
|
|
using BTCPayServer.Abstractions.Models;
|
|
using BTCPayServer.Client;
|
|
using BTCPayServer.Client.Models;
|
|
using BTCPayServer.Controllers;
|
|
using BTCPayServer.Data;
|
|
using BTCPayServer.Data.Data;
|
|
using BTCPayServer.Forms.Models;
|
|
using BTCPayServer.Models;
|
|
using BTCPayServer.Services.Stores;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
namespace BTCPayServer.Forms;
|
|
|
|
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Cookie)]
|
|
public class UIFormsController : Controller
|
|
{
|
|
[AllowAnonymous]
|
|
[HttpGet("~/forms/{formId}")]
|
|
[HttpPost("~/forms")]
|
|
public IActionResult ViewPublicForm(string? formId, string? redirectUrl)
|
|
{
|
|
FormData? formData = string.IsNullOrEmpty(formId) ? null : GetFormData(formId);
|
|
if (formData == null)
|
|
{
|
|
return string.IsNullOrEmpty(redirectUrl)
|
|
? NotFound()
|
|
: Redirect(redirectUrl);
|
|
}
|
|
|
|
return View("View", new FormViewModel() { FormData = formData, RedirectUrl = redirectUrl });
|
|
}
|
|
|
|
[AllowAnonymous]
|
|
[HttpPost("~/forms/{formId}")]
|
|
public IActionResult SubmitForm(
|
|
string formId, string? redirectUrl,
|
|
[FromServices] StoreRepository storeRepository,
|
|
[FromServices] UIInvoiceController invoiceController)
|
|
{
|
|
var formData = GetFormData(formId);
|
|
if (formData?.Config is null)
|
|
{
|
|
return NotFound();
|
|
}
|
|
|
|
var dbForm = Form.Parse(formData.Config);
|
|
dbForm.ApplyValuesFromForm(Request.Form);
|
|
Dictionary<string, object> data = dbForm.GetValues();
|
|
|
|
// With redirect, the form comes from another entity that we need to send the data back to
|
|
if (!string.IsNullOrEmpty(redirectUrl))
|
|
{
|
|
return View("PostRedirect", new PostRedirectViewModel
|
|
{
|
|
FormUrl = redirectUrl,
|
|
FormParameters =
|
|
{
|
|
{ "formId", formId },
|
|
{ "formData", JsonConvert.SerializeObject(data) }
|
|
}
|
|
});
|
|
}
|
|
|
|
return NotFound();
|
|
}
|
|
|
|
private FormData? GetFormData(string id)
|
|
{
|
|
FormData? form = id switch
|
|
{
|
|
{ } formId when formId == GenericFormOption.Address.ToString() => new FormData
|
|
{
|
|
Config = FormDataService.StaticFormAddress.ToString(),
|
|
Id = GenericFormOption.Address.ToString(),
|
|
Name = "Provide your address",
|
|
},
|
|
{ } formId when formId == GenericFormOption.Email.ToString() => new FormData
|
|
{
|
|
Config = FormDataService.StaticFormEmail.ToString(),
|
|
Id = GenericFormOption.Email.ToString(),
|
|
Name = "Provide your email address",
|
|
},
|
|
_ => null
|
|
};
|
|
return form;
|
|
}
|
|
}
|