Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add installationId, ip, resendRequest to arguments passed to verifyUserEmails on verification email request #8873

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions spec/EmailVerificationToken.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
const Auth = require('../lib/Auth');
const Config = require('../lib/Config');
const request = require('../lib/request');
const MockEmailAdapterWithOptions = require('./support/MockEmailAdapterWithOptions');

describe('Email Verification Token Expiration: ', () => {
it('show the invalid verification link page, if the user clicks on the verify email link after the email verify token expires', done => {
Expand Down Expand Up @@ -794,6 +795,41 @@ describe('Email Verification Token Expiration: ', () => {
});
});

it('provides function arguments in verifyUserEmails on verificationEmailRequest', async () => {
const user = new Parse.User();
user.setUsername('user');
user.setPassword('pass');
user.set('email', '[email protected]');
await user.signUp();

const verifyUserEmails = {
method: async (params) => {
expect(params.object).toBeInstanceOf(Parse.User);
expect(params.ip).toBeDefined();
expect(params.master).toBeDefined();
expect(params.installationId).toBeDefined();
expect(params.resendRequest).toBeTrue();
return true;
},
};
const verifyUserEmailsSpy = spyOn(verifyUserEmails, 'method').and.callThrough();
await reconfigureServer({
appName: 'test',
publicServerURL: 'http://localhost:1337/1',
verifyUserEmails: verifyUserEmails.method,
preventLoginWithUnverifiedEmail: verifyUserEmails.method,
preventSignupWithUnverifiedEmail: true,
emailAdapter: MockEmailAdapterWithOptions({
fromAddress: '[email protected]',
apiKey: 'k',
domain: 'd',
}),
});

await expectAsync(Parse.User.requestEmailVerification('[email protected]')).toBeResolved();
expect(verifyUserEmailsSpy).toHaveBeenCalledTimes(1);
});

it('should throw with invalid emailVerifyTokenReuseIfValid', async done => {
const sendEmailOptions = [];
const emailAdapter = {
Expand Down
12 changes: 9 additions & 3 deletions src/Controllers/UserController.js
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ export class UserController extends AdaptableController {
* @param user
* @returns {*}
*/
async regenerateEmailVerifyToken(user, master) {
async regenerateEmailVerifyToken(user, master, installationId, ip) {
const { _email_verify_token } = user;
let { _email_verify_token_expires_at } = user;
if (_email_verify_token_expires_at && _email_verify_token_expires_at.__type === 'Date') {
Expand All @@ -211,7 +211,13 @@ export class UserController extends AdaptableController {
) {
return Promise.resolve();
}
const shouldSend = await this.setEmailVerifyToken(user, { user, master });
const shouldSend = await this.setEmailVerifyToken(user, {
object: Parse.User.fromJSON(Object.assign({ className: '_User' }, user)),
master,
installationId,
ip,
resendRequest: true
});
if (!shouldSend) {
return;
}
Expand All @@ -223,7 +229,7 @@ export class UserController extends AdaptableController {
if (!aUser || aUser.emailVerified) {
throw undefined;
}
const generate = await this.regenerateEmailVerifyToken(aUser, req.auth?.isMaster);
const generate = await this.regenerateEmailVerifyToken(aUser, req.auth?.isMaster, req.auth?.installationId, req.ip);
if (generate) {
this.sendVerificationEmail(aUser, req);
}
Expand Down
2 changes: 1 addition & 1 deletion src/Routers/UsersRouter.js
Original file line number Diff line number Diff line change
Expand Up @@ -490,7 +490,7 @@ export class UsersRouter extends ClassesRouter {
}

const userController = req.config.userController;
const send = await userController.regenerateEmailVerifyToken(user, req.auth.isMaster);
const send = await userController.regenerateEmailVerifyToken(user, req.auth.isMaster, req.auth.installationId, req.ip);
if (send) {
userController.sendVerificationEmail(user, req);
}
Expand Down
Loading