mirror of
				https://github.com/vector-im/element-web.git
				synced 2025-11-04 10:11:03 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			70 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const { exec, execFile } = require('child_process');
 | 
						|
const fs = require('fs');
 | 
						|
const path = require('path');
 | 
						|
const shellescape = require('shell-escape');
 | 
						|
 | 
						|
exports.default = async function(options) {
 | 
						|
    const inPath = options.path;
 | 
						|
    const appOutDir = path.dirname(inPath);
 | 
						|
 | 
						|
    // get the token passphrase from the keychain
 | 
						|
    const tokenPassphrase = await new Promise((resolve, reject) => {
 | 
						|
        execFile(
 | 
						|
            'security',
 | 
						|
            ['find-generic-password', '-s', 'riot_signing_token', '-w'],
 | 
						|
            {},
 | 
						|
            (err, stdout) => {
 | 
						|
                if (err) {
 | 
						|
                    console.error("Couldn't find signing token in keychain", err);
 | 
						|
                    // electron-builder seems to print '[object Object]' on the
 | 
						|
                    // console whether you reject with an Error or a string...
 | 
						|
                    reject(err);
 | 
						|
                } else {
 | 
						|
                    resolve(stdout.trim());
 | 
						|
                }
 | 
						|
            },
 | 
						|
        );
 | 
						|
    });
 | 
						|
 | 
						|
    return new Promise((resolve, reject) => {
 | 
						|
        let cmdLine = 'osslsigncode sign ';
 | 
						|
        if (process.env.OSSLSIGNCODE_SIGNARGS) {
 | 
						|
            cmdLine += process.env.OSSLSIGNCODE_SIGNARGS + ' ';
 | 
						|
        }
 | 
						|
        const tmpFile = path.join(
 | 
						|
            appOutDir,
 | 
						|
            'tmp_' + Math.random().toString(36).substring(2, 15) + '.exe',
 | 
						|
        );
 | 
						|
        const args = [
 | 
						|
            '-h', options.hash,
 | 
						|
            '-pass', tokenPassphrase,
 | 
						|
            '-in', inPath,
 | 
						|
            '-out', tmpFile,
 | 
						|
        ];
 | 
						|
        if (options.isNest) args.push('-nest');
 | 
						|
        cmdLine += shellescape(args);
 | 
						|
 | 
						|
        let signStdout;
 | 
						|
        const signproc = exec(cmdLine, {}, (error, stdout) => {
 | 
						|
            signStdout = stdout;
 | 
						|
        });
 | 
						|
        signproc.on('exit', (code) => {
 | 
						|
            if (code !== 0) {
 | 
						|
                console.log("Running", cmdLine);
 | 
						|
                console.log(signStdout);
 | 
						|
                console.error("osslsigncode failed with code " + code);
 | 
						|
                reject("osslsigncode failed with code " + code);
 | 
						|
                return;
 | 
						|
            }
 | 
						|
            fs.rename(tmpFile, inPath, (err) => {
 | 
						|
                if (err) {
 | 
						|
                    console.error("Error renaming file", err);
 | 
						|
                    reject(err);
 | 
						|
                } else {
 | 
						|
                    resolve();
 | 
						|
                }
 | 
						|
            });
 | 
						|
        });
 | 
						|
    });
 | 
						|
};
 |