feat: VPN utils
This commit is contained in:
58
scripts/vpn-tools/vpn
Executable file
58
scripts/vpn-tools/vpn
Executable file
@@ -0,0 +1,58 @@
|
||||
#!/usr/bin/env sh
|
||||
:$(); # -*- mode: clojure -*-
|
||||
:$(); exit=0
|
||||
:$(); bb --init "$0" -- "$@" || exit=$?
|
||||
:$(); exit $exit
|
||||
(ns vpn-tools
|
||||
(:require [babashka.cli :as cli]
|
||||
[babashka.process :as p]
|
||||
[babashka.http-client :as http])
|
||||
(:import [clojure.lang ExceptionInfo]))
|
||||
|
||||
(defn adorn-with-help-option [spec]
|
||||
(letfn [(fn-with-help [opts]
|
||||
;; TODO: Implement
|
||||
((:fn spec) opts))]
|
||||
(-> spec
|
||||
(assoc-in [:spec :help]
|
||||
{:help {:coerce :bool}})
|
||||
(assoc :fn fn-with-help))))
|
||||
|
||||
(defn help [opts]
|
||||
(prn 'help))
|
||||
|
||||
(defn vpn-shell [opts]
|
||||
(let [cmd (or (:args opts) ["bash"])
|
||||
user (System/getenv "USER")
|
||||
namespace (-> opts :opts :namespace)
|
||||
ip-cmd (concat ["sudo" "ip" "netns" "exec"
|
||||
namespace "sudo" "-u" user]
|
||||
cmd)]
|
||||
(apply println "$" ip-cmd)
|
||||
(-> (apply p/shell ip-cmd)
|
||||
:exit System/exit)))
|
||||
|
||||
(defn test-mullvad [_opts]
|
||||
(p/shell "curl https://am.i.mullvad.net/connected"))
|
||||
|
||||
(def namespace-option
|
||||
{:namespace {:coerce :string
|
||||
:alias :n
|
||||
:default "wg"
|
||||
:ref "NAMESPACE"}})
|
||||
|
||||
(def cli-table
|
||||
(map adorn-with-help-option
|
||||
[{:cmds ["shell"]
|
||||
:fn vpn-shell
|
||||
:spec namespace-option}
|
||||
{:cmds ["test-mullvad"]
|
||||
:fn test-mullvad}
|
||||
{:cmds []
|
||||
:fn help}]))
|
||||
|
||||
(defn -main [& args]
|
||||
(cli/dispatch cli-table args))
|
||||
|
||||
#_
|
||||
(apply -main *command-line-args*)
|
||||
Reference in New Issue
Block a user