Add tests to ensure we don't show shared rooms in the archive
Tests for https://github.com/matrix-org/matrix-public-archive/pull/239
This commit is contained in:
parent
d1a4117441
commit
53de3b64ad
|
@ -22,7 +22,6 @@ const matrixServerName = config.get('matrixServerName');
|
||||||
assert(matrixServerName);
|
assert(matrixServerName);
|
||||||
const matrixAccessToken = config.get('matrixAccessToken');
|
const matrixAccessToken = config.get('matrixAccessToken');
|
||||||
assert(matrixAccessToken);
|
assert(matrixAccessToken);
|
||||||
const stopSearchEngineIndexing = config.get('stopSearchEngineIndexing');
|
|
||||||
|
|
||||||
const router = express.Router({
|
const router = express.Router({
|
||||||
caseSensitive: true,
|
caseSensitive: true,
|
||||||
|
@ -71,7 +70,8 @@ router.get(
|
||||||
}
|
}
|
||||||
|
|
||||||
// We index the room directory unless the config says we shouldn't index anything
|
// We index the room directory unless the config says we shouldn't index anything
|
||||||
const shouldIndex = !stopSearchEngineIndexing;
|
const stopSearchEngineIndexingFromConfig = config.get('stopSearchEngineIndexing');
|
||||||
|
const shouldIndex = !stopSearchEngineIndexingFromConfig;
|
||||||
|
|
||||||
const pageOptions = {
|
const pageOptions = {
|
||||||
title: `Matrix Public Archive`,
|
title: `Matrix Public Archive`,
|
||||||
|
|
|
@ -57,7 +57,6 @@ const matrixServerUrl = config.get('matrixServerUrl');
|
||||||
assert(matrixServerUrl);
|
assert(matrixServerUrl);
|
||||||
const matrixAccessToken = config.get('matrixAccessToken');
|
const matrixAccessToken = config.get('matrixAccessToken');
|
||||||
assert(matrixAccessToken);
|
assert(matrixAccessToken);
|
||||||
const stopSearchEngineIndexing = config.get('stopSearchEngineIndexing');
|
|
||||||
|
|
||||||
const matrixPublicArchiveURLCreator = new MatrixPublicArchiveURLCreator(basePath);
|
const matrixPublicArchiveURLCreator = new MatrixPublicArchiveURLCreator(basePath);
|
||||||
|
|
||||||
|
@ -889,7 +888,8 @@ router.get(
|
||||||
|
|
||||||
// Default to no indexing (safe default)
|
// Default to no indexing (safe default)
|
||||||
let shouldIndex = false;
|
let shouldIndex = false;
|
||||||
if (stopSearchEngineIndexing) {
|
const stopSearchEngineIndexingFromConfig = config.get('stopSearchEngineIndexing');
|
||||||
|
if (stopSearchEngineIndexingFromConfig) {
|
||||||
shouldIndex = false;
|
shouldIndex = false;
|
||||||
} else {
|
} else {
|
||||||
// Otherwise we only allow search engines to index `world_readable` rooms
|
// Otherwise we only allow search engines to index `world_readable` rooms
|
||||||
|
|
|
@ -2686,15 +2686,50 @@ describe('matrix-public-archive', () => {
|
||||||
assert.strictEqual(dom.document.querySelector(`meta[name="robots"]`), null);
|
assert.strictEqual(dom.document.querySelector(`meta[name="robots"]`), null);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('search engines not allowed to index `public` room', async () => {
|
it('search engines not allowed to access public room with non-`world_readable` history visibility', async () => {
|
||||||
const client = await getTestClientForHs(testMatrixServerUrl1);
|
const client = await getTestClientForHs(testMatrixServerUrl1);
|
||||||
const roomId = await createTestRoom(client, {
|
const roomId = await createTestRoom(client, {
|
||||||
// The default options for the test rooms adds a
|
// Set as `shared` since it's the next most permissive history visibility
|
||||||
// `m.room.history_visiblity` state event so we override that here so
|
// after `world_readable` but still not allowed to be accesible in the
|
||||||
// it's only a public room.
|
// archive.
|
||||||
initial_state: [],
|
initial_state: [
|
||||||
|
{
|
||||||
|
type: 'm.room.history_visibility',
|
||||||
|
state_key: '',
|
||||||
|
content: {
|
||||||
|
history_visibility: 'shared',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
archiveUrl = matrixPublicArchiveURLCreator.archiveUrlForRoom(roomId);
|
||||||
|
await fetchEndpointAsText(archiveUrl);
|
||||||
|
assert.fail(
|
||||||
|
new TestError(
|
||||||
|
'We expect the request to fail with a 403 since the archive should not be able to view a non-world_readable room but it succeeded'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
} catch (err) {
|
||||||
|
if (err instanceof TestError) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
assert.strictEqual(
|
||||||
|
err.response.status,
|
||||||
|
403,
|
||||||
|
`Expected err.response.status=${err?.response?.status} to be 403 but error was: ${err.stack}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Configuring `stopSearchEngineIndexing` will stop search engine indexing', async () => {
|
||||||
|
// Disable search engine indexing across the entire instance
|
||||||
|
config.set('stopSearchEngineIndexing', true);
|
||||||
|
|
||||||
|
const client = await getTestClientForHs(testMatrixServerUrl1);
|
||||||
|
const roomId = await createTestRoom(client);
|
||||||
|
|
||||||
archiveUrl = matrixPublicArchiveURLCreator.archiveUrlForRoom(roomId);
|
archiveUrl = matrixPublicArchiveURLCreator.archiveUrlForRoom(roomId);
|
||||||
const { data: archivePageHtml } = await fetchEndpointAsText(archiveUrl);
|
const { data: archivePageHtml } = await fetchEndpointAsText(archiveUrl);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue