etherpad-lite/src/tests/backend/specs/lowerCasePadIds.js

91 lines
3.0 KiB
JavaScript

'use strict';
const assert = require('assert').strict;
const common = require('../common');
const padManager = require('../../../node/db/PadManager');
const settings = require('../../../node/utils/Settings');
describe(__filename, function () {
let agent;
const cleanUpPads = async () => {
const {padIDs} = await padManager.listAllPads();
await Promise.all(padIDs.map(async (padId) => {
if (await padManager.doesPadExist(padId)) {
const pad = await padManager.getPad(padId);
await pad.remove();
}
}));
};
let backup;
before(async function () {
backup = settings.lowerCasePadIds;
agent = await common.init();
});
beforeEach(async function () {
await cleanUpPads();
});
afterEach(async function () {
await cleanUpPads();
});
after(async function () {
settings.lowerCasePadIds = backup;
});
describe('not activated', function () {
beforeEach(async function () {
settings.lowerCasePadIds = false;
});
it('do nothing', async function () {
await agent.get('/p/UPPERCASEpad')
.expect(200);
});
});
describe('activated', function () {
beforeEach(async function () {
settings.lowerCasePadIds = true;
});
it('lowercase pad ids', async function () {
await agent.get('/p/UPPERCASEpad')
.expect(302)
.expect('location', 'uppercasepad');
});
it('keeps old pads accessible', async function () {
Object.assign(settings, {
lowerCasePadIds: false,
});
await padManager.getPad('ALREADYexistingPad', 'oldpad');
await padManager.getPad('alreadyexistingpad', 'newpad');
Object.assign(settings, {
lowerCasePadIds: true,
});
const oldPad = await agent.get('/p/ALREADYexistingPad').expect(200);
const oldPadSocket = await common.connect(oldPad);
const oldPadHandshake = await common.handshake(oldPadSocket, 'ALREADYexistingPad');
assert.equal(oldPadHandshake.data.padId, 'ALREADYexistingPad');
assert.equal(oldPadHandshake.data.collab_client_vars.initialAttributedText.text, 'oldpad\n');
const newPad = await agent.get('/p/alreadyexistingpad').expect(200);
const newPadSocket = await common.connect(newPad);
const newPadHandshake = await common.handshake(newPadSocket, 'alreadyexistingpad');
assert.equal(newPadHandshake.data.padId, 'alreadyexistingpad');
assert.equal(newPadHandshake.data.collab_client_vars.initialAttributedText.text, 'newpad\n');
});
it('disallow creation of different case pad-name via socket connection', async function () {
await padManager.getPad('maliciousattempt', 'attempt');
const newPad = await agent.get('/p/maliciousattempt').expect(200);
const newPadSocket = await common.connect(newPad);
const newPadHandshake = await common.handshake(newPadSocket, 'MaliciousAttempt');
assert.equal(newPadHandshake.data.collab_client_vars.initialAttributedText.text, 'attempt\n');
});
});
});