'use strict' const crypto = require('crypto') const fs = require('fs') const path = require('path') const util = require('util') const readFile = util.promisify(fs.readFile) const writeFile = util.promisify(fs.writeFile) const readdir = util.promisify(fs.readdir) const regexes = [ { from: //g, to: '' }, { from: //g, to: '' }, { from: //g, to: '' }, { from: //g, to: '' }, { from: //g, to: '' } ] function parseWhitelist (data) { const lines = data.split('\n').slice(1) const result = {} for (const line of lines) { const lineSplit = line.split(',') if (lineSplit.length !== 4) continue const key = lineSplit[3].toLowerCase() const value = lineSplit[0] result[key] = value } return result } const rulesDir = path.resolve(__dirname, '../src/chrome/content/rules') const rulesetWhitelistFile = path.join(__dirname, 'ruleset-whitelist.csv') async function main () { const rulesetWhitelistContents = await readFile(rulesetWhitelistFile, 'utf8') let rulesetWhitelistNewContents = rulesetWhitelistContents const rulesetWhitelist = parseWhitelist(rulesetWhitelistContents) const files = (await readdir(rulesDir)).filter(name => name.endsWith('.xml')).sort() let changedCount = 0 for (const fileName of files) { const fileNameLowerCase = fileName.toLowerCase() const file = path.join(rulesDir, fileName) const originalContents = await readFile(file, 'utf8') let fixHash = false let originalHash if (fileNameLowerCase in rulesetWhitelist) { originalHash = crypto.createHash('sha256').update(originalContents).digest('hex') if (rulesetWhitelist[fileNameLowerCase] === originalHash) { fixHash = true } } let newContents = originalContents for (const regex of regexes) { newContents = newContents.replace(regex.from, regex.to) } if (newContents !== originalContents) { if (fixHash) { const newHash = crypto.createHash('sha256').update(newContents).digest('hex') rulesetWhitelistNewContents = rulesetWhitelistNewContents.replace(originalHash, newHash) console.log(`"${fileName}" has been modified, its new hash is "${newHash}".`) } else { console.log(`"${fileName}" has been modified.`) } await writeFile(file, newContents, 'utf8') changedCount++ } } console.log(`${changedCount} of ${files.length} files have changed (${changedCount / files.length * 100}%).`) if (rulesetWhitelistNewContents !== rulesetWhitelistContents) { await writeFile(rulesetWhitelistFile, rulesetWhitelistNewContents, 'utf8') console.log('Ruleset whitelist has been updated.') } } main()