From 0b68f3ad9237146005ad0b04a8cf67a0b23569c5 Mon Sep 17 00:00:00 2001 From: ahmadrezadev-pc Date: Sat, 22 Mar 2025 17:02:03 +0330 Subject: [PATCH 1/3] add nonce to gateway transporter because it violates the following Content Security Policy directive --- src/Parbad/src/Internal/DefaultGatewayTransporter.cs | 4 +++- src/Parbad/src/Internal/HtmlFormBuilder.cs | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Parbad/src/Internal/DefaultGatewayTransporter.cs b/src/Parbad/src/Internal/DefaultGatewayTransporter.cs index 69f270bc..094b88f8 100644 --- a/src/Parbad/src/Internal/DefaultGatewayTransporter.cs +++ b/src/Parbad/src/Internal/DefaultGatewayTransporter.cs @@ -35,7 +35,9 @@ public virtual Task TransportAsync(CancellationToken cancellationToken = default { HttpResponseUtilities.AddNecessaryContents(_httpContext, "text/html"); - var form = HtmlFormBuilder.CreateForm(Descriptor.Url, Descriptor.Form); + var nonce = (_httpContext.Items["nonce"] ?? "").ToString(); + + var form = HtmlFormBuilder.CreateForm(Descriptor.Url, Descriptor.Form, nonce); var buffer = Encoding.UTF8.GetBytes(form); diff --git a/src/Parbad/src/Internal/HtmlFormBuilder.cs b/src/Parbad/src/Internal/HtmlFormBuilder.cs index b7d1353c..21b331db 100644 --- a/src/Parbad/src/Internal/HtmlFormBuilder.cs +++ b/src/Parbad/src/Internal/HtmlFormBuilder.cs @@ -8,7 +8,7 @@ namespace Parbad.Internal { internal static class HtmlFormBuilder { - public static string CreateForm(string url, IEnumerable> data) + public static string CreateForm(string url, IEnumerable> data, string nonce = null) { var fields = string.Join("", data.Select(CreateHiddenInput)); @@ -18,7 +18,7 @@ public static string CreateForm(string url, IEnumerable" + fields + "" + - "" + "" + From 267ed81f495852ed3194680877d8644830610cff Mon Sep 17 00:00:00 2001 From: ahmadrezadev-pc Date: Sat, 22 Mar 2025 17:02:03 +0330 Subject: [PATCH 2/3] add nonce to gateway transporter because it violates the following Content Security Policy directive --- .../src/Internal/DefaultGatewayTransporter.cs | 13 ++++++++++++- src/Parbad/src/Internal/HtmlFormBuilder.cs | 4 ++-- src/Parbad/src/Options/ParbadOptions.cs | 10 +++++++++- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/Parbad/src/Internal/DefaultGatewayTransporter.cs b/src/Parbad/src/Internal/DefaultGatewayTransporter.cs index 69f270bc..26ce39c9 100644 --- a/src/Parbad/src/Internal/DefaultGatewayTransporter.cs +++ b/src/Parbad/src/Internal/DefaultGatewayTransporter.cs @@ -2,10 +2,13 @@ // Licensed under the GNU GENERAL PUBLIC License, Version 3.0. See License.txt in the project root for license information. using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; using System; using System.Text; using System.Threading; using System.Threading.Tasks; +using Parbad.Options; namespace Parbad.Internal { @@ -33,9 +36,17 @@ public virtual Task TransportAsync(CancellationToken cancellationToken = default { if (Descriptor.Type == GatewayTransporterDescriptor.TransportType.Post) { + string nonce = null; + var parbadOptions = _httpContext.RequestServices.GetRequiredService>(); + HttpResponseUtilities.AddNecessaryContents(_httpContext, "text/html"); - var form = HtmlFormBuilder.CreateForm(Descriptor.Url, Descriptor.Form); + if (parbadOptions.Value.NonceFactory != null) + { + nonce = parbadOptions.Value.NonceFactory(_httpContext); + } + + var form = HtmlFormBuilder.CreateForm(Descriptor.Url, Descriptor.Form, nonce); var buffer = Encoding.UTF8.GetBytes(form); diff --git a/src/Parbad/src/Internal/HtmlFormBuilder.cs b/src/Parbad/src/Internal/HtmlFormBuilder.cs index b7d1353c..21b331db 100644 --- a/src/Parbad/src/Internal/HtmlFormBuilder.cs +++ b/src/Parbad/src/Internal/HtmlFormBuilder.cs @@ -8,7 +8,7 @@ namespace Parbad.Internal { internal static class HtmlFormBuilder { - public static string CreateForm(string url, IEnumerable> data) + public static string CreateForm(string url, IEnumerable> data, string nonce = null) { var fields = string.Join("", data.Select(CreateHiddenInput)); @@ -18,7 +18,7 @@ public static string CreateForm(string url, IEnumerable" + fields + "" + - "" + "" + diff --git a/src/Parbad/src/Options/ParbadOptions.cs b/src/Parbad/src/Options/ParbadOptions.cs index 2fcdc342..105fd612 100644 --- a/src/Parbad/src/Options/ParbadOptions.cs +++ b/src/Parbad/src/Options/ParbadOptions.cs @@ -1,4 +1,7 @@ -namespace Parbad.Options +using Microsoft.AspNetCore.Http; +using System; + +namespace Parbad.Options { /// /// Provides configuration for Parbad. @@ -14,5 +17,10 @@ public class ParbadOptions /// Contains all messages that Parbad uses in results. /// public MessagesOptions Messages { get; set; } = new MessagesOptions(); + + /// + /// A delegate that allows for the generation of a nonce (a unique token) based on the HttpContext. + /// + public Func NonceFactory { get; set; } } } From 24e27c03a71a5d127f74c05428ca196eb7be9d1b Mon Sep 17 00:00:00 2001 From: ahmadrezadev-pc Date: Sat, 20 Sep 2025 20:48:32 +0330 Subject: [PATCH 3/3] add new pasargad callback result status --- .../Internal/Models/PasargadCallbackResultModel.cs | 7 ++++++- src/Parbad/src/Parbad.xml | 5 +++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/Parbad/src/Gateway/Pasargad/Internal/Models/PasargadCallbackResultModel.cs b/src/Parbad/src/Gateway/Pasargad/Internal/Models/PasargadCallbackResultModel.cs index 63bcd9eb..66b6a102 100644 --- a/src/Parbad/src/Gateway/Pasargad/Internal/Models/PasargadCallbackResultModel.cs +++ b/src/Parbad/src/Gateway/Pasargad/Internal/Models/PasargadCallbackResultModel.cs @@ -41,5 +41,10 @@ internal enum PasargadCallbackResultStatus /// /// نامشخص /// - Unknown + Unknown, + + /// + /// انصراف + /// + Cancel } \ No newline at end of file diff --git a/src/Parbad/src/Parbad.xml b/src/Parbad/src/Parbad.xml index 6383f5f2..b20ac007 100644 --- a/src/Parbad/src/Parbad.xml +++ b/src/Parbad/src/Parbad.xml @@ -1934,6 +1934,11 @@ Contains all messages that Parbad uses in results. + + + A delegate that allows for the generation of a nonce (a unique token) based on the HttpContext. + +