diff --git a/client/configuration/webpack/cspHashPlugin.js b/client/configuration/webpack/cspHashPlugin.js index 99afd46f..3b32efc0 100644 --- a/client/configuration/webpack/cspHashPlugin.js +++ b/client/configuration/webpack/cspHashPlugin.js @@ -1,7 +1,12 @@ +/* eslint-disable import/no-extraneous-dependencies -- this file is a devDependency*/ const cheerio = require("cheerio"); const crypto = require("crypto"); -HtmlWebpackPlugin = require("html-webpack-plugin"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const digest = (str) => { + const hash = crypto.createHash("sha256").update(str, "utf8").digest("base64"); + return `sha256-${hash}`; +}; class CspHashPlugin { constructor(opts) { this.opts = { ...opts }; @@ -19,10 +24,7 @@ class CspHashPlugin { if (filename) { const results = {}; results["script-hashes"] = $("script:not([src]):not([no-csp-hash])") - .map((i, elmt) => this.digest($(elmt).html())) - .get(); - results["style-hashes"] = $("style:not([href]):not([no-csp-hash])") - .map((i, elmt) => this.digest($(elmt).html())) + .map((i, elmt) => digest($(elmt).html())) .get(); const json = JSON.stringify(results); @@ -34,13 +36,10 @@ class CspHashPlugin { // Remove no-csp-hash attributes. Cheerio does not parse Jinja templates // correctly, so we brute force this with a regular expression. - data.html = data.html - .replace(/(