From 9b4ca86650b0e587fb8b570ee6c9c51ae9cfaa9e Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Sat, 24 Sep 2022 21:43:07 +0200 Subject: [PATCH] Rename mod hash field to sha1 The Factorio Mod Portal uses and provides SHA1 hashes of mods, so it makes sense to align the ModPack and ModInfo structures to sha1 by renaming the genericly named hash property to sha1. --- packages/ctl/src/commands.js | 4 ++-- packages/lib/data/ModInfo.js | 13 ++++++------- packages/lib/data/ModPack.js | 6 +++--- packages/master/src/ControlConnection.js | 2 +- packages/web_ui/src/components/ModDetails.jsx | 2 +- packages/web_ui/src/components/ModPackViewPage.jsx | 4 ++-- test/integration/clusterio.js | 2 +- test/lib/data/ModInfo.js | 6 +++--- test/lib/data/ModPack.js | 4 ++-- 9 files changed, 21 insertions(+), 22 deletions(-) diff --git a/packages/ctl/src/commands.js b/packages/ctl/src/commands.js index 81400b8d..3ee812c7 100644 --- a/packages/ctl/src/commands.js +++ b/packages/ctl/src/commands.js @@ -875,7 +875,7 @@ modPackCommands.add(new libCommand.Command({ if (field === "mods") { print(`${field}:`); for (let entry of value) { - print(` ${entry.name} ${entry.version}${entry.hash ? ` (${entry.hash})` : ""}`); + print(` ${entry.name} ${entry.version}${entry.sha1 ? ` (${entry.sha1})` : ""}`); } } else if (field === "settings") { print(`${field}:`); @@ -958,7 +958,7 @@ function setModPackMods(modPack, mods) { if (sha1 && !/^[0-9a-f]{40}$/.test(sha1)) { throw new libErrors.CommandError("sha1 must be a 40 digit lower case hex string"); } - modPack.mods.set(name, { name, version, hash: sha1 ? `sha1:${sha1}` : undefined }); + modPack.mods.set(name, { name, version, sha1 }); } } diff --git a/packages/lib/data/ModInfo.js b/packages/lib/data/ModInfo.js index e1949d0c..e3bcce46 100644 --- a/packages/lib/data/ModInfo.js +++ b/packages/lib/data/ModInfo.js @@ -111,10 +111,10 @@ class ModInfo { size = 0; /** - * Hash of this mod + * SHA1 hash of this mod * @type {string=} */ - hash; + sha1; /** * True if this mod has been deleted @@ -147,7 +147,7 @@ class ModInfo { ...this.infoJsonSchema.properties, "filename": { type: "string" }, "size": { type: "integer" }, - "hash": { type: "string" }, + "sha1": { type: "string" }, "is_deleted": { type: "boolean" }, }, }; @@ -169,7 +169,7 @@ class ModInfo { // Additional data if (json.filename) { this.filename = json.filename; } if (json.size) { this.size = json.size; } - if (json.hash) { this.hash = json.hash; } + if (json.sha1) { this.sha1 = json.sha1; } if (json.is_deleted) { this.isDeleted = json.is_deleted; } } @@ -189,7 +189,7 @@ class ModInfo { } if (this.filename) { json.filename = this.filename; } if (this.size) { json.size = this.size; } - if (this.hash) { json.hash = this.hash; } + if (this.sha1) { json.sha1 = this.sha1; } if (this.isDeleted) { json.is_deleted = this.isDeleted; } return json; } @@ -215,13 +215,12 @@ class ModInfo { throw new Error("Mod's info.json is not valid"); } - let hash = `sha1:${await libHash.hashFile(modPath)}`; return new this({ ...modInfo, filename: path.basename(modPath), size: (await fs.stat(modPath)).size, - hash, + sha1: await libHash.hashFile(modPath), is_deleted: false, }); } diff --git a/packages/lib/data/ModPack.js b/packages/lib/data/ModPack.js index 9dd09154..c13e6bf0 100644 --- a/packages/lib/data/ModPack.js +++ b/packages/lib/data/ModPack.js @@ -28,7 +28,7 @@ const ModSettingsJsonSchema = { * @typedef {object} module:lib/data/ModPack~ModRecord * @property {string} name - name of the mod. * @property {string} version - version of the mod. - * @property {string} hash - hash of the zip file. + * @property {string} sha1 - SHA1 hash of the zip file. */ const ModRecordJsonSchema = { type: "object", @@ -37,7 +37,7 @@ const ModRecordJsonSchema = { properties: { "name": { type: "string" }, "version": { type: "string" }, - "hash": { type: "string" }, + "sha1": { type: "string" }, }, }; @@ -176,7 +176,7 @@ class ModPack { if (json.mods && !includeHash) { json.mods = json.mods.map(m => { m = { ...m }; - delete m.hash; + delete m.sha1; return m; }); } diff --git a/packages/master/src/ControlConnection.js b/packages/master/src/ControlConnection.js index bcae4226..6e9cd9a2 100644 --- a/packages/master/src/ControlConnection.js +++ b/packages/master/src/ControlConnection.js @@ -576,7 +576,7 @@ class ControlConnection extends BaseConnection { // dependencies filename: "word", // size - hash: "word", + sha1: "word", }); let factorioVersion = message.data.factorio_version; diff --git a/packages/web_ui/src/components/ModDetails.jsx b/packages/web_ui/src/components/ModDetails.jsx index f6e1b1d0..af5ebd78 100644 --- a/packages/web_ui/src/components/ModDetails.jsx +++ b/packages/web_ui/src/components/ModDetails.jsx @@ -33,7 +33,7 @@ export default function ModDetails(props) { {mod.size !== undefined && {libHelpers.formatBytes(mod.size)} } - {mod.hash && {mod.hash}} + {mod.sha1 && {mod.sha1}} {mod.dependencies && mod.dependencies.length && {mod.dependencies diff --git a/packages/web_ui/src/components/ModPackViewPage.jsx b/packages/web_ui/src/components/ModPackViewPage.jsx index 1d01ca5e..17042616 100644 --- a/packages/web_ui/src/components/ModPackViewPage.jsx +++ b/packages/web_ui/src/components/ModPackViewPage.jsx @@ -95,7 +95,7 @@ function SearchModsTable(props) { props.onChange({ type: "mods.set", name: mod.name, - value: { name: mod.name, version: mod.version, hash: mod.hash }, + value: { name: mod.name, version: mod.version, sha1: mod.sha1 }, }); }} >{props.modPack.mods.has(mod.name) ? "change" : "add"} @@ -107,7 +107,7 @@ function SearchModsTable(props) { props.onChange({ type: "mods.delete", name: mod.name, - value: { name: mod.name, version: mod.version, hash: mod.hash }, + value: { name: mod.name, version: mod.version, sha1: mod.sha1 }, }); }} >remove diff --git a/test/integration/clusterio.js b/test/integration/clusterio.js index 8c88c244..f1ecbb1c 100644 --- a/test/integration/clusterio.js +++ b/test/integration/clusterio.js @@ -917,7 +917,7 @@ describe("Integration of Clusterio", function() { "dependencies:\n" + "filename: empty_mod_1.0.0.zip\n" + `size: ${stat.size}\n` + - `hash: sha1:${hash}\n`, + `sha1: ${hash}\n`, ); }); }); diff --git a/test/lib/data/ModInfo.js b/test/lib/data/ModInfo.js index f3de1794..9e435e81 100644 --- a/test/lib/data/ModInfo.js +++ b/test/lib/data/ModInfo.js @@ -34,7 +34,7 @@ describe("lib/data/ModInfo", function() { check(new ModInfo({ dependencies: ["UltraMod", "SuperLib >= 1.00", "! bad-mod"] })); check(new ModInfo({ filename: "MyMod_1.0.0.zip" })); check(new ModInfo({ size: 1024 })); - check(new ModInfo({ hash: "sha5:verified-as-MyMod" })); + check(new ModInfo({ sha1: "verified-as-MyMod" })); check(new ModInfo({ is_deleted: true })); // All at once @@ -50,7 +50,7 @@ describe("lib/data/ModInfo", function() { dependencies: ["UltraMod", "SuperLib >= 1.00", "! bad-mod"], filename: "MyMod_1.0.0.zip", size: 1024, - hash: "sha5:verified-as-MyMod", + sha1: "verified-as-MyMod", is_deleted: true, })); }); @@ -93,7 +93,7 @@ describe("lib/data/ModInfo", function() { dependencies: [], filename: "empty_mod_1.0.0.zip", size: stat.size, - hash: `sha1:${hash}`, + sha1: hash, }) ); }); diff --git a/test/lib/data/ModPack.js b/test/lib/data/ModPack.js index 9c32a17e..9d08bdc5 100644 --- a/test/lib/data/ModPack.js +++ b/test/lib/data/ModPack.js @@ -27,7 +27,7 @@ describe("lib/data/ModPack", function() { check(new ModPack({ factorio_version: "2.0" })); check(new ModPack({ mods: [ { name: "subspace_storage", version: "1.99.8" }, - { name: "clusterio_lib", version: "0.1.2", hash: "sha1:012345abcd" }, + { name: "clusterio_lib", version: "0.1.2", sha1: "012345abcd" }, ]})); check(new ModPack({ settings: { "startup": { @@ -47,7 +47,7 @@ describe("lib/data/ModPack", function() { factorio_version: "2.0", mods: [ { name: "subspace_storage", version: "1.99.8" }, - { name: "clusterio_lib", version: "0.1.2", hash: "sha1:012345abcd" }, + { name: "clusterio_lib", version: "0.1.2", sha1: "012345abcd" }, ], settings: { "startup": {