Compare commits
	
		
			18 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 445e08c4d2 | ||
|  | 7bc2193d09 | ||
| f0049c7f06 | |||
| b5d57817cf | |||
| 1e3f7f671d | |||
| 00f3b3ab45 | |||
|  | 19a42a596c | ||
|  | de2290dd3e | ||
|  | 7db8a7a4ae | ||
| ceddf444b0 | |||
| 76ec7eb066 | |||
|  | 05dab9a52c | ||
| 20321b2fbe | |||
| 8bf4bfc7c0 | |||
| 4f0db8bc9c | |||
| 52d344c6e9 | |||
| 8ffc30797a | |||
| 909b479265 | 
| @ -1,8 +1,7 @@ | |||||||
| # Telebit™ Remote | # Telebit™ Remote | a [Root](https://rootprojects.org) project | ||||||
| 
 | 
 | ||||||
| Because friends don't let friends localhost™ | Because friends don't let friends localhost™ | ||||||
| 
 | 
 | ||||||
| | Sponsored by [ppl](https://ppl.family) |  | ||||||
| | **Telebit Remote** | | **Telebit Remote** | ||||||
| | [Telebit Relay](https://git.coolaj86.com/coolaj86/telebit-relay.js) | | [Telebit Relay](https://git.coolaj86.com/coolaj86/telebit-relay.js) | ||||||
| | [sclient](https://telebit.cloud/sclient) | | [sclient](https://telebit.cloud/sclient) | ||||||
| @ -121,8 +120,8 @@ Windows & Node.js | |||||||
| 1. Install [node.js](https://nodejs.org) | 1. Install [node.js](https://nodejs.org) | ||||||
| 2. Open _Node.js_ | 2. Open _Node.js_ | ||||||
| 2. Run the command `npm install -g telebit` | 2. Run the command `npm install -g telebit` | ||||||
| 2. Copy the example daemon conifg to your user folder `.config/telebit/telebitd.yml` (such as `/Users/John/.config/telebit/telebitd.yml`) | 2. Copy the example daemon config to your user folder `.config/telebit/telebitd.yml` (such as `/Users/John/.config/telebit/telebitd.yml`) | ||||||
| 2. Copy the example remote conifg to your user folder `.config/telebit/telebit.yml` (such as `/Users/John/.config/telebit/telebit.yml`) | 2. Copy the example remote config to your user folder `.config/telebit/telebit.yml` (such as `/Users/John/.config/telebit/telebit.yml`) | ||||||
| 2. Change the email address | 2. Change the email address | ||||||
| 2. Run `npx telebit init` and follow the instructions | 2. Run `npx telebit init` and follow the instructions | ||||||
| 2. Run `npx telebit list` | 2. Run `npx telebit list` | ||||||
|  | |||||||
| @ -98,16 +98,7 @@ function askForConfig(state, mainCb) { | |||||||
|   var firstSet = [ |   var firstSet = [ | ||||||
|     function askEmail(cb) { |     function askEmail(cb) { | ||||||
|       if (state.config.email) { cb(); return; } |       if (state.config.email) { cb(); return; } | ||||||
|       //console.info("");
 |       console.info(TPLS.remote.setup.email); | ||||||
|       console.info("Welcome!"); |  | ||||||
|       console.info(""); |  | ||||||
|       console.info("By using Telebit you agree to:"); |  | ||||||
|       console.info(""); |  | ||||||
|       console.info("    [x] Accept the Telebit™ terms of service"); |  | ||||||
|       console.info("    [x] Accept the Let's Encrypt™ terms of service"); |  | ||||||
|       console.info(""); |  | ||||||
|       console.info("Enter your email to agree and login/create your account:"); |  | ||||||
|       console.info(""); |  | ||||||
|       // TODO attempt to read email from npmrc or the like?
 |       // TODO attempt to read email from npmrc or the like?
 | ||||||
|       rl.question('email: ', function (email) { |       rl.question('email: ', function (email) { | ||||||
|         email = /@/.test(email) && email.trim(); |         email = /@/.test(email) && email.trim(); | ||||||
| @ -548,7 +539,7 @@ function getToken(err, state) { | |||||||
|           console.error(err); |           console.error(err); | ||||||
|           return; |           return; | ||||||
|         } |         } | ||||||
|         console.info("waiting..."); |         console.info(TPLS.remote.waiting.replace(/{email}/, state.config.email)); | ||||||
|         next(); |         next(); | ||||||
|       }); |       }); | ||||||
|     } |     } | ||||||
| @ -583,18 +574,12 @@ function getToken(err, state) { | |||||||
|   , end: function () { |   , end: function () { | ||||||
|       utils.putConfig('enable', [], function (err) { |       utils.putConfig('enable', [], function (err) { | ||||||
|         if (err) { console.error(err); return; } |         if (err) { console.error(err); return; } | ||||||
|         console.info("Success"); |         console.info(TPLS.remote.success); | ||||||
| 
 | 
 | ||||||
|         // workaround for https://github.com/nodejs/node/issues/21319
 |         // workaround for https://github.com/nodejs/node/issues/21319
 | ||||||
|         if (state._useTty) { |         if (state._useTty) { | ||||||
|           setTimeout(function () { |           setTimeout(function () { | ||||||
|             console.info("Some fun things to try first:\n"); |             console.info(TPLS.remote.next_steps); | ||||||
|             console.info("    ~/telebit http ~/public"); |  | ||||||
|             console.info("    ~/telebit tcp 5050"); |  | ||||||
|             console.info("    ~/telebit ssh auto"); |  | ||||||
|             console.info(); |  | ||||||
|             console.info("Press any key to continue..."); |  | ||||||
|             console.info(); |  | ||||||
|             process.exit(0); |             process.exit(0); | ||||||
|           }, 0.5 * 1000); |           }, 0.5 * 1000); | ||||||
|           return; |           return; | ||||||
|  | |||||||
							
								
								
									
										0
									
								
								bin/telebit.js
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										0
									
								
								bin/telebit.js
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							| @ -6,7 +6,7 @@ Telebit Remote is the T-Rex long-arm of the Internet. UNSTOPPABLE! | |||||||
| 
 | 
 | ||||||
| Using reliable HTTPS tunneling to establishing peer-to-peer connections, | Using reliable HTTPS tunneling to establishing peer-to-peer connections, | ||||||
| Telebit is empowering the next generation of tinkerers. Access your devices. | Telebit is empowering the next generation of tinkerers. Access your devices. | ||||||
| Share your stuff. Be UNSTOPPABLE! (Join us at https://ppl.family) | Share your stuff. Be UNSTOPPABLE! (Join us at https://rootprojects.org) | ||||||
| 
 | 
 | ||||||
| Usage: | Usage: | ||||||
| 
 | 
 | ||||||
| @ -59,7 +59,7 @@ Use \"telebit help [command]\" for more information about a command, including f | |||||||
| 
 | 
 | ||||||
| Copyright 2015-2018 AJ ONeal https://telebit.cloud MPL-2.0 Licensed (RAWR!)" | Copyright 2015-2018 AJ ONeal https://telebit.cloud MPL-2.0 Licensed (RAWR!)" | ||||||
| 
 | 
 | ||||||
| status = "usage: telebit status <path/port/none> [subdomain] | status = "usage: telebit status | ||||||
| 
 | 
 | ||||||
| 'telebit status' shows details about the current connections (or lack thereof). | 'telebit status' shows details about the current connections (or lack thereof). | ||||||
| 
 | 
 | ||||||
| @ -135,7 +135,7 @@ usage: telebit http <path/port/none> [subdomain] | |||||||
| 
 | 
 | ||||||
| Use cases: | Use cases: | ||||||
| 
 | 
 | ||||||
|         - Lazy man's AirDrop (works or lazy women too!) |         - Lazy man's AirDrop (works for lazy women too!) | ||||||
|         - Testing dev sites on a phone |         - Testing dev sites on a phone | ||||||
|         - Sharing indie music and movies with friends" |         - Sharing indie music and movies with friends" | ||||||
| 
 | 
 | ||||||
| @ -145,7 +145,7 @@ usage: telebit ssh <auto|port|none> | |||||||
| 
 | 
 | ||||||
| All https traffic will be inspected to see if it looks like ssh Once enabled all traffic that looks | All https traffic will be inspected to see if it looks like ssh Once enabled all traffic that looks | ||||||
| 
 | 
 | ||||||
|         ssh auto                        Make ssh Just Works™ (on port 22) |         ssh auto                        Make ssh Just Work™ (on port 22) | ||||||
| 
 | 
 | ||||||
|         ssh <port>                      forward ssh traffic to non-standard port |         ssh <port>                      forward ssh traffic to non-standard port | ||||||
|         ex: telebit ssh 22              ex: explicitly forward ssh-looking packets to localhost:22 |         ex: telebit ssh 22              ex: explicitly forward ssh-looking packets to localhost:22 | ||||||
| @ -452,5 +452,42 @@ The secret flags are: | |||||||
| [remote] | [remote] | ||||||
| version = "telebit remote v{version}" | version = "telebit remote v{version}" | ||||||
| 
 | 
 | ||||||
|  | code = " | ||||||
|  | ============================================== | ||||||
|  |                  Hey, Listen! | ||||||
|  | ============================================== | ||||||
|  | 
 | ||||||
|  |   GO CHECK YOUR EMAIL! | ||||||
|  | 
 | ||||||
|  |   DEVICE PAIR CODE:     0000 | ||||||
|  | 
 | ||||||
|  | ============================================== | ||||||
|  | " | ||||||
|  | 
 | ||||||
|  | waiting = "waiting for you to check your email..." | ||||||
|  | 
 | ||||||
|  | success = "Success" | ||||||
|  | 
 | ||||||
|  | next_steps = "Some fun things to try first: | ||||||
|  | 
 | ||||||
|  |     ~/telebit http ~/Public | ||||||
|  |     ~/telebit tcp 5050 | ||||||
|  |     ~/telebit ssh auto | ||||||
|  | 
 | ||||||
|  | Press any key to continue... | ||||||
|  | " | ||||||
|  | 
 | ||||||
|  | [remote.setup] | ||||||
|  | 
 | ||||||
|  | email = "Welcome! | ||||||
|  | 
 | ||||||
|  | By using Telebit you agree to: | ||||||
|  | 
 | ||||||
|  |       [x] Accept the Telebit™ terms of service | ||||||
|  |       [x] Accept the Let's Encrypt™ terms of service | ||||||
|  | 
 | ||||||
|  | Enter your email to agree and login/create your account: | ||||||
|  | " | ||||||
|  | 
 | ||||||
| [daemon] | [daemon] | ||||||
| version = "telebit daemon v{version}" | version = "telebit daemon v{version}" | ||||||
|  | |||||||
| @ -51,18 +51,24 @@ | |||||||
| 
 | 
 | ||||||
|     <div> |     <div> | ||||||
|       <h2>You've claimed <span class="js-servername">{{servername}}</span></h2> |       <h2>You've claimed <span class="js-servername">{{servername}}</span></h2> | ||||||
|       <p>Here's some ways you can use it:</p> |       <p>Here are some ways you can use Telebit via Terminal or other Command Line Interface:</p> | ||||||
|       <div class="code-block"> |       <div class="code-block"> | ||||||
|         <pre><code>telebit http ~/Public            # serve a public folder | 	      <br /> | ||||||
| telebit http 3000                # forward all https traffic to localhost:3000 |         <pre><code>~/telebit ssh auto            # allows you to connect to your computer with <br />                                ssh-over-https from a different computer</span></code></pre> | ||||||
| telebit http none                # remove all https handlers</code></pre> |         <pre><code>~/telebit http ~/Public            # serve a public folder | ||||||
|  | ~/telebit http 3000                # forward all https traffic to localhost:3000 | ||||||
|  | ~/telebit http none                # remove all https handlers</code></pre> | ||||||
|       </div> |       </div> | ||||||
|     </div> |     </div> | ||||||
|     <p>You can <em>always</em> tunnel <strong>SSH over HTTPS</strong>, |     <p>And remember you can <em>always</em> tunnel <strong>SSH over HTTPS</strong>, | ||||||
|       even while you're using it for something else:</p> |       even while you're using it for something else:</p> | ||||||
|       <div class="code-block"><pre><code>telebit ssh auto</code></pre> |   <p> </p> | ||||||
|  |    | ||||||
|  |     <details> | ||||||
|  |     <p><summary><strong>Here are some examples for those of you that want to access files and folders remotely.  </strong></summary></p> | ||||||
|  |     <p><strong>This function allows you to connect one computer to another computer you also have SSH on.</strong></p> | ||||||
|  |       <div class="code-block"><pre><code>~/telebit ssh <span class="js-servername">{{servername}}</span></code></pre> | ||||||
|       	<br> |       	<br> | ||||||
| 				<pre><code>telebit ssh <span class="js-servername">{{servername}}</span></code></pre> |  | ||||||
|     		- or - |     		- or - | ||||||
|     		<pre><code>ssh -o ProxyCommand='<a href="https://telebit.cloud/sclient">sclient</a> %h' <span class="js-servername">{{servername}}</span></code></pre> |     		<pre><code>ssh -o ProxyCommand='<a href="https://telebit.cloud/sclient">sclient</a> %h' <span class="js-servername">{{servername}}</span></code></pre> | ||||||
|     		- or - |     		- or - | ||||||
| @ -70,8 +76,7 @@ telebit http none                # remove all https handlers</code></pre> | |||||||
| ssh -o ProxyCommand="$proxy_cmd" <span class="js-servername">{{servername}}</span></code></pre> | ssh -o ProxyCommand="$proxy_cmd" <span class="js-servername">{{servername}}</span></code></pre> | ||||||
| 			</div> | 			</div> | ||||||
|     <pre><code>ssh -o ProxyCommand='openssl s_client -connect %h:443 -servername %h -quiet' <span class="js-servername">{{servername}}</span></code></pre> |     <pre><code>ssh -o ProxyCommand='openssl s_client -connect %h:443 -servername %h -quiet' <span class="js-servername">{{servername}}</span></code></pre> | ||||||
| 
 |     </details> | ||||||
| 
 |  | ||||||
|     <!--div class="js-port" hidden> |     <!--div class="js-port" hidden> | ||||||
|       <h2>You've claimed port <span class="js-serviceport">{{serviceport}}</span></h2> |       <h2>You've claimed port <span class="js-serviceport">{{serviceport}}</span></h2> | ||||||
|       <p>Here's some ways you can use it:</p> |       <p>Here's some ways you can use it:</p> | ||||||
|  | |||||||
| @ -3,7 +3,7 @@ | |||||||
| 
 | 
 | ||||||
| document.body.hidden = false; | document.body.hidden = false; | ||||||
| 
 | 
 | ||||||
| var hash = window.location.hash.substr(1); | var hash = window.location.hash.replace(/^[\/#?]+/, ''); | ||||||
| var query = window.location.search; | var query = window.location.search; | ||||||
| 
 | 
 | ||||||
| function parseQuery(search) { | function parseQuery(search) { | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "telebit", |   "name": "telebit", | ||||||
|   "version": "0.20.6", |   "version": "0.20.251025", | ||||||
|   "description": "Break out of localhost. Connect to any device from anywhere over any tcp port or securely in a browser. A secure tunnel. A poor man's reverse VPN.", |   "description": "Break out of localhost. Connect to any device from anywhere over any tcp port or securely in a browser. A secure tunnel. A poor man's reverse VPN.", | ||||||
|   "main": "lib/remote.js", |   "main": "lib/remote.js", | ||||||
|   "files": [ |   "files": [ | ||||||
|  | |||||||
| @ -34,9 +34,9 @@ ExecReload=/bin/kill -USR1 $MAINPID | |||||||
| # Use private /tmp and /var/tmp, which are discarded after this stops. | # Use private /tmp and /var/tmp, which are discarded after this stops. | ||||||
| PrivateTmp=true | PrivateTmp=true | ||||||
| # Use a minimal /dev | # Use a minimal /dev | ||||||
| ;PrivateDevices=true | PrivateDevices=true | ||||||
| # Hide /home, /root, and /run/user. Nobody will steal your SSH-keys. | # Hide /home, /root, and /run/user. Nobody will steal your SSH-keys. | ||||||
| ProtectHome=true | ;ProtectHome=true | ||||||
| # Make /usr, /boot, /etc and possibly some more folders read-only. | # Make /usr, /boot, /etc and possibly some more folders read-only. | ||||||
| ProtectSystem=full | ProtectSystem=full | ||||||
| # ... except for a few because we want a place for config, logs, etc | # ... except for a few because we want a place for config, logs, etc | ||||||
| @ -61,4 +61,5 @@ NoNewPrivileges=true | |||||||
| ; NoNewPrivileges=true | ; NoNewPrivileges=true | ||||||
| 
 | 
 | ||||||
| [Install] | [Install] | ||||||
| WantedBy=multi-user.target | # For userspace service | ||||||
|  | WantedBy=default.target | ||||||
|  | |||||||
| @ -62,6 +62,6 @@ NoNewPrivileges=true | |||||||
| 
 | 
 | ||||||
| [Install] | [Install] | ||||||
| # For system-level service | # For system-level service | ||||||
| ;WantedBy=multi-user.target | WantedBy=multi-user.target | ||||||
| # For userspace service | # For userspace service | ||||||
| WantedBy=default.target | ;WantedBy=default.target | ||||||
|  | |||||||
| @ -114,8 +114,8 @@ Launcher.install = function (things, fn) { | |||||||
|   }; |   }; | ||||||
|   vars.telebitBinTpl = path.join(telebitRoot, 'usr/share/dist/bin/telebit.tpl'); |   vars.telebitBinTpl = path.join(telebitRoot, 'usr/share/dist/bin/telebit.tpl'); | ||||||
|   vars.telebitNpm = path.resolve(vars.telebitNode, '../npm'); |   vars.telebitNpm = path.resolve(vars.telebitNode, '../npm'); | ||||||
|   vars.nodePath = path.resolve(vars.telebitNode, '../lib/node_modules'); |   vars.nodePath = path.resolve(vars.telebitNode, '../../lib/node_modules'); | ||||||
|   vars.npmConfigPrefix = path.resolve(vars.telebitNode, '..'); |   vars.npmConfigPrefix = path.resolve(vars.telebitNode, '..', '..'); | ||||||
|   vars.userspace = (!things.telebitUser || (things.telebitUser === os.userInfo().username)) ? true : false; |   vars.userspace = (!things.telebitUser || (things.telebitUser === os.userInfo().username)) ? true : false; | ||||||
|   if (-1 === vars.telebitRwDirs.indexOf(vars.npmConfigPrefix)) { |   if (-1 === vars.telebitRwDirs.indexOf(vars.npmConfigPrefix)) { | ||||||
|     vars.telebitRwDirs.push(vars.npmConfigPrefix); |     vars.telebitRwDirs.push(vars.npmConfigPrefix); | ||||||
|  | |||||||
| @ -133,8 +133,11 @@ my_tmp="$(mktemp -d -t telebit.XXXXXXXX)" | |||||||
| #TELEBIT_TMP="$my_tmp/telebit" | #TELEBIT_TMP="$my_tmp/telebit" | ||||||
| 
 | 
 | ||||||
| echo "Installing $my_name to '$TELEBIT_REAL_PATH'" | echo "Installing $my_name to '$TELEBIT_REAL_PATH'" | ||||||
| # v10.2+ has much needed networking fixes, but breaks ursa. v9.x has severe networking bugs. v8.x has working ursa, but requires tls workarounds" | # v10.2+ has much needed networking fixes, but breaks ursa. | ||||||
| NODEJS_VER="${NODEJS_VER:-v10.6}" | # v9.x has severe networking bugs. | ||||||
|  | # v8.x has working ursa, but requires tls workarounds" | ||||||
|  | # v10.13 seems to work for me locally (new greenlock) | ||||||
|  | NODEJS_VER="${NODEJS_VER:-v10.13}" | ||||||
| export NODEJS_VER | export NODEJS_VER | ||||||
| export NODE_PATH="$TELEBIT_TMP/lib/node_modules" | export NODE_PATH="$TELEBIT_TMP/lib/node_modules" | ||||||
| export NPM_CONFIG_PREFIX="$TELEBIT_TMP" | export NPM_CONFIG_PREFIX="$TELEBIT_TMP" | ||||||
| @ -493,7 +496,8 @@ elif [ "systemd" == "$my_system_launcher" ]; then | |||||||
|     else |     else | ||||||
|       echo -n "." |       echo -n "." | ||||||
|     fi |     fi | ||||||
|     systemctl --user daemon-reload |     set +e | ||||||
|  |     if systemctl --user daemon-reload; then | ||||||
|       # enable also puts success output to stderr... why? |       # enable also puts success output to stderr... why? | ||||||
|       systemctl --user enable $my_app >/dev/null 2>/dev/null |       systemctl --user enable $my_app >/dev/null 2>/dev/null | ||||||
|       #echo "    > systemctl --user enable systemd-tmpfiles-setup.service systemd-tmpfiles-clean.timer" |       #echo "    > systemctl --user enable systemd-tmpfiles-setup.service systemd-tmpfiles-clean.timer" | ||||||
| @ -503,13 +507,19 @@ elif [ "systemd" == "$my_system_launcher" ]; then | |||||||
|       fi |       fi | ||||||
|       systemctl --user stop $my_app >/dev/null 2>/dev/null |       systemctl --user stop $my_app >/dev/null 2>/dev/null | ||||||
|       systemctl --user start $my_app >/dev/null |       systemctl --user start $my_app >/dev/null | ||||||
|  | 
 | ||||||
|       sleep 2; # give it time to start |       sleep 2; # give it time to start | ||||||
|       _is_running=$(systemctl --user status --no-pager $my_app 2>/dev/null | grep "active.*running") |       _is_running=$(systemctl --user status --no-pager $my_app 2>/dev/null | grep "active.*running") | ||||||
|       if [ -z "$_is_running" ]; then |       if [ -z "$_is_running" ]; then | ||||||
|         echo "Something went wrong:" |         echo "Something went wrong:" | ||||||
|         systemctl --user status --no-pager $my_app |         systemctl --user status --no-pager $my_app | ||||||
|       exit 1 |  | ||||||
|       fi |       fi | ||||||
|  |     else | ||||||
|  |       echo "libpam-systemd is missing, which is required on Linux to register Telebit with the user launcher." | ||||||
|  |       echo "sudo apt-get install -y libpam-systemd" | ||||||
|  |       sudo apt-get install -y libpam-systemd | ||||||
|  |     fi | ||||||
|  |     set -e | ||||||
|     echo -n "." |     echo -n "." | ||||||
|   else |   else | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -79,8 +79,8 @@ function run() { | |||||||
|     , TELEBIT_LOG_DIR: process.env.TELEBIT_LOG_DIR || path.join(os.homedir(), '.local/share/telebit/var/log') |     , 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.telebitNpm = process.env.TELEBIT_NPM || path.resolve(vars.telebitNode, '../npm'); | ||||||
|     vars.nodePath = process.env.NODE_PATH || path.resolve(vars.telebitNode, '../lib/node_modules'); |     vars.nodePath = process.env.NODE_PATH || path.resolve(vars.telebitNode, '../../lib/node_modules'); | ||||||
|     vars.npmConfigPrefix = process.env.NPM_CONFIG_PREFIX || path.resolve(vars.telebitNode, '..'); |     vars.npmConfigPrefix = process.env.NPM_CONFIG_PREFIX || path.resolve(vars.telebitNode, '..', '..'); | ||||||
|     if (-1 === vars.telebitRwDirs.indexOf(vars.npmConfigPrefix)) { |     if (-1 === vars.telebitRwDirs.indexOf(vars.npmConfigPrefix)) { | ||||||
|       vars.telebitRwDirs.push(vars.npmConfigPrefix); |       vars.telebitRwDirs.push(vars.npmConfigPrefix); | ||||||
|     } |     } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user