elvish_config/aliases/vpn.elv

148 lines
3.6 KiB
Text

edit:add-var vpn~ {|@argv|
use flag
use re
use str
use framagit.org/benjamin.vaudour/elv-lib/mods/map
var shortcuts = [
&ca= ca.kaosx.ovh
&fr= fr.kaosx.ovh
&lu= luence-wg
&cli= luence-client
&fdn= fdn-openvpn
]
var next = [
&ca.kaosx.ovh= fr.kaosx.ovh
&fr.kaosx.ovh= luence-wg
&luence-wg= luence-client
&luence-client= fdn-openvpn
]
fn -start {|name| e:nmcli connection up $name > /dev/null }
fn -stop {|name| e:nmcli connection down $name > /dev/null }
fn -list {|&active=$false|
var @args = connection show
if $active {
set @args = $@args --active
}
e:nmcli $@args | re:awk {|_ @name uuid tpe dev|
var name = (str:join ' ' $name)
if (has-value $shortcuts $name) {
put [
&name= $name
&type= $tpe
&active= (not-eq $dev --)
]
}
}
}
fn -name {|name| map:value-of &default=$name $shortcuts $name }
fn -exists {|name| has-value [ (-list | each {|c| put $c[name] }) ] (-name $name) }
fn -is-active {|name| has-value [ (-list &active=$true | each {|c| put $c[name] }) ] (-name $name) }
fn -next {||
var @active = (-list &active=$true)
var n = ca.kaosx.ovh
if (> (count $active) 0) {
set n = (map:value-of &default=$n $next $active[0][name])
}
put $n
}
fn help {|@rest|
echo 'Usage: vpn [<action>] [<args>...]'
echo 'Actions disponibles:'
echo ' - list [(-a|--active)]'
echo ' - start <name>'
echo ' - stop [<name>]'
}
fn list {|@rest|
var flags _ = (flag:parse-getopt $rest [
[&short=a &long=active &arg-optional=$true]
])
var active = (> (count $flags) 0)
var @connections = (-list &active=$active)
if (== (count $connections) 0) {
echo (styled 'Aucun VPN' yellow)
} else {
each {|c|
if $c[active] {
printf "%s (%s)\n" (styled $c[name] green bold) $c[type]
} else {
printf "%s (%s)\n" $c[name] $c[type]
}
} $connections
}
}
fn stop {|@rest|
if (== (count $rest) 0) {
var @actives = (-list &active=$true | each {|c| put $c[name] })
if (== (count $actives) 0) {
echo (styled 'Aucun VPN actif' yellow)
} else {
stop $@actives
}
} else {
each {|n|
var n = (-name $n)
if (not (-is-active $n)) {
echo (styled (printf '%s non actif' $n) yellow)
} else {
if ?(-stop $n) {
printf "%s %s\n" (styled $n bold) (styled désactivé bold red)
} else {
echo (styled (printf 'Arrêt de %s échoué' $n) red)
}
}
} $rest
}
}
fn start {|name|
var name = (-name $name)
if (-is-active $name) {
echo (styled (printf '%s est déjà actif' $name) yellow)
} elif (not (-exists $name)) {
echo (styled (printf '%s inconnu' $name) yellow)
} else {
var @actives = (-list &active=$true | each {|c| put $c[name] })
if (> (count $actives) 0) {
stop $@actives
}
if ?(-start $name) {
printf "%s %s\n" (styled $name bold) (styled activé bold green)
} else {
echo (styled (printf 'Démarrage de %s échoué' $name) red)
}
}
}
fn next {|@name|
if (== (count $name) 0) {
start (-next)
} else {
start $name[0]
}
}
var actions = [
&help= $help~
&list= $list~
&start= $start~
&stop= $stop~
]
var action = $next~
if (and (> (count $argv) 0) (has-key $actions $argv[0])) {
set action argv = $actions[$argv[0]] $argv[1..]
}
$action $@argv
}