mirror of
https://git.coolaj86.com/coolaj86/telebit.js.git
synced 2024-11-20 12:34:41 +00:00
98 lines
4.7 KiB
JavaScript
98 lines
4.7 KiB
JavaScript
'use strict';
|
|
|
|
var path = require('path');
|
|
var fs = require('fs');
|
|
var os = require('os');
|
|
|
|
module.exports = function (opts, fn) {
|
|
// TODO make async version
|
|
try {
|
|
module.exports.sync(opts);
|
|
} catch(e) {
|
|
if (fn) { fn(e); }
|
|
}
|
|
|
|
if (fn) { fn(null); }
|
|
};
|
|
module.exports.sync = function (opts) {
|
|
var f = opts.file;
|
|
var vars = opts.vars;
|
|
var text = fs.readFileSync(f.tpl, 'utf8')
|
|
.replace(/{TELEBIT_PATH}/g, vars.telebitPath || '{TELEBIT_PATH}')
|
|
.replace(/{TELEBIT_NODE}/g, vars.telebitNode || '{TELEBIT_NODE}')
|
|
.replace(/{NODE_PATH}/g, vars.nodePath || '{NODE_PATH}')
|
|
.replace(/{NPM_CONFIG_PREFIX}/g, vars.npmConfigPrefix || '{NPM_CONFIG_PREFIX}')
|
|
.replace(/{TELEBIT_NPM}/g, vars.telebitNpm || '{TELEBIT_NPM}')
|
|
.replace(/{TELEBIT_BIN}/g, vars.telebitBin || '{TELEBIT_BIN}')
|
|
.replace(/{TELEBITD_BIN}/g, vars.telebitdBin || '{TELEBITD_BIN}')
|
|
.replace(/{TELEBIT_JS}/g, vars.telebitJs || '{TELEBIT_JS}')
|
|
.replace(/{TELEBITD_JS}/g, vars.telebitdJs || '{TELEBITD_JS}')
|
|
.replace(/{TELEBIT_USER}/g, vars.telebitUser || '{TELEBIT_USER}')
|
|
.replace(/{TELEBIT_GROUP}/g, vars.telebitGroup || '{TELEBIT_GROUP}')
|
|
.replace(/{TELEBIT_RW_DIRS}/g, vars.telebitRwDirs || '{TELEBIT_RW_DIRS}')
|
|
.replace(/{TELEBIT_CONFIG}/g, vars.telebitConfig || '{TELEBIT_CONFIG}')
|
|
.replace(/{TELEBITD_CONFIG}/g, vars.telebitdConfig || '{TELEBITD_CONFIG}')
|
|
.replace(/{TELEBIT_LOG_DIR}/g, vars.TELEBIT_LOG_DIR || '{TELEBIT_LOG_DIR}')
|
|
.replace(/{TELEBIT_SOCK_DIR}/g, vars.TELEBIT_LOG_DIR || '{TELEBIT_SOCK_DIR}')
|
|
;
|
|
fs.writeFileSync(f.launcher, text, 'utf8');
|
|
if (f.executable && !/^win/i.test(os.platform())) {
|
|
// TODO not sure if chmod works on windows
|
|
fs.chmodSync(f.launcher, parseInt('755', 8));
|
|
}
|
|
};
|
|
|
|
function run() {
|
|
var files = [
|
|
{ tpl: (process.env.TELEBIT_SERVICE_TPL || path.join(__dirname, 'dist/etc/systemd/system/telebit.service.tpl'))
|
|
, launcher: (process.env.TELEBIT_SERVICE || path.join(__dirname, 'dist/etc/systemd/system/telebit.service'))
|
|
}
|
|
, { tpl: (process.env.TELEBIT_USER_SERVICE_TPL || path.join(__dirname, 'dist/etc/skel/.config/systemd/user/telebit.service.tpl'))
|
|
, launcher: (process.env.TELEBIT_USER_SERVICE || path.join(__dirname, 'dist/etc/skel/.config/systemd/user/telebit.service'))
|
|
}
|
|
, { tpl: (process.env.TELEBIT_PLIST_TPL || path.join(__dirname, 'dist/Library/LaunchDaemons/cloud.telebit.remote.plist.tpl'))
|
|
, launcher: (process.env.TELEBIT_PLIST || path.join(__dirname, 'dist/Library/LaunchDaemons/cloud.telebit.remote.plist'))
|
|
}
|
|
, { tpl: (process.env.TELEBIT_USER_PLIST_TPL || path.join(__dirname, 'dist/etc/skel/Library/LaunchAgents/cloud.telebit.remote.plist.tpl'))
|
|
, launcher: (process.env.TELEBIT_USER_PLIST || path.join(__dirname, 'dist/etc/skel/Library/LaunchAgents/cloud.telebit.remote.plist'))
|
|
}
|
|
];
|
|
|
|
files.forEach(function (f) {
|
|
var telebitRoot = path.resolve(__dirname, '../..');
|
|
var vars = {
|
|
telebitPath: process.env.TELEBIT_PATH || telebitRoot
|
|
, telebitNode: process.env.TELEBIT_NODE || process.argv[0] || path.resolve(telebitRoot, 'bin/node')
|
|
, telebitBin: process.env.TELEBIT_BIN || path.resolve(telebitRoot, 'bin/telebit')
|
|
, telebitdBin: process.env.TELEBITD_BIN || path.resolve(telebitRoot, 'bin/telebitd')
|
|
, telebitJs: process.env.TELEBIT_JS || path.resolve(telebitRoot, 'bin/telebit.js')
|
|
, telebitdJs: process.env.TELEBITD_JS || path.resolve(telebitRoot, 'bin/telebitd.js')
|
|
, telebitRwDirs: [
|
|
(process.env.TELEBIT_PATH || path.resolve(__dirname, '../..'))
|
|
, path.join(os.homedir(), '.config/telebit')
|
|
, path.join(os.homedir(), '.local/share/telebit')
|
|
]
|
|
, telebitUser: process.env.TELEBIT_USER || os.userInfo().username
|
|
, telebitGroup: process.env.TELEBIT_GROUP || ('darwin' === os.platform() ? 'staff' : os.userInfo().username)
|
|
, telebitConfig: process.env.TELEBIT_CONFIG || path.join(os.homedir(), '.config/telebit/telebit.yml')
|
|
, telebitdConfig: process.env.TELEBITD_CONFIG || path.join(os.homedir(), '.config/telebit/telebitd.yml')
|
|
, TELEBIT_LOG_DIR: process.env.TELEBIT_LOG_DIR || path.join(os.homedir(), '.local/share/telebit/var/log')
|
|
};
|
|
vars.telebitNpm = process.env.TELEBIT_NPM || path.resolve(vars.telebitNode, '../npm');
|
|
vars.nodePath = process.env.NODE_PATH || path.resolve(vars.telebitNode, '../../lib/node_modules');
|
|
vars.npmConfigPrefix = process.env.NPM_CONFIG_PREFIX || path.resolve(vars.telebitNode, '..', '..');
|
|
if (-1 === vars.telebitRwDirs.indexOf(vars.npmConfigPrefix)) {
|
|
vars.telebitRwDirs.push(vars.npmConfigPrefix);
|
|
}
|
|
vars.telebitRwDirs = vars.telebitRwDirs.join(' ');
|
|
module.exports({
|
|
file: f
|
|
, vars: vars
|
|
});
|
|
});
|
|
}
|
|
|
|
if (module === require.main) {
|
|
run();
|
|
}
|