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();
 | |
| }
 |