Skip to content

Commit 413e352

Browse files
fix: remove fragile auth test bypasses
Remove the hard-coded development hCaptcha token bypass and temporary email-confirmation mutation from Identity login/register page handlers. Local testing should use the configured hCaptcha test keys or test-host service overrides instead of changing production auth flow code.
1 parent 1b89b5b commit 413e352

2 files changed

Lines changed: 6 additions & 31 deletions

File tree

EssentialCSharp.Web/Areas/Identity/Pages/Account/Login.cshtml.cs

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,14 @@
44
using EssentialCSharp.Web.Services;
55
using EssentialCSharp.Web.Services.Referrals;
66
using Microsoft.AspNetCore.Authentication;
7-
using Microsoft.AspNetCore.Hosting;
87
using Microsoft.AspNetCore.Identity;
98
using Microsoft.AspNetCore.Mvc;
109
using Microsoft.AspNetCore.Mvc.RazorPages;
1110
using Microsoft.Extensions.Options;
1211

1312
namespace EssentialCSharp.Web.Areas.Identity.Pages.Account;
1413

15-
public partial class LoginModel(SignInManager<EssentialCSharpWebUser> signInManager, UserManager<EssentialCSharpWebUser> userManager, ILogger<LoginModel> logger, IReferralService referralService, ICaptchaService captchaService, IOptions<CaptchaOptions> optionsAccessor, IWebHostEnvironment environment) : PageModel
14+
public partial class LoginModel(SignInManager<EssentialCSharpWebUser> signInManager, UserManager<EssentialCSharpWebUser> userManager, ILogger<LoginModel> logger, IReferralService referralService, ICaptchaService captchaService, IOptions<CaptchaOptions> optionsAccessor) : PageModel
1615
{
1716
private InputModel? _Input;
1817
[BindProperty]
@@ -69,13 +68,8 @@ public async Task<IActionResult> OnPostAsync(string? returnUrl = null)
6968
returnUrl ??= Url.Content("~/");
7069

7170
string? captchaToken = Request.Form[CaptchaOptions.HttpPostResponseKeyName];
72-
73-
// Development-only bypass for E2E testing: allow test tokens without verification.
74-
bool isTestToken = environment.IsDevelopment() && captchaToken == "10000000-aaaa-bbbb-cccc-000000000001";
75-
76-
HCaptchaResult? captchaResult = isTestToken
77-
? new HCaptchaResult { Success = true }
78-
: await captchaService.VerifyAsync(captchaToken, HttpContext.Connection.RemoteIpAddress?.ToString());
71+
72+
HCaptchaResult? captchaResult = await captchaService.VerifyAsync(captchaToken, HttpContext.Connection.RemoteIpAddress?.ToString());
7973

8074
if (captchaResult?.Success != true)
8175
{
@@ -100,19 +94,7 @@ public async Task<IActionResult> OnPostAsync(string? returnUrl = null)
10094
}
10195
if (foundUser is not null)
10296
{
103-
// For test tokens, bypass email confirmation requirement
104-
if (isTestToken && !foundUser.EmailConfirmed)
105-
{
106-
// Temporarily set email as confirmed for this sign-in when using test token
107-
var tempConfirmed = foundUser.EmailConfirmed;
108-
foundUser.EmailConfirmed = true;
109-
result = await signInManager.PasswordSignInAsync(foundUser, Input.Password, Input.RememberMe, lockoutOnFailure: true);
110-
foundUser.EmailConfirmed = tempConfirmed;
111-
}
112-
else
113-
{
114-
result = await signInManager.PasswordSignInAsync(foundUser, Input.Password, Input.RememberMe, lockoutOnFailure: true);
115-
}
97+
result = await signInManager.PasswordSignInAsync(foundUser, Input.Password, Input.RememberMe, lockoutOnFailure: true);
11698
// Call the referral service to get the referral ID and set it onto the user claim
11799
_ = await referralService.EnsureReferralIdAsync(foundUser);
118100
}

EssentialCSharp.Web/Areas/Identity/Pages/Account/Register.cshtml.cs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using EssentialCSharp.Web.Models;
66
using EssentialCSharp.Web.Services;
77
using Microsoft.AspNetCore.Authentication;
8-
using Microsoft.AspNetCore.Hosting;
98
using Microsoft.AspNetCore.Identity;
109
using Microsoft.AspNetCore.Identity.UI.Services;
1110
using Microsoft.AspNetCore.Mvc;
@@ -23,8 +22,7 @@ public partial class RegisterModel(
2322
IEmailSender emailSender,
2423
ICaptchaService captchaService,
2524
IOptions<CaptchaOptions> optionsAccessor,
26-
IUserEmailStore<EssentialCSharpWebUser> emailStore,
27-
IWebHostEnvironment environment) : PageModel
25+
IUserEmailStore<EssentialCSharpWebUser> emailStore) : PageModel
2826
{
2927
public string CaptchaSiteKey { get; } = optionsAccessor.Value.SiteKey ?? string.Empty;
3028

@@ -97,12 +95,7 @@ public async Task<IActionResult> OnPostAsync(string? returnUrl = null)
9795
return Page();
9896
}
9997

100-
// Development-only bypass for E2E testing: allow test tokens without verification.
101-
bool isTestToken = environment.IsDevelopment() && hCaptcha_response == "10000000-aaaa-bbbb-cccc-000000000001";
102-
103-
HCaptchaResult? response = isTestToken
104-
? new HCaptchaResult { Success = true }
105-
: await captchaService.VerifyAsync(hCaptcha_response, HttpContext.Connection.RemoteIpAddress?.ToString());
98+
HCaptchaResult? response = await captchaService.VerifyAsync(hCaptcha_response, HttpContext.Connection.RemoteIpAddress?.ToString());
10699

107100
if (response is null)
108101
{

0 commit comments

Comments
 (0)