fix #783: Add sub-resource integrity (SRI) hash to all CDN resources

Also update update-monaco script to update SRI integrity hash when performing a monaco upgrade.
This commit is contained in:
Jon Bake
2022-07-02 14:56:00 -05:00
parent ed093e3917
commit 5b9823298e
4 changed files with 43 additions and 19 deletions
-12
View File
@@ -1,12 +0,0 @@
#!/bin/bash
monacoVersion="$(jq -r '.dependencies."monaco-editor"' package.json)"
monacoVersion="${monacoVersion:1}"
if [[ $(uname) == "Darwin" ]];
then
sed -i '' -E "s/monaco-editor\/[^/]*/monaco-editor\/$monacoVersion/g" ./src/app.html
else
sed -i'' -E "s/monaco-editor\/[^/]*/monaco-editor\/$monacoVersion/g" ./src/app.html
fi
+32
View File
@@ -0,0 +1,32 @@
import fs from 'fs';
import path from 'path';
// parse monaco version out of package.json
const packageJson = JSON.parse(fs.readFileSync('package.json'));
const monacoVersion = packageJson.dependencies['monaco-editor'].substring(1);
// fetch monaco sri info from cdnjs api
const cdnjsAPIResp = await fetch(
`https://api.cdnjs.com/libraries/monaco-editor/${monacoVersion}?fields=sri`
);
if (cdnjsAPIResp.ok) {
const respJson = await cdnjsAPIResp.json();
let appHtml = fs.readFileSync(path.join('src', 'app.html'), 'utf8');
// update monaco version of every asset in app.html
appHtml = appHtml.replaceAll(/[0-9.]+\/min\/vs/g, `${monacoVersion}/min/vs`);
// update sri integrity value for each asset
for (let monacoAssetMatch of appHtml.matchAll(/min\/vs\/[^"]+/g)) {
let monacoAsset = monacoAssetMatch[0];
appHtml = appHtml.replace(
new RegExp(
monacoAsset.replaceAll('/', '\\/').replaceAll('.', '\\.') + '" integrity=".+"',
'g'
),
`${monacoAsset}" integrity="${respJson.sri[monacoAsset]}"`
);
}
fs.writeFileSync(path.join('src', 'app.html'), appHtml);
} else {
throw Error('Unable to fetch monaco sri data from cdnjs api.');
}