refactor: Add internal method Utils.encodeForUrl for properly encoding email addresses for use in URLs (#9541)
This commit is contained in:
@@ -1,6 +1,17 @@
|
|||||||
const Utils = require('../src/Utils');
|
const Utils = require('../src/Utils');
|
||||||
|
|
||||||
describe('Utils', () => {
|
describe('Utils', () => {
|
||||||
|
describe('encodeForUrl', () => {
|
||||||
|
it('should properly escape email with all special ASCII characters for use in URLs', async () => {
|
||||||
|
const values = [
|
||||||
|
{ input: `!\"'),.:;<>?]^}`, output: '%21%22%27%29%2C%2E%3A%3B%3C%3E%3F%5D%5E%7D' },
|
||||||
|
]
|
||||||
|
for (const value of values) {
|
||||||
|
expect(Utils.encodeForUrl(value.input)).toBe(value.output);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('addNestedKeysToRoot', () => {
|
describe('addNestedKeysToRoot', () => {
|
||||||
it('should move the nested keys to root of object', async () => {
|
it('should move the nested keys to root of object', async () => {
|
||||||
const obj = {
|
const obj = {
|
||||||
|
|||||||
@@ -282,7 +282,6 @@ export class UserController extends AdaptableController {
|
|||||||
user = await this.setPasswordResetToken(email);
|
user = await this.setPasswordResetToken(email);
|
||||||
}
|
}
|
||||||
const token = encodeURIComponent(user._perishable_token);
|
const token = encodeURIComponent(user._perishable_token);
|
||||||
|
|
||||||
const link = buildEmailLink(this.config.requestResetPasswordURL, token, this.config);
|
const link = buildEmailLink(this.config.requestResetPasswordURL, token, this.config);
|
||||||
const options = {
|
const options = {
|
||||||
appName: this.config.appName,
|
appName: this.config.appName,
|
||||||
|
|||||||
11
src/Utils.js
11
src/Utils.js
@@ -399,6 +399,17 @@ class Utils {
|
|||||||
}
|
}
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Encodes a string to be used in a URL.
|
||||||
|
* @param {String} input The string to encode.
|
||||||
|
* @returns {String} The encoded string.
|
||||||
|
*/
|
||||||
|
static encodeForUrl(input) {
|
||||||
|
return encodeURIComponent(input).replace(/[!'.()*]/g, char =>
|
||||||
|
'%' + char.charCodeAt(0).toString(16).toUpperCase()
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = Utils;
|
module.exports = Utils;
|
||||||
|
|||||||
Reference in New Issue
Block a user