mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-09-24 05:16:19 -07:00
fix(dictionary): pin Hachidori extension ID with a static manifest key
Electron derives an unpacked extension's ID from its directory, so a changed userData path gave Hachidori a new storage origin and an empty library. The staged copy now carries a fixed key, like the bundled Yomitan.
This commit is contained in:
@@ -57,6 +57,11 @@ for (const [file, replacements] of Object.entries(hostConfiguration)) {
|
||||
fs.writeFileSync(filePath, text);
|
||||
}
|
||||
manifest.permissions = manifest.permissions.filter((permission) => permission !== 'userScripts');
|
||||
// A fixed key pins the extension ID, so Hachidori's storage origin (dictionaries,
|
||||
// settings, setup state) survives userData path changes. Electron otherwise
|
||||
// derives the ID from the unpacked directory path.
|
||||
manifest.key =
|
||||
'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA40zTTbhCbrKnDOqj17tosDChP60VXuuMjR0tFFR/kAet21jrYn0JKPzqqNpXMGaJsx1chnuMOgaP0zuOT+gv9DNVV83wGLhQL7cC4LCoGN648WqnE2jYqBPj6hdD5A/N3uPeKFRAHkiC9HKoj2Et6sYZFTqag79QqQkkUz17X2VpjuTGmTP3lvhyEwhJWQKzOU0k6dTn6fKB2ZSqTebpw/JS2G8jf58vHlQOcfLhIiolKCG9DfMuo11aoG1s3AsFmQmw9VVyp4wgyQ80UI4lyBdqboanJxEiZ211+HKWPEgtG6VML1+Uo59qWS3uBU1apxE1+7E51UBEHaTsxajFIQIDAQAB';
|
||||
fs.writeFileSync(path.join(output, 'manifest.json'), JSON.stringify(manifest, null, 2) + '\n');
|
||||
for (const file of ['LICENSE', 'SOURCE.json', 'README.md']) {
|
||||
fs.copyFileSync(path.join(source, file), path.join(output, file));
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import { execFileSync } from 'node:child_process';
|
||||
import { createHash } from 'node:crypto';
|
||||
import { readFileSync } from 'node:fs';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import test from 'node:test';
|
||||
@@ -41,5 +42,12 @@ test('Hachidori staging configures Electron without changing the fork source', a
|
||||
permissions: originalManifest.permissions.filter(
|
||||
(permission: string) => permission !== 'userScripts',
|
||||
),
|
||||
key: manifest.key,
|
||||
});
|
||||
// The ID keys Hachidori's stored dictionaries and settings; changing the key orphans them.
|
||||
const digest = createHash('sha256').update(Buffer.from(manifest.key, 'base64')).digest('hex');
|
||||
const extensionId = [...digest.slice(0, 32)]
|
||||
.map((digit) => String.fromCharCode(97 + parseInt(digit, 16)))
|
||||
.join('');
|
||||
assert.equal(extensionId, 'jpfgmfknblendgepdejlfhocdcnjjelj');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user