1
0

- Fixed BasicAuthenticationAttribute.

- All attributes now reside in Microsoft.AspNetCore.Mvc.Filters namespace.
This commit is contained in:
2022-06-22 23:47:47 +02:00
parent 33c2b9336f
commit 97c3c303ce
5 changed files with 43 additions and 55 deletions

View File

@@ -3,14 +3,34 @@ using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
namespace Microsoft.AspNetCore.Mvc.Filters
{
/// <summary>
/// Custom filter attribute to use Google's reCaptcha (v3).
/// <br/>
/// Usage: [ServiceFilter(typeof(GoogleReCaptchaAttribute))]
/// </summary>
/// <remarks>
/// appsettings.json:
/// <br/>
/// <code>
/// {<br/>
/// [...]<br/>
/// "Google": {<br/>
/// "ReCaptcha": {<br/>
/// "PrivateKey": "__private reCaptcha key__",<br/>
/// "PublicKey": "__public reCaptcha key__"<br/>
/// }<br/>
/// }<br/>
/// }
/// </code>
/// <br/>
/// The score from google can be found on HttpContext.Items[GoogleReCaptchaAttribute.ScoreKey].
/// </remarks>
public class GoogleReCaptchaAttribute : ActionFilterAttribute
{
/// <summary>
@@ -30,33 +50,7 @@ namespace Microsoft.AspNetCore.Mvc.Filters
private const string VerificationUrl = "https://www.google.com/recaptcha/api/siteverify";
private readonly string privateKey;
/// <summary>
/// Initializes a new instance of the <see cref="GoogleReCaptchaAttribute"/> class.
/// </summary>
/// <remarks>
/// appsettings.json:
/// <br/>
/// <code>
/// {<br/>
/// [...]<br/>
/// "Google": {<br/>
/// "ReCaptcha": {<br/>
/// "PrivateKey": "__private reCaptcha key__",<br/>
/// "PublicKey": "__public reCaptcha key__"<br/>
/// }<br/>
/// }<br/>
/// }
/// </code>
/// <br/>
/// The score from google can be found on HttpContext.Items[GoogleReCaptchaAttribute.ScoreKey].
/// </remarks>
/// <param name="configuration">The application configuration.</param>
public GoogleReCaptchaAttribute(IConfiguration configuration)
{
privateKey = configuration.GetValue<string>("Google:ReCaptcha:PrivateKey");
}
private string privateKey;
/// <summary>
/// Executes the validattion in background.
@@ -66,15 +60,18 @@ namespace Microsoft.AspNetCore.Mvc.Filters
/// <returns>An awaitable task.</returns>
public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
var configuration = context.HttpContext.RequestServices.GetService<IConfiguration>();
privateKey = configuration?.GetValue<string>("Google:ReCaptcha:PrivateKey");
if (string.IsNullOrWhiteSpace(privateKey))
return;
await DoValidation(context);
await base.OnActionExecutionAsync(context, next);
}
private async Task DoValidation(ActionExecutingContext context)
{
if (string.IsNullOrWhiteSpace(privateKey))
return;
if (!context.HttpContext.Request.HasFormContentType)
return;