Skip to content
This repository was archived by the owner on Jun 27, 2019. It is now read-only.

Commit bb91fdb

Browse files
committed
fix password reset email
1 parent 3e71c63 commit bb91fdb

File tree

2 files changed

+88
-7
lines changed

2 files changed

+88
-7
lines changed

server/services/auth-management/notifier.js

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,23 @@ module.exports = function (app) {
4444
user.language || 'en'
4545
);
4646

47-
const token = user.verifyToken || user.resetToken || user.changeToken;
47+
let token;
48+
49+
switch (linktype) {
50+
case 'invite-email':
51+
token = user.verifyToken;
52+
break;
53+
case 'verify':
54+
token = user.verifyToken;
55+
break;
56+
case 'reset':
57+
token = user.resetToken;
58+
break;
59+
case 'verifyChanges':
60+
token = user.changeToken;
61+
break;
62+
}
63+
4864
const hashLink = getLink(linktype, token || null);
4965
const frontURL = app.get('frontURL');
5066
const backURL = app.get('baseURL');
@@ -96,9 +112,7 @@ module.exports = function (app) {
96112
if (app.get('debug')) {
97113
const filename = String(Date.now()) + '.html';
98114
const filepath = path.join(__dirname, '../../../tmp/emails/', filename);
99-
fs.outputFile(filepath, email.html).catch(err => {
100-
app.error('Error saving email', err);
101-
});
115+
fs.outputFileSync(filepath, email.html);
102116
}
103117

104118
return app
@@ -125,7 +139,11 @@ module.exports = function (app) {
125139
user
126140
);
127141
case 'resendVerifySignup':
128-
return buildEmail('verify-email', 'Confirm signup', 'verify', user);
142+
return buildEmail(
143+
'verify-email',
144+
'Confirm signup',
145+
'verify',
146+
user);
129147
case 'verifySignup':
130148
return buildEmail(
131149
'email-verified',

test/services/auth-management.test.js

Lines changed: 65 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,73 @@
11
const assert = require('assert');
22
const app = require('../../server/app');
3+
const service = app.service('authManagement');
4+
const userService = app.service('users');
5+
const fs = require('fs-extra');
6+
const path = require('path');
7+
const cheerio = require('cheerio');
8+
let user = null;
39

410
describe('\'authManagement\' service', () => {
5-
it('registered the service', () => {
6-
const service = app.service('authManagement');
11+
before(function(done) {
12+
this.server = app.listen(3031);
13+
this.server.once('listening', () => done());
14+
});
15+
16+
after(function(done) {
17+
this.server.close(done);
18+
});
19+
20+
beforeEach(async () => {
21+
await app.get('mongooseClient').connection.dropDatabase();
22+
user = await userService.create({
23+
24+
password: '1234',
25+
name: 'Peter',
26+
role: 'admin'
27+
});
28+
});
29+
30+
afterEach(async () => {
31+
await app.get('mongooseClient').connection.dropDatabase();
32+
user = null;
33+
});
734

35+
it('registered the service', () => {
836
assert.ok(service, 'Registered the service');
937
});
38+
39+
it('can reset password', async () => {
40+
await service.create({
41+
action: 'sendResetPwd',
42+
value: {
43+
email: user.email
44+
}
45+
});
46+
47+
const token = await getTokenFromMail();
48+
49+
const result = await service.create({
50+
action: 'resetPwdLong',
51+
value: {
52+
token,
53+
password: '123456'
54+
}
55+
});
56+
assert.ok(result, 'password can be reset');
57+
});
1058
});
59+
60+
const getTokenFromMail = async () => {
61+
// Get token from tmp email file
62+
const mailDir = path.join(__dirname, '../../tmp/emails');
63+
const fileName = await fs.readdirSync(mailDir)[0];
64+
const mailFile = path.join(mailDir, fileName);
65+
const mailContent = await fs.readFileSync(mailFile, 'utf8');
66+
const $ = await cheerio.load(mailContent);
67+
let url;
68+
await $('a.btn-primary').each((i, el) => {
69+
url = el.attribs['href'];
70+
});
71+
const token = url.split('/').pop();
72+
return token;
73+
};

0 commit comments

Comments
 (0)