Link OpenGraph data to the right instance URL through a build mechanism

This commit is contained in:
Maxime Cesson 2022-07-21 11:53:06 +02:00
parent 5441d758b9
commit 341b8a3c85
14 changed files with 111 additions and 41 deletions

107
build.js Normal file
View File

@ -0,0 +1,107 @@
var Fs = require("fs");
var Fse = require("fs-extra");
var Path = require("path");
var config = require("./lib/load-config");
var swap = function (s, o) {
return s
.replace(/\{\{([^}]+?)\}\}/g, function (all, token) {
var content = o[token];
if (typeof(content) === 'number') {
content = String(content);
}
if (typeof(content) !== 'string') {
console.error("expected {{%s}}", token);
throw new Error("invalid input");
}
if (!content) {
console.error("expected {{%s}}", token);
throw new Error("insufficient input");
}
return content;
});
};
const ogData = `
<meta property="og:url" content="{{rootUrl}}/{{app}}">
<meta property="og:type" content="website">
<meta property="og:title" content="{{title}}">
<meta property="og:image" content="{{rootUrl}}/customize/images/opengraph_preview/{{image}}">`;
var previewExists = function (name) {
if (Fs.existsSync('customize/images/opengraph_preview/')) {
return Fs.existsSync(`customize/images/opengraph_preview/${name}`);
}
return Fs.existsSync(`customize.dist/images/opengraph_preview/${name}`);
};
var templateOG = function (a, type) {
return swap(ogData, {
rootUrl: config.httpUnsafeOrigin,
app: a,
title: type && `Encrypted ${type}` || 'CryptPad',
image: previewExists(`og-${a}.png`) && `og-${a}.png` || `og-default.png`
});
};
var insert = function (src, template) {
var matchs = src.match(/(<meta .*>)|(.*<\/title>)/g);
if (!matchs || !matchs.length) {
return src;
}
return src.replace(matchs.at(-1), `$& ${template}`);
};
var buildPath = './customize/www';
var tmpPath = 'CRYPTPAD_TEMP_BUILD';
var write = function (content, dest) {
console.log(`Creating ${dest}`);
var path = Path.join(tmpPath, dest);
var dirPath = Path.dirname(path);
Fse.mkdirpSync(dirPath);
Fs.writeFileSync(path, content);
};
console.log("Creating target directories");
// remove tmp path so we start fresh
Fse.removeSync(tmpPath);
Fse.mkdirpSync(tmpPath);
var srcAppTypes = Fs.readFileSync('./www/common/translations/messages.json', 'utf8');
var types = JSON.parse(srcAppTypes).type;
var appIndexesToBuild = [
'sheet',
'doc',
'presentation',
'pad',
'kanban',
'code',
'form',
'poll',
'whiteboard',
'slide'
];
appIndexesToBuild.forEach(function (app) {
console.log(`Parsing ./www/${app}/index.html`);
var src = Fs.readFileSync(`./www/${app}/index.html`, 'utf8');
write(
insert(src, templateOG(app, types[app])),
`${app}/index.html`
);
});
Fse.removeSync(buildPath);
Fse.moveSync(tmpPath, buildPath);
/* Fse.renameSync(tmpPath, buildPath); // is rename doing more than move here?
// cos not working with buildPath like 'pre-path/main-dir'. If so,
var dirPath = Path.dirname(path);
Fse.mkdirpSync(dirPath); // may work */

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -50,6 +50,8 @@
"test": "node scripts/TestSelenium.js",
"test-rpc": "cd scripts/tests && node test-rpc",
"template": "cd customize.dist/src && for page in ../index.html ../contact.html ../features.html ../../www/login/index.html ../../www/register/index.html ../../www/user/index.html;do echo $page; cp template.html $page; done;",
"evict-inactive": "node scripts/evict-inactive.js"
"evict-inactive": "node scripts/evict-inactive.js",
"build": "node build.js",
"clean-built": "rm -rf customize/www/"
}
}

View File

@ -148,6 +148,7 @@ app.use(function (req, res, next) {
next();
});
app.use(Express.static(__dirname + '/customize/www'));
app.use(Express.static(__dirname + '/www'));
// FIXME I think this is a regression caused by a recent PR

View File

@ -5,10 +5,6 @@
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="referrer" content="no-referrer" />
<meta property="og:url" content="https://cryptpad.fr/code/">
<meta property="og:type" content="website">
<meta property="og:title" content="Encrypted Code">
<meta property="og:image" content="https://cryptpad.fr/customize/images/opengraph_preview/og-code.png">
<script async data-bootload="/common/sframe-app-outer.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<link href="/customize/src/outer.css?ver=1.3.2" rel="stylesheet" type="text/css">
</head>

View File

@ -5,10 +5,6 @@
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="referrer" content="no-referrer" />
<meta property="og:url" content="https://cryptpad.fr/doc/">
<meta property="og:type" content="website">
<meta property="og:title" content="Encrypted Document">
<meta property="og:image" content="https://cryptpad.fr/customize/images/opengraph_preview/og-doc.png">
<script async data-bootload="/common/onlyoffice/main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<link href="/customize/src/outer.css?ver=1.3.2" rel="stylesheet" type="text/css">
</head>

View File

@ -5,10 +5,6 @@
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="referrer" content="no-referrer" />
<meta property="og:url" content="https://cryptpad.fr/form/">
<meta property="og:type" content="website">
<meta property="og:title" content="Encrypted Form">
<meta property="og:image" content="https://cryptpad.fr/customize/images/opengraph_preview/og-form.png">
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<link href="/customize/src/outer.css?ver=1.3.2" rel="stylesheet" type="text/css">
</head>

View File

@ -6,10 +6,6 @@
<meta content="text/html; charset=utf-8" http-equiv="content-type" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="referrer" content="no-referrer" />
<meta property="og:url" content="https://cryptpad.fr/kanban/">
<meta property="og:type" content="website">
<meta property="og:title" content="Encrypted Kanban">
<meta property="og:image" content="https://cryptpad.fr/customize/images/opengraph_preview/og-kanban.png">
<script async data-bootload="/common/sframe-app-outer.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<link href="/customize/src/outer.css?ver=1.3.2" rel="stylesheet" type="text/css">
</head>

View File

@ -5,10 +5,6 @@
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="referrer" content="no-referrer" />
<meta property="og:url" content="https://cryptpad.fr/pad/">
<meta property="og:type" content="website">
<meta property="og:title" content="Encrypted Rich text">
<meta property="og:image" content="https://cryptpad.fr/customize/images/opengraph_preview/og-pad.png">
<script async data-bootload="/common/sframe-app-outer.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<link href="/customize/src/outer.css?ver=1.3.2" rel="stylesheet" type="text/css">
</head>

View File

@ -5,10 +5,6 @@
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="referrer" content="no-referrer" />
<meta property="og:url" content="https://cryptpad.fr/poll/">
<meta property="og:type" content="website">
<meta property="og:title" content="Encrypted Poll">
<meta property="og:image" content="https://cryptpad.fr/customize/images/opengraph_preview/og-poll.png">
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<link href="/customize/src/outer.css?ver=1.3.2" rel="stylesheet" type="text/css">
</head>

View File

@ -5,10 +5,6 @@
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="referrer" content="no-referrer" />
<meta property="og:url" content="https://cryptpad.fr/presentation/">
<meta property="og:type" content="website">
<meta property="og:title" content="Encrypted Presentation">
<meta property="og:image" content="https://cryptpad.fr/customize/images/opengraph_preview/og-presentation.png">
<script async data-bootload="/common/onlyoffice/main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<link href="/customize/src/outer.css?ver=1.3.2" rel="stylesheet" type="text/css">
</head>

View File

@ -5,10 +5,6 @@
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="referrer" content="no-referrer" />
<meta property="og:url" content="https://cryptpad.fr/sheet/">
<meta property="og:type" content="website">
<meta property="og:title" content="Encrypted Sheet">
<meta property="og:image" content="https://cryptpad.fr/customize/images/opengraph_preview/og-sheet.png">
<script async data-bootload="/common/onlyoffice/main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<link href="/customize/src/outer.css?ver=1.3.2" rel="stylesheet" type="text/css">
</head>

View File

@ -5,10 +5,6 @@
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="referrer" content="no-referrer" />
<meta property="og:url" content="https://cryptpad.fr/slide/">
<meta property="og:type" content="website">
<meta property="og:title" content="Encrypted Markdown slides">
<meta property="og:image" content="https://cryptpad.fr/customize/images/opengraph_preview/og-slide.png">
<script async data-bootload="/common/sframe-app-outer.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<link href="/customize/src/outer.css?ver=1.3.2" rel="stylesheet" type="text/css">
</head>

View File

@ -5,10 +5,6 @@
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="referrer" content="no-referrer" />
<meta property="og:url" content="https://cryptpad.fr/whiteboard/">
<meta property="og:type" content="website">
<meta property="og:title" content="Encrypted Whiteboard">
<meta property="og:image" content="https://cryptpad.fr/customize/images/opengraph_preview/og-whiteboard.png">
<script async data-bootload="/common/sframe-app-outer.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<link href="/customize/src/outer.css?ver=1.3.2" rel="stylesheet" type="text/css">
</head>