41 lines
1.1 KiB
JavaScript
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;
|