@@ -154,6 +154,39 @@ describe('PasswordResetEmailRequest', () => {
154154 expect ( request . error ) . to . not . have . been . called ( )
155155 } )
156156 } )
157+
158+ it ( 'should hande a reset request with no username without privacy leakage' , ( ) => {
159+ const host = SolidHost . from ( { serverUri : 'https://example.com' } )
160+ const store = { suffixAcl : '.acl' }
161+ const accountManager = AccountManager . from ( { host, multiuser : true , store } )
162+ accountManager . loadAccountRecoveryEmail = sinon . stub ( ) . resolves ( 'alice@example.com' )
163+ accountManager . sendPasswordResetEmail = sinon . stub ( ) . resolves ( )
164+ accountManager . accountExists = sinon . stub ( ) . resolves ( false )
165+
166+ const returnToUrl = 'https://example.com/resource'
167+ const username = 'alice'
168+ const response = HttpMocks . createResponse ( )
169+ response . render = sinon . stub ( )
170+
171+ const options = { accountManager, username, returnToUrl, response }
172+ const request = new PasswordResetEmailRequest ( options )
173+
174+ sinon . spy ( request , 'error' )
175+ sinon . spy ( request , 'validate' )
176+ sinon . spy ( request , 'loadUser' )
177+
178+ return PasswordResetEmailRequest . handlePost ( request )
179+ . then ( ( ) => {
180+ expect ( request . validate ) . to . have . been . called ( )
181+ expect ( request . loadUser ) . to . have . been . called ( )
182+ expect ( request . loadUser ) . to . throw ( )
183+ } ) . catch ( ( ) => {
184+ expect ( request . error ) . to . have . been . called ( )
185+ expect ( response . render ) . to . have . been . calledWith ( 'auth/reset-link-sent' )
186+ expect ( accountManager . loadAccountRecoveryEmail ) . to . not . have . been . called ( )
187+ expect ( accountManager . sendPasswordResetEmail ) . to . not . have . been . called ( )
188+ } )
189+ } )
157190 } )
158191
159192 describe ( 'loadUser()' , ( ) => {
@@ -183,7 +216,7 @@ describe('PasswordResetEmailRequest', () => {
183216 const options = { accountManager, username }
184217 const request = new PasswordResetEmailRequest ( options )
185218
186- sinon . spy ( request , 'renderSuccess ' )
219+ sinon . spy ( request , 'resetLinkMessage ' )
187220 sinon . spy ( accountManager , 'userAccountFrom' )
188221 sinon . spy ( accountManager , 'verifyEmailDependencies' )
189222
@@ -195,7 +228,7 @@ describe('PasswordResetEmailRequest', () => {
195228 done ( )
196229 } )
197230 . catch ( ( ) => {
198- expect ( request . renderSuccess ) . to . have . been . called ( )
231+ expect ( request . resetLinkMessage ) . to . have . been . called ( )
199232 done ( )
200233 } )
201234 } )
0 commit comments