@@ -94,6 +94,19 @@ public async Task V1PasswordReset_Retired_Returns410Gone()
9494 await Assert . That ( response . StatusCode ) . IsEqualTo ( HttpStatusCode . Gone ) ;
9595 }
9696
97+ [ Test ]
98+ public async Task ResetPasswordAlias_Retired_Returns410Gone ( )
99+ {
100+ using var client = WebApplicationFactory . CreateClient ( ) ;
101+ var response = await client . PostAsync ( "/2/account/reset-password" , TestHelper . JsonContent ( new
102+ {
103+ email = "whatever@test.org" ,
104+ turnstileResponse = "valid-token"
105+ } ) ) ;
106+
107+ await Assert . That ( response . StatusCode ) . IsEqualTo ( HttpStatusCode . Gone ) ;
108+ }
109+
97110 [ Test ]
98111 public async Task V2PasswordReset_SendsPasswordResetEmail ( )
99112 {
@@ -311,62 +324,26 @@ public async Task ChangeEmail_Unchanged_Returns400_AndSendsNoEmail()
311324 }
312325
313326 [ Test ]
314- public async Task PasswordResetComplete_LegacyRecoverRoute_StillWorks ( )
327+ public async Task PasswordResetComplete_LegacyRecoverRoute_Returns410Gone ( )
315328 {
316- var email = TestHelper . UniqueEmail ( "mail-pwreset-legacy" ) ;
317- var username = TestHelper . UniqueUsername ( "mailpwresetlegacy" ) ;
318- const string newPassword = "LegacyNewPassword456#" ;
319- using var mailpit = WebApplicationFactory . CreateMailpitHelper ( ) ;
320-
321- await TestHelper . CreateUserInDb ( WebApplicationFactory , username , email , "OldPassword123#" ) ;
322-
323329 using var client = WebApplicationFactory . CreateClient ( ) ;
324330
325- var resetResponse = await client . PostAsync ( "/2/account/password-reset" , TestHelper . JsonContent ( new { email , turnstileResponse = "valid-token" } ) ) ;
326- await Assert . That ( resetResponse . StatusCode ) . IsEqualTo ( HttpStatusCode . OK ) ;
331+ var response = await client . PostAsync (
332+ $ "/1/account/recover/{ Guid . CreateVersion7 ( ) } /somesecret",
333+ TestHelper . JsonContent ( new { password = "LegacyNewPassword456#" } ) ) ;
327334
328- var message = await mailpit . WaitForMessageAsync ( email ) ;
329- await Assert . That ( message ) . IsNotNull ( ) ;
330- var fullMessage = await mailpit . GetMessageAsync ( message ! . Id ) ;
331- var ( resetId , secret ) = ExtractPasswordResetParams ( fullMessage ! . Html ) ;
332- await Assert . That ( resetId ) . IsNotNull ( ) . And . IsNotEmpty ( ) ;
333-
334- // Hit the deprecated route directly — must still complete the reset.
335- var completeResponse = await client . PostAsync (
336- $ "/1/account/recover/{ resetId } /{ secret } ",
337- TestHelper . JsonContent ( new { password = newPassword } ) ) ;
338- await Assert . That ( completeResponse . StatusCode ) . IsEqualTo ( HttpStatusCode . OK ) ;
339-
340- var loginResponse = await client . PostAsync ( "/2/account/login" , TestHelper . JsonContent ( new
341- {
342- usernameOrEmail = email ,
343- password = newPassword ,
344- turnstileResponse = "valid-token"
345- } ) ) ;
346- await Assert . That ( loginResponse . StatusCode ) . IsEqualTo ( HttpStatusCode . OK ) ;
335+ await Assert . That ( response . StatusCode ) . IsEqualTo ( HttpStatusCode . Gone ) ;
347336 }
348337
349338 [ Test ]
350- public async Task PasswordResetCheck_LegacyHeadRecoverRoute_StillWorks ( )
339+ public async Task PasswordResetCheck_LegacyHeadRecoverRoute_Returns410Gone ( )
351340 {
352- var email = TestHelper . UniqueEmail ( "mail-pwreset-check-legacy" ) ;
353- var username = TestHelper . UniqueUsername ( "mailpwresetchecklegacy" ) ;
354- using var mailpit = WebApplicationFactory . CreateMailpitHelper ( ) ;
355-
356- await TestHelper . CreateUserInDb ( WebApplicationFactory , username , email , "OldPassword123#" ) ;
357-
358341 using var client = WebApplicationFactory . CreateClient ( ) ;
359- var resetResponse = await client . PostAsync ( "/2/account/password-reset" , TestHelper . JsonContent ( new { email , turnstileResponse = "valid-token" } ) ) ;
360- await Assert . That ( resetResponse . StatusCode ) . IsEqualTo ( HttpStatusCode . OK ) ;
361342
362- var message = await mailpit . WaitForMessageAsync ( email ) ;
363- await Assert . That ( message ) . IsNotNull ( ) ;
364- var fullMessage = await mailpit . GetMessageAsync ( message ! . Id ) ;
365- var ( resetId , secret ) = ExtractPasswordResetParams ( fullMessage ! . Html ) ;
343+ var response = await client . SendAsync ( new HttpRequestMessage (
344+ HttpMethod . Head , $ "/1/account/recover/{ Guid . CreateVersion7 ( ) } /somesecret") ) ;
366345
367- var legacyCheck = await client . SendAsync ( new HttpRequestMessage (
368- HttpMethod . Head , $ "/1/account/recover/{ resetId } /{ secret } ") ) ;
369- await Assert . That ( legacyCheck . StatusCode ) . IsEqualTo ( HttpStatusCode . OK ) ;
346+ await Assert . That ( response . StatusCode ) . IsEqualTo ( HttpStatusCode . Gone ) ;
370347 }
371348
372349 [ Test ]
0 commit comments