Skip to content

Commit 04fef95

Browse files
author
CI Fix
committed
missing mjs file
1 parent 86da28f commit 04fef95

File tree

1 file changed

+122
-0
lines changed

1 file changed

+122
-0
lines changed
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
import AuthRequest from './auth-request.mjs'
2+
import debugModule from './../debug.mjs'
3+
4+
const debug = debugModule.accounts
5+
6+
export default class PasswordResetEmailRequest extends AuthRequest {
7+
constructor (options) {
8+
super(options)
9+
10+
this.returnToUrl = options.returnToUrl
11+
this.username = options.username
12+
}
13+
14+
static fromParams (req, res) {
15+
const locals = req.app.locals
16+
const accountManager = locals.accountManager
17+
18+
const returnToUrl = this.parseParameter(req, 'returnToUrl')
19+
const username = this.parseParameter(req, 'username')
20+
21+
const options = {
22+
accountManager,
23+
returnToUrl,
24+
username,
25+
response: res
26+
}
27+
28+
return new PasswordResetEmailRequest(options)
29+
}
30+
31+
static get (req, res) {
32+
const request = PasswordResetEmailRequest.fromParams(req, res)
33+
34+
request.renderForm()
35+
}
36+
37+
static post (req, res) {
38+
const request = PasswordResetEmailRequest.fromParams(req, res)
39+
40+
debug(`User '${request.username}' requested to be sent a password reset email`)
41+
42+
return PasswordResetEmailRequest.handlePost(request)
43+
}
44+
45+
static handlePost (request) {
46+
return Promise.resolve()
47+
.then(() => request.validate())
48+
.then(() => request.loadUser())
49+
.then(userAccount => request.sendResetLink(userAccount))
50+
.then(() => request.resetLinkMessage())
51+
.catch(error => request.error(error))
52+
}
53+
54+
validate () {
55+
if (this.accountManager.multiuser && !this.username) {
56+
throw new Error('Username required')
57+
}
58+
}
59+
60+
loadUser () {
61+
const username = this.username
62+
63+
return this.accountManager.accountExists(username)
64+
.then(exists => {
65+
if (!exists) {
66+
// For security reasons, avoid leaking error information
67+
// See: https://github.com/nodeSolidServer/node-solid-server/issues/1770
68+
this.accountManager.verifyEmailDependencies()
69+
return this.resetLinkMessage()
70+
}
71+
72+
const userData = { username }
73+
74+
return this.accountManager.userAccountFrom(userData)
75+
})
76+
}
77+
78+
sendResetLink (userAccount) {
79+
const accountManager = this.accountManager
80+
81+
return accountManager.loadAccountRecoveryEmail(userAccount)
82+
.then(recoveryEmail => {
83+
userAccount.email = recoveryEmail
84+
85+
debug('Sending recovery email to:', recoveryEmail)
86+
87+
return accountManager
88+
.sendPasswordResetEmail(userAccount, this.returnToUrl)
89+
})
90+
}
91+
92+
error (error) {
93+
const res = this.response
94+
95+
debug(error)
96+
97+
const params = {
98+
error: error.message,
99+
returnToUrl: this.returnToUrl,
100+
multiuser: this.accountManager.multiuser
101+
}
102+
103+
res.status(error.statusCode || 400)
104+
105+
res.render('auth/reset-password', params)
106+
}
107+
108+
renderForm () {
109+
const params = {
110+
returnToUrl: this.returnToUrl,
111+
multiuser: this.accountManager.multiuser
112+
}
113+
114+
this.response.render('auth/reset-password', params)
115+
}
116+
117+
resetLinkMessage () {
118+
this.response.render('auth/reset-link-sent')
119+
}
120+
}
121+
122+

0 commit comments

Comments
 (0)