Merge branch 'main' into madlittlemods/prevent-join-reason-spam

This commit is contained in:
Eric Eastwood 2023-06-22 01:51:55 -05:00
commit 19031d96e8
7 changed files with 25 additions and 6 deletions

View File

@ -6,6 +6,7 @@
- Remove `libera.chat` as a default since their rooms are not accessible in the archive, https://github.com/matrix-org/matrix-public-archive/pull/263 - Remove `libera.chat` as a default since their rooms are not accessible in the archive, https://github.com/matrix-org/matrix-public-archive/pull/263
- Add reason why the archive bot is joining the room, https://github.com/matrix-org/matrix-public-archive/pull/262 - Add reason why the archive bot is joining the room, https://github.com/matrix-org/matrix-public-archive/pull/262
- Add `/faq` redirect, https://github.com/matrix-org/matrix-public-archive/pull/265 - Add `/faq` redirect, https://github.com/matrix-org/matrix-public-archive/pull/265
- Use `rel=canonical` link to de-duplicate event permalinks, https://github.com/matrix-org/matrix-public-archive/pull/266
# 0.1.0 - 2023-05-11 # 0.1.0 - 2023-05-11

View File

@ -69,14 +69,14 @@ async function _renderHydrogenToStringUnsafe(renderOptions) {
assert(renderOptions.vmRenderScriptFilePath); assert(renderOptions.vmRenderScriptFilePath);
assert(renderOptions.vmRenderContext); assert(renderOptions.vmRenderContext);
assert(renderOptions.pageOptions); assert(renderOptions.pageOptions);
assert(renderOptions.pageOptions.locationHref); assert(renderOptions.pageOptions.locationUrl);
assert(renderOptions.pageOptions.cspNonce); assert(renderOptions.pageOptions.cspNonce);
const { dom, vmContext } = createDomAndSetupVmContext(); const { dom, vmContext } = createDomAndSetupVmContext();
// A small `window.location` stub // A small `window.location` stub
if (!dom.window.location) { if (!dom.window.location) {
const locationUrl = new URL(renderOptions.pageOptions.locationHref); const locationUrl = new URL(renderOptions.pageOptions.locationUrl);
dom.window.location = {}; dom.window.location = {};
[ [
'hash', 'hash',

View File

@ -71,6 +71,11 @@ function renderPageHtml({
metaImageUrl = pageOptions.imageUrl; metaImageUrl = pageOptions.imageUrl;
} }
let maybeRelCanonical = '';
if (pageOptions.canonicalUrl) {
maybeRelCanonical = sanitizeHtml(`<link rel="canonical" href="${pageOptions.canonicalUrl}">`);
}
const pageHtml = ` const pageHtml = `
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
@ -83,6 +88,7 @@ function renderPageHtml({
${sanitizeHtml(`<meta property="og:image" content="${metaImageUrl}">`)} ${sanitizeHtml(`<meta property="og:image" content="${metaImageUrl}">`)}
<link rel="icon" href="${pageAssetUrls.faviconIco}" sizes="any"> <link rel="icon" href="${pageAssetUrls.faviconIco}" sizes="any">
<link rel="icon" href="${pageAssetUrls.faviconSvg}" type="image/svg+xml"> <link rel="icon" href="${pageAssetUrls.faviconSvg}" type="image/svg+xml">
${maybeRelCanonical}
${styles ${styles
.map( .map(
(styleUrl) => (styleUrl) =>

View File

@ -86,7 +86,7 @@ async function timeoutMiddleware(req, res, next) {
title: `Server timeout - Matrix Public Archive`, title: `Server timeout - Matrix Public Archive`,
description: `Unable to respond in time (${requestTimeoutMs / 1000}s)`, description: `Unable to respond in time (${requestTimeoutMs / 1000}s)`,
entryPoint: 'client/js/entry-client-timeout.js', entryPoint: 'client/js/entry-client-timeout.js',
locationHref: urlJoin(basePath, req.originalUrl), locationUrl: urlJoin(basePath, req.originalUrl),
// We don't have a Matrix room so we don't know whether or not to index. Just choose // We don't have a Matrix room so we don't know whether or not to index. Just choose
// a safe-default of false. // a safe-default of false.
shouldIndex: false, shouldIndex: false,

View File

@ -17,7 +17,7 @@ function clientSideRoomAliasHashRedirectRoute(req, res) {
title: `Page not found - Matrix Public Archive`, title: `Page not found - Matrix Public Archive`,
description: `This page does not exist but we may be able to redirect you to the right place.`, description: `This page does not exist but we may be able to redirect you to the right place.`,
entryPoint: 'client/js/entry-client-room-alias-hash-redirect.js', entryPoint: 'client/js/entry-client-room-alias-hash-redirect.js',
locationHref: urlJoin(basePath, req.originalUrl), locationUrl: urlJoin(basePath, req.originalUrl),
// We don't have a Matrix room so we don't know whether or not to index. Just choose // We don't have a Matrix room so we don't know whether or not to index. Just choose
// a safe-default of false. // a safe-default of false.
shouldIndex: false, shouldIndex: false,

View File

@ -78,7 +78,7 @@ router.get(
description: description:
'Browse thousands of rooms using Matrix. The new portal into the Matrix ecosystem.', 'Browse thousands of rooms using Matrix. The new portal into the Matrix ecosystem.',
entryPoint: 'client/js/entry-client-room-directory.js', entryPoint: 'client/js/entry-client-room-directory.js',
locationHref: urlJoin(basePath, req.originalUrl), locationUrl: urlJoin(basePath, req.originalUrl),
shouldIndex, shouldIndex,
cspNonce: res.locals.cspNonce, cspNonce: res.locals.cspNonce,
}; };

View File

@ -916,7 +916,19 @@ router.get(
}), }),
blockedBySafeSearch: isNsfw, blockedBySafeSearch: isNsfw,
entryPoint: 'client/js/entry-client-hydrogen.js', entryPoint: 'client/js/entry-client-hydrogen.js',
locationHref: urlJoin(basePath, req.originalUrl), locationUrl: urlJoin(basePath, req.originalUrl),
canonicalUrl: matrixPublicArchiveURLCreator.archiveUrlForDate(
roomIdOrAlias,
new Date(toTimestamp),
{
preferredPrecision: precisionFromUrl,
// We purposely omit `scrollStartEventId` here because the canonical location
// for any given event ID is the page it resides on.
//
// We can avoid passing along the `viaServers` because we already joined the
// room above (see `ensureRoomJoined`).
}
),
shouldIndex, shouldIndex,
cspNonce: res.locals.cspNonce, cspNonce: res.locals.cspNonce,
}; };