1234567891011121314151617181920212223242526272829303132333435363738394041 |
- 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;
|