airboardgame/backend/webpack.plugin.js
2021-01-07 11:29:31 +01:00

41 lines
1.1 KiB
JavaScript

const crypto = require("crypto");
const { RawSource } = require("webpack-sources");
class EncryptPlugin {
constructor({ algorithm = "aes-256-cbc", key }) {
this.algorithm = algorithm;
this.key = key;
}
encrypt(buffer, key, algorithm) {
const iv = crypto.randomBytes(16);
let cipher = crypto.createCipheriv(
algorithm,
Buffer.from(key, "base64"),
iv
);
let encrypted = cipher.update(buffer);
encrypted = Buffer.concat([encrypted, cipher.final()]);
return {
iv: iv.toString("base64"),
encryptedData: encrypted.toString("base64"),
};
}
apply(compiler) {
compiler.hooks.compilation.tap("EncryptPlugin", (compilation) => {
compilation.hooks.afterProcessAssets.tap("EncryptPlugin", () => {
console.log("Encrypt setup.js content.");
compilation.updateAsset("setup.js", (rawSource) => {
return new RawSource(
JSON.stringify(
this.encrypt(rawSource.buffer(), this.key, this.algorithm)
)
);
});
});
});
}
}
module.exports = EncryptPlugin;