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