You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-11-23 22:36:32 +02:00
110 lines
3.0 KiB
JavaScript
110 lines
3.0 KiB
JavaScript
/* eslint-disable no-console */
|
|
|
|
const { execSync } = require('child_process');
|
|
const { chdir, cwd } = require('process');
|
|
const { mkdirpSync, moveSync, pathExists } = require('fs-extra');
|
|
const { readdirSync, writeFileSync } = require('fs');
|
|
const { dirname } = require('path');
|
|
|
|
const signToolName = 'CodeSignTool.bat';
|
|
|
|
const getTempDir = () => {
|
|
if (process.env.RUNNER_TEMP) return process.env.RUNNER_TEMP;
|
|
if (process.env.GITHUB_WORKSPACE) return process.env.GITHUB_WORKSPACE;
|
|
|
|
const output = `${dirname(dirname(__dirname))}/temp`;
|
|
mkdirpSync(output);
|
|
return output;
|
|
};
|
|
|
|
const tempDir = getTempDir();
|
|
|
|
const downloadSignTool = async () => {
|
|
const signToolUrl = 'https://www.ssl.com/download/codesigntool-for-windows/';
|
|
const downloadDir = `${tempDir}/signToolDownloadTemp`;
|
|
const extractDir = `${tempDir}/signToolExtractTemp`;
|
|
|
|
if (await pathExists(`${extractDir}/${signToolName}`)) {
|
|
console.info('sign.js: Sign tool has already been downloaded - skipping');
|
|
return extractDir;
|
|
}
|
|
|
|
mkdirpSync(downloadDir);
|
|
mkdirpSync(extractDir);
|
|
|
|
const response = await fetch(signToolUrl);
|
|
if (!response.ok) throw new Error(`sign.js: HTTP error ${response.status}: ${response.statusText}`);
|
|
|
|
const zipPath = `${downloadDir}/codeSignTool.zip`;
|
|
|
|
const buffer = Buffer.from(await response.arrayBuffer());
|
|
writeFileSync(zipPath, buffer);
|
|
|
|
console.info('sign.js: Downloaded sign tool zip:', readdirSync(downloadDir));
|
|
|
|
mkdirpSync(extractDir);
|
|
|
|
execSync(
|
|
`powershell -Command "Expand-Archive -Path '${zipPath}' -DestinationPath '${extractDir}' -Force"`,
|
|
{ stdio: 'inherit' },
|
|
);
|
|
|
|
console.info('sign.js: Extracted sign tool zip:', readdirSync(extractDir));
|
|
|
|
return extractDir;
|
|
};
|
|
|
|
exports.default = async (configuration) => {
|
|
const inputFilePath = configuration.path;
|
|
|
|
const {
|
|
SSL_ESIGNER_USER_NAME,
|
|
SSL_ESIGNER_USER_PASSWORD,
|
|
SSL_ESIGNER_CREDENTIAL_ID,
|
|
SSL_ESIGNER_USER_TOTP,
|
|
SIGN_APPLICATION,
|
|
} = process.env;
|
|
|
|
console.info('sign.js: File to sign:', inputFilePath);
|
|
|
|
console.info('sign.js: Using temp dir:', tempDir);
|
|
|
|
if (SIGN_APPLICATION !== '1') {
|
|
console.info('sign.js: SIGN_APPLICATION != 1 - not signing application');
|
|
return;
|
|
}
|
|
|
|
console.info('sign.js: SIGN_APPLICATION = 1 - signing application');
|
|
|
|
const signToolDir = await downloadSignTool();
|
|
const signToolOutDir = `${tempDir}/signedToolOutDir`;
|
|
mkdirpSync(signToolOutDir);
|
|
|
|
const previousDir = cwd();
|
|
chdir(signToolDir);
|
|
|
|
try {
|
|
const cmd = [
|
|
`${signToolName} sign`,
|
|
`-input_file_path="${inputFilePath}"`,
|
|
`-output_dir_path="${signToolOutDir}"`,
|
|
`-credential_id="${SSL_ESIGNER_CREDENTIAL_ID}"`,
|
|
`-username="${SSL_ESIGNER_USER_NAME}"`,
|
|
`-password="${SSL_ESIGNER_USER_PASSWORD}"`,
|
|
`-totp_secret="${SSL_ESIGNER_USER_TOTP}"`,
|
|
];
|
|
|
|
execSync(cmd.join(' '));
|
|
|
|
const createdFiles = readdirSync(signToolOutDir);
|
|
console.info('sign.js: Created files:', createdFiles);
|
|
|
|
moveSync(`${signToolOutDir}/${createdFiles[0]}`, inputFilePath, { overwrite: true });
|
|
} catch (error) {
|
|
console.error('sign.js: Could not sign file:', error);
|
|
process.exit(1);
|
|
} finally {
|
|
chdir(previousDir);
|
|
}
|
|
};
|