formatting

This commit is contained in:
Daylin Morgan 2024-08-16 15:39:21 -05:00
parent 6774069a4f
commit eca60579ef
Signed by: daylin
GPG key ID: 950D13E9719334AD
2 changed files with 15 additions and 20 deletions

View file

@ -20,7 +20,9 @@
{ {
packages = forAllSystems (pkgs: rec { packages = forAllSystems (pkgs: rec {
utils = pkgs.callPackage ./meta.nix { inherit tunnel; }; utils = pkgs.callPackage ./meta.nix { inherit tunnel; };
tunnel = pkgs.callPackage ./tunnel-go { }; tunnel-go = pkgs.callPackage ./tunnel-go { };
tunnel-nim = pkgs.callPackage ./tunnel-nim { };
tunnel = tunnel-nim;
default = utils; default = utils;
}); });
devShells = forAllSystems (pkgs: { devShells = forAllSystems (pkgs: {

View file

@ -1,24 +1,18 @@
import std/[os, osproc, sequtils, strformat, strutils, sugar] import std/[os, osproc, sequtils, strformat, strutils, sugar]
import cligen import cligen
proc checkHost(host: seq[string]): string = proc checkHost(host: seq[string]): string =
case host.len: case host.len:
of 0: quit "expected hostname"
of 1: return host[0] of 1: return host[0]
else: quit "expected one positinal argument" of 0: quit "expected hostname"
else: quit "expected one positinal argument"
proc check(name: string): bool = (execCmd &"ssh -O check {name}") == 0
proc startSsh(name: string) = discard execCmd &"ssh -M -f -N {name}"
proc activateTunnel(name: string, port: int): int = execCmd &"""ssh -fNL "{port}:localhost:{port}" {name}"""
proc exitSsh(name: string):int = execCmd &"ssh -O exit {name}"
proc check(name: string): bool = proc up(port: int, host: seq[string]) =
(execCmd &"ssh -O check {name}") == 0
proc startSsh(name: string) =
discard execCmd &"ssh -M -f -N {name}"
proc activateTunnel(name: string, port: int): int =
execCmd &"""ssh -fNL "{port}:localhost:{port}" {name}"""
proc exitSsh(name: string):int =
execCmd &"ssh -O exit {name}"
proc up(port: int, host: seq[string]) =
## activate a tunnel ## activate a tunnel
let name = checkHost host let name = checkHost host
echo "activating connection to", name echo "activating connection to", name
@ -26,8 +20,7 @@ proc up(port: int, host: seq[string]) =
startSsh(name) startSsh(name)
quit activateTunnel(name, port) quit activateTunnel(name, port)
proc down(host: seq[string]) =
proc down(host: seq[string]) =
## disable all tunnels ## disable all tunnels
let name = checkHost host let name = checkHost host
echo "deactivating connection to", name echo "deactivating connection to", name
@ -36,7 +29,7 @@ proc down(host: seq[string]) =
proc show() = proc show() =
## show active connections ## show active connections
let sshDir = (getEnv "HOME") / ".ssh" let sshDir = (getEnv "HOME") / ".ssh"
let controllers = let controllers =
collect(for _,p in walkDir(sshDir): p) collect(for _,p in walkDir(sshDir): p)
.map(extractFilename) .map(extractFilename)
.filterIt(it.startsWith("control")) .filterIt(it.startsWith("control"))
@ -44,9 +37,9 @@ proc show() =
if controllers.len == 0: quit 0 if controllers.len == 0: quit 0
echo "hosts:" echo "hosts:"
echo controllers.mapIt(" " & it.split('-')[1]).join("\n") echo controllers.mapIt(" " & it.split('-')[1]).join("\n")
const const
hostUsage = "$command [flags] hostname\n${doc}Options:\n$options" hostUsage = "$command [flags] hostname\n${doc}Options:\n$options"
usage = "$command [flags]\n${doc}Options:\n$options" usage = "$command [flags]\n${doc}Options:\n$options"
dispatchMulti([up, usage=hostUsage], [down, usage=hostUsage], [show, usage=usage]) dispatchMulti([up, usage=hostUsage], [down, usage=hostUsage], [show, usage=usage])