mirror of
https://github.com/cryptpad/cryptpad.git
synced 2026-09-12 19:49:59 +05:00
Link OpenGraph data to the right instance URL through a build mechanism
This commit is contained in:
parent
5441d758b9
commit
341b8a3c85
107
build.js
Normal file
107
build.js
Normal 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 */
|
||||
BIN
customize.dist/images/opengraph_preview/og-default.png
Normal file
BIN
customize.dist/images/opengraph_preview/og-default.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
@ -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/"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user