| 
									
										
										
										
											2018-06-23 18:50:13 -06:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var path = require('path'); | 
					
						
							|  |  |  | var fs = require('fs'); | 
					
						
							|  |  |  | var os = require('os'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-27 03:21:44 -06:00
										 |  |  | module.exports = function (opts, fn) { | 
					
						
							|  |  |  |   // TODO make async version
 | 
					
						
							|  |  |  |   try { | 
					
						
							|  |  |  |     module.exports.sync(opts); | 
					
						
							|  |  |  |   } catch(e) { | 
					
						
							|  |  |  |     if (fn) { fn(e); } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (fn) { fn(null); } | 
					
						
							| 
									
										
										
										
											2018-06-23 18:50:13 -06:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2018-06-27 03:21:44 -06:00
										 |  |  | 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}') | 
					
						
							| 
									
										
										
										
											2018-06-27 04:24:56 -06:00
										 |  |  |     .replace(/{NODE_PATH}/g, vars.nodePath || '{NODE_PATH}') | 
					
						
							|  |  |  |     .replace(/{NPM_CONFIG_PREFIX}/g, vars.npmConfigPrefix || '{NPM_CONFIG_PREFIX}') | 
					
						
							| 
									
										
										
										
											2018-06-27 03:21:44 -06:00
										 |  |  |     .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}') | 
					
						
							| 
									
										
										
										
											2018-06-27 22:58:43 -06:00
										 |  |  |     .replace(/{TELEBIT_LOG_DIR}/g, vars.TELEBIT_LOG_DIR || '{TELEBIT_LOG_DIR}') | 
					
						
							| 
									
										
										
										
											2018-06-28 13:01:19 -06:00
										 |  |  |     .replace(/{TELEBIT_SOCK_DIR}/g, vars.TELEBIT_LOG_DIR || '{TELEBIT_SOCK_DIR}') | 
					
						
							| 
									
										
										
										
											2018-06-23 18:50:13 -06:00
										 |  |  |     ; | 
					
						
							| 
									
										
										
										
											2018-06-27 03:21:44 -06:00
										 |  |  |   fs.writeFileSync(f.launcher, text, 'utf8'); | 
					
						
							| 
									
										
										
										
											2018-06-28 13:01:19 -06:00
										 |  |  |   if (f.executable && !/^win/i.test(os.platform())) { | 
					
						
							|  |  |  |     // TODO not sure if chmod works on windows
 | 
					
						
							|  |  |  |     fs.chmodSync(f.launcher, parseInt('755', 8)); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-06-27 03:21:44 -06:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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 | 
					
						
							| 
									
										
										
										
											2018-06-27 04:24:56 -06:00
										 |  |  |     , telebitNode: process.env.TELEBIT_NODE || process.argv[0] || path.resolve(telebitRoot, 'bin/node') | 
					
						
							| 
									
										
										
										
											2018-06-27 03:21:44 -06:00
										 |  |  |     , 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') | 
					
						
							| 
									
										
										
										
											2018-06-27 04:24:56 -06:00
										 |  |  |       ] | 
					
						
							| 
									
										
										
										
											2018-06-27 03:21:44 -06:00
										 |  |  |     , 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') | 
					
						
							| 
									
										
										
										
											2018-06-27 22:58:43 -06:00
										 |  |  |     , TELEBIT_LOG_DIR: process.env.TELEBIT_LOG_DIR || path.join(os.homedir(), '.local/share/telebit/var/log') | 
					
						
							| 
									
										
										
										
											2018-06-27 03:21:44 -06:00
										 |  |  |     }; | 
					
						
							| 
									
										
										
										
											2018-06-27 04:24:56 -06:00
										 |  |  |     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(' '); | 
					
						
							| 
									
										
										
										
											2018-06-27 03:21:44 -06:00
										 |  |  |     module.exports({ | 
					
						
							|  |  |  |       file: f | 
					
						
							|  |  |  |     , vars: vars | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if (module === require.main) { | 
					
						
							|  |  |  |   run(); | 
					
						
							|  |  |  | } |