53 lines
1.3 KiB
JavaScript
53 lines
1.3 KiB
JavaScript
import DB from "@captn3m0/electron-fingerprints";
|
|
import fs from "fs";
|
|
import hasha from "hasha";
|
|
import crypto from "crypto";
|
|
|
|
import V from "./versions.json" assert { type: "json" };
|
|
const allVersions = V["all"];
|
|
|
|
function checksumFile(algorithm, path) {
|
|
return new Promise(function (resolve, reject) {
|
|
let hash = crypto.createHash(algorithm).setEncoding("hex");
|
|
fs.createReadStream(path)
|
|
.once("error", reject)
|
|
.pipe(hash)
|
|
.once("finish", function () {
|
|
resolve(hash.read());
|
|
});
|
|
});
|
|
}
|
|
|
|
export function guessFromHashes(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 (let 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;
|
|
}
|
|
}
|
|
|
|
export function getHashes(dir) {
|
|
let list = fs.readdirSync(dir);
|
|
return list.map((f) => {
|
|
let fn = `${dir}/${f}`;
|
|
return hasha.fromFileSync(fn, { algorithm: "sha1" });
|
|
});
|
|
}
|