2
2
mirror of https://git.coolaj86.com/coolaj86/telebit.js.git synced 2025-04-21 11:40:36 +00:00

Compare commits

...

18 Commits

Author SHA1 Message Date
f0049c7f06 better param parsing 2019-05-28 17:07:45 -06:00
b5d57817cf fix some typos, move some phrases to the i18n toml file 2019-05-18 13:52:51 -06:00
1e3f7f671d use Root links (new branding) 2019-05-18 13:37:49 -06:00
00f3b3ab45 more descriptive wait message 2019-05-18 13:24:19 -06:00
fountainheadllc
19a42a596c Update 'lib/html/index.html' 2019-05-17 16:09:23 +00:00
fountainheadllc
de2290dd3e Update 'lib/html/index.html' 2019-05-17 03:14:11 +00:00
fountainheadllc
7db8a7a4ae Update 'lib/html/index.html'
Rachel's edits to index.html to make information easier to understand.
2019-05-15 00:28:15 +00:00
ceddf444b0 update node version to v10.13 2019-05-11 18:22:20 -06:00
76ec7eb066 typo fix conifg -> config 2019-01-17 06:31:32 +00:00
RubenVinke
05dab9a52c 'README.md' updaten 2019-01-16 23:03:09 +00:00
20321b2fbe continue when systemd --user fails 2018-11-20 17:01:57 -07:00
8bf4bfc7c0 typo fix apt-install -> apt-get install 2018-11-20 16:59:32 -07:00
4f0db8bc9c continue when systemd --user fails 2018-11-20 16:57:44 -07:00
52d344c6e9 update toml docfile 2018-10-17 20:48:30 -06:00
8ffc30797a doc 'status' to take no arguments 2018-10-15 18:46:40 -06:00
909b479265 v0.20.8: fix npmPrefixPath 2018-10-09 16:30:10 -06:00
8589a66fca bugfix: always launchctl unload, not just on DEBUG 2018-10-07 23:05:32 -06:00
461166d3e3 single npm install process at a time 2018-10-07 22:50:11 -06:00
10 changed files with 105 additions and 65 deletions

View File

@ -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`

View File

@ -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
View File

View 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}"

View File

@ -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>&nbsp;</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>

View File

@ -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) {

View File

@ -1,6 +1,6 @@
{ {
"name": "telebit", "name": "telebit",
"version": "0.20.6", "version": "0.20.8",
"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": [

View File

@ -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);

View File

@ -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"
@ -224,16 +227,20 @@ pushd $TELEBIT_TMP >/dev/null
else else
echo -n "." echo -n "."
fi fi
set +e
$tmp_npm install >/dev/null 2>/dev/null & $tmp_npm install >/dev/null 2>/dev/null &
# ursa is now an entirely optional dependency for key generation
# but very much needed on ARM devices
$tmp_npm install ursa >/dev/null 2>/dev/null &
tmp_npm_pid=$! tmp_npm_pid=$!
while [ -n "$tmp_npm_pid" ]; do while [ -n "$tmp_npm_pid" ]; do
sleep 2 sleep 2
echo -n "." echo -n "."
kill -s 0 $tmp_npm_pid >/dev/null 2>/dev/null || tmp_npm_pid="" kill -s 0 $tmp_npm_pid >/dev/null 2>/dev/null || tmp_npm_pid=""
done done
set -e
echo -n "."
$tmp_npm install >/dev/null 2>/dev/null
# ursa is now an entirely optional dependency for key generation
# but very much needed on ARM devices
$tmp_npm install ursa >/dev/null 2>/dev/null || true
popd >/dev/null popd >/dev/null
if [ -n "${TELEBIT_DEBUG}" ]; then if [ -n "${TELEBIT_DEBUG}" ]; then
@ -425,8 +432,8 @@ if [ -d "/Library/LaunchDaemons" ]; then
if [ -n "${TELEBIT_DEBUG}" ]; then if [ -n "${TELEBIT_DEBUG}" ]; then
echo " > launchctl unload -w $my_app_launchd_service >/dev/null 2>/dev/null" echo " > launchctl unload -w $my_app_launchd_service >/dev/null 2>/dev/null"
launchctl unload -w "$my_app_launchd_service" >/dev/null 2>/dev/null
fi fi
launchctl unload -w "$my_app_launchd_service" >/dev/null 2>/dev/null
else else
my_app_launchd_service_skel="usr/share/dist/Library/LaunchDaemons/${my_app_pkg_name}.plist" my_app_launchd_service_skel="usr/share/dist/Library/LaunchDaemons/${my_app_pkg_name}.plist"
my_app_launchd_service="$my_root/Library/LaunchDaemons/${my_app_pkg_name}.plist" my_app_launchd_service="$my_root/Library/LaunchDaemons/${my_app_pkg_name}.plist"
@ -489,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"
@ -499,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

View File

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