keeweb/plugins/keeweb-plugin/keeweb-plugin.js

73 lines
1.9 KiB
JavaScript
Raw Normal View History

2017-02-19 19:58:06 +01:00
#! /usr/bin/env node
2017-02-18 23:46:59 +01:00
/**
* KeeWeb plugin creator
* (C) Antelle 2017, MIT license https://github.com/keeweb/keeweb
*/
/* eslint-disable no-console */
const path = require('path');
const fs = require('fs');
const crypto = require('crypto');
const args = process.argv.splice(2);
2017-02-19 19:58:06 +01:00
const pkg = require('./package.json');
2017-02-18 23:46:59 +01:00
const op = args.shift();
showBanner();
switch (op) {
case 'sign':
signPlugin();
break;
default:
showHelp();
}
function showBanner() {
2017-02-19 19:58:06 +01:00
console.log(`KeeWeb plugin utils v${pkg.version}`);
2017-02-18 23:46:59 +01:00
}
function showHelp() {
console.log('Usage:');
2017-02-19 19:58:06 +01:00
console.log(' - node keeweb-plugin sign <plugin_name>');
2017-02-18 23:46:59 +01:00
}
function signPlugin() {
const packageName = args.shift();
if (!packageName) {
showHelp();
return;
}
if (!fs.existsSync(packageName)) {
console.error('Package folder does not exist');
return process.exit(1);
}
const manifest = JSON.parse(fs.readFileSync(path.join(packageName, 'manifest.json')));
const privateKey = fs.readFileSync(path.join(packageName, 'private_key.pem'), 'binary');
for (const res of Object.keys(manifest.resources)) {
console.log(`Signing ${res}...`);
let fileName;
switch (res) {
case 'js':
fileName = 'plugin.js';
break;
case 'css':
fileName = 'plugin.css';
break;
case 'loc':
fileName = manifest.locale.name + '.json';
break;
}
fileName = path.join(packageName, fileName);
const sign = crypto.createSign('RSA-SHA256');
sign.write(fs.readFileSync(fileName));
sign.end();
manifest.resources[res] = sign.sign(privateKey).toString('base64');
}
fs.writeFileSync(path.join(packageName, 'manifest.json'), JSON.stringify(manifest, null, 2));
console.log('Done, package manifest updated');
}