X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Fclient-html.ts;h=e7e439bfe4bee38fbc00eb38c77fbb329efbe5ec;hb=f304a1580b5ce7b6c5f9e25cd3ddc63ca8d8c6a1;hp=e093d35f733540a4cd2d1e13e53bf62415e7e4e8;hpb=352819ef921e45381b3fbb17072926103b320e73;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/client-html.ts b/server/lib/client-html.ts index e093d35f7..e7e439bfe 100644 --- a/server/lib/client-html.ts +++ b/server/lib/client-html.ts @@ -1,13 +1,15 @@ -import * as express from 'express' +import express from 'express' import { readFile } from 'fs-extra' import { join } from 'path' import validator from 'validator' +import { toCompleteUUID } from '@server/helpers/custom-validators/misc' import { escapeHTML } from '@shared/core-utils/renderer' +import { sha256 } from '@shared/extra-utils' import { HTMLServerConfig } from '@shared/models' import { buildFileLocale, getDefaultLocale, is18nLocale, POSSIBLE_LOCALES } from '../../shared/core-utils/i18n/i18n' import { HttpStatusCode } from '../../shared/models/http/http-error-codes' import { VideoPlaylistPrivacy, VideoPrivacy } from '../../shared/models/videos' -import { isTestInstance, sha256 } from '../helpers/core-utils' +import { isTestInstance } from '../helpers/core-utils' import { logger } from '../helpers/logger' import { mdToPlainText } from '../helpers/markdown' import { CONFIG } from '../initializers/config' @@ -27,7 +29,6 @@ import { VideoChannelModel } from '../models/video/video-channel' import { VideoPlaylistModel } from '../models/video/video-playlist' import { MAccountActor, MChannelActor } from '../types/models' import { ServerConfigManager } from './server-config-manager' -import { toCompleteUUID } from '@server/helpers/custom-validators/misc' type Tags = { ogType: string @@ -38,11 +39,12 @@ type Tags = { numberOfItems: number } - siteName: string - title: string + escapedSiteName: string + escapedTitle: string + escapedDescription: string + url: string originUrl: string - description: string disallowIndexation?: boolean @@ -100,15 +102,15 @@ class ClientHtml { res.status(HttpStatusCode.NOT_FOUND_404) return html } + const description = mdToPlainText(video.description) - let customHtml = ClientHtml.addTitleTag(html, escapeHTML(video.name)) - customHtml = ClientHtml.addDescriptionTag(customHtml, mdToPlainText(video.description)) + let customHtml = ClientHtml.addTitleTag(html, video.name) + customHtml = ClientHtml.addDescriptionTag(customHtml, description) const url = WEBSERVER.URL + video.getWatchStaticPath() const originUrl = video.url - const title = escapeHTML(video.name) - const siteName = escapeHTML(CONFIG.INSTANCE.NAME) - const description = mdToPlainText(video.description) + const title = video.name + const siteName = CONFIG.INSTANCE.NAME const image = { url: WEBSERVER.URL + video.getPreviewStaticPath() @@ -128,9 +130,9 @@ class ClientHtml { customHtml = ClientHtml.addTags(customHtml, { url, originUrl, - siteName, - title, - description, + escapedSiteName: escapeHTML(siteName), + escapedTitle: escapeHTML(title), + escapedDescription: escapeHTML(description), image, embed, ogType, @@ -161,14 +163,15 @@ class ClientHtml { return html } - let customHtml = ClientHtml.addTitleTag(html, escapeHTML(videoPlaylist.name)) - customHtml = ClientHtml.addDescriptionTag(customHtml, mdToPlainText(videoPlaylist.description)) + const description = mdToPlainText(videoPlaylist.description) + + let customHtml = ClientHtml.addTitleTag(html, videoPlaylist.name) + customHtml = ClientHtml.addDescriptionTag(customHtml, description) const url = WEBSERVER.URL + videoPlaylist.getWatchStaticPath() const originUrl = videoPlaylist.url - const title = escapeHTML(videoPlaylist.name) - const siteName = escapeHTML(CONFIG.INSTANCE.NAME) - const description = mdToPlainText(videoPlaylist.description) + const title = videoPlaylist.name + const siteName = CONFIG.INSTANCE.NAME const image = { url: videoPlaylist.getThumbnailUrl() @@ -190,10 +193,10 @@ class ClientHtml { customHtml = ClientHtml.addTags(customHtml, { url, originUrl, - siteName, + escapedSiteName: escapeHTML(siteName), + escapedTitle: escapeHTML(title), + escapedDescription: escapeHTML(description), embed, - title, - description, image, list, ogType, @@ -259,14 +262,15 @@ class ClientHtml { return ClientHtml.getIndexHTML(req, res) } - let customHtml = ClientHtml.addTitleTag(html, escapeHTML(entity.getDisplayName())) - customHtml = ClientHtml.addDescriptionTag(customHtml, mdToPlainText(entity.description)) + const description = mdToPlainText(entity.description) + + let customHtml = ClientHtml.addTitleTag(html, entity.getDisplayName()) + customHtml = ClientHtml.addDescriptionTag(customHtml, description) const url = entity.getLocalUrl() const originUrl = entity.Actor.url - const siteName = escapeHTML(CONFIG.INSTANCE.NAME) - const title = escapeHTML(entity.getDisplayName()) - const description = mdToPlainText(entity.description) + const siteName = CONFIG.INSTANCE.NAME + const title = entity.getDisplayName() const image = { url: entity.Actor.getAvatarUrl(), @@ -281,9 +285,9 @@ class ClientHtml { customHtml = ClientHtml.addTags(customHtml, { url, originUrl, - title, - siteName, - description, + escapedTitle: escapeHTML(title), + escapedSiteName: escapeHTML(siteName), + escapedDescription: escapeHTML(description), image, ogType, twitterCard, @@ -303,7 +307,6 @@ class ClientHtml { let html = buffer.toString() - if (paramLang) html = ClientHtml.addHtmlLang(html, paramLang) html = ClientHtml.addManifestContentHash(html) html = ClientHtml.addFaviconContentHash(html) html = ClientHtml.addLogoContentHash(html) @@ -336,6 +339,11 @@ class ClientHtml { lang = req.acceptsLanguages(POSSIBLE_LOCALES) || getDefaultLocale() } + logger.debug( + 'Serving %s HTML language', buildFileLocale(lang), + { cookie: req.cookies?.clientLanguage, paramLang, acceptLanguage: req.headers['accept-language'] } + ) + return join(__dirname, '../../../client/dist/' + buildFileLocale(lang) + '/index.html') } @@ -343,10 +351,6 @@ class ClientHtml { return join(__dirname, '../../../client/dist/standalone/videos/embed.html') } - private static addHtmlLang (htmlStringPage: string, paramLang: string) { - return htmlStringPage.replace('', ``) - } - private static addManifestContentHash (htmlStringPage: string) { return htmlStringPage.replace('[manifestContentHash]', FILES_CONTENT_HASH.MANIFEST) } @@ -363,14 +367,14 @@ class ClientHtml { let text = title || CONFIG.INSTANCE.NAME if (title) text += ` - ${CONFIG.INSTANCE.NAME}` - const titleTag = `