148 lines
3.6 KiB
Text
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
|
|
}
|