which-electron/src/fingerprint.js

55 lines
1.4 KiB
JavaScript

const DB = require("electron-fingerprints");
const fs = require("fs");
const hasha = require("hasha");
const allVersions = require("./versions")["all"];
function checksumFile(algorithm, path) {
return new Promise(function(resolve, reject) {
let fs = require("fs");
let crypto = require("crypto");
let hash = crypto.createHash(algorithm).setEncoding("hex");
fs.createReadStream(path)
.once("error", reject)
.pipe(hash)
.once("finish", function() {
resolve(hash.read());
});
});
}
module.exports = {
guessFromHashes: function(os, arch, hashList) {
let lookupTable = DB[`${os}-${arch}`];
let allPossibleHashes = Object.keys(lookupTable);
const intersectingHashes = allPossibleHashes.filter((value) =>
hashList.includes(value)
);
// Set it to the starting list of versions.
let possibleVersions = allVersions;
for (i in hashList) {
let hash = hashList[i];
let versions = lookupTable[hash];
if (versions) {
possibleVersions = possibleVersions.filter((value) =>
versions.includes(value)
);
}
}
if (possibleVersions == allVersions) {
return [];
} else {
return possibleVersions;
}
},
getHashes: function(dir) {
let list = fs.readdirSync(dir);
return list.map((f) => {
let fn = `${dir}/${f}`;
return hasha.fromFileSync(fn, { algorithm: "sha1" });
});
},
};