99 lines
3.1 KiB
Bash
99 lines
3.1 KiB
Bash
# bash completion for vpn-router-ca -*- shell-script -*-
|
|
|
|
# Python of the package that prints the revocation reasons (reasons) or, from the configuration read as root, the
|
|
# issuing CAs (cas) or the certificate templates (templates), which other users do not get.
|
|
_vpn_router_ca_python()
|
|
{
|
|
python3 -c '
|
|
import sys
|
|
sys.path.insert(0, "/usr/lib/vpn-router")
|
|
import vpnrouter
|
|
import vpnrouter_pki
|
|
if sys.argv[1] == "reasons":
|
|
print("\n".join(vpnrouter_pki.REASONS))
|
|
else:
|
|
cfg = vpnrouter.load_config()
|
|
print("\n".join(vpnrouter.issuing_cas(cfg) if sys.argv[1] == "cas" else vpnrouter.pki_templates(cfg)))
|
|
' "$@" 2>/dev/null
|
|
}
|
|
|
|
_vpn_router_ca()
|
|
{
|
|
local cur prev words cword split
|
|
_init_completion -s || return
|
|
|
|
# The command and, for ca and root, the action are the first words that are not options; the arguments are the
|
|
# words after them but option values.
|
|
local i command='' action='' args=0
|
|
for ((i = 1; i < cword; i++)); do
|
|
case ${words[i]} in
|
|
--ca | --template | --csr | --subject | --san | --pfx | --reason | --out) ((i++)) ;;
|
|
-*) ;;
|
|
*)
|
|
if [[ -z $command ]]; then
|
|
command=${words[i]}
|
|
elif [[ $command == @(ca|root) && -z $action ]]; then
|
|
action=${words[i]}
|
|
else
|
|
((args++))
|
|
fi
|
|
;;
|
|
esac
|
|
done
|
|
|
|
case $prev in
|
|
--ca)
|
|
COMPREPLY=($(compgen -W "$(_vpn_router_ca_python cas)" -- "$cur"))
|
|
return
|
|
;;
|
|
--template)
|
|
COMPREPLY=($(compgen -W "$(_vpn_router_ca_python templates)" -- "$cur"))
|
|
return
|
|
;;
|
|
--reason)
|
|
COMPREPLY=($(compgen -W "$(_vpn_router_ca_python reasons)" -- "$cur"))
|
|
return
|
|
;;
|
|
--csr | --pfx | --out)
|
|
_filedir
|
|
return
|
|
;;
|
|
--subject | --san)
|
|
return
|
|
;;
|
|
esac
|
|
$split && return
|
|
|
|
if [[ -z $command ]]; then
|
|
if [[ $cur == -* ]]; then
|
|
COMPREPLY=($(compgen -W '--json --help' -- "$cur"))
|
|
else
|
|
COMPREPLY=($(compgen -W 'status list issue revoke maintain ca root' -- "$cur"))
|
|
fi
|
|
return
|
|
fi
|
|
|
|
if [[ $cur == -* ]]; then
|
|
local options='--help'
|
|
case $command$action in
|
|
list) options+=' --ca' ;;
|
|
issue) options+=' --ca --template --csr --subject --san --pfx' ;;
|
|
revoke) options+=' --reason' ;;
|
|
rootexport-key) options+=' --out' ;;
|
|
rootremove-key) options+=' --yes' ;;
|
|
esac
|
|
COMPREPLY=($(compgen -W "$options" -- "$cur"))
|
|
return
|
|
fi
|
|
|
|
case $command,$action,$args in
|
|
ca,,*) COMPREPLY=($(compgen -W 'csr import' -- "$cur")) ;;
|
|
root,,*) COMPREPLY=($(compgen -W 'export-key remove-key import-key import-crl' -- "$cur")) ;;
|
|
ca,*,0) COMPREPLY=($(compgen -W "$(_vpn_router_ca_python cas)" -- "$cur")) ;;
|
|
ca,import,1 | root,import-key,0 | root,import-crl,0) _filedir ;;
|
|
esac
|
|
} &&
|
|
complete -F _vpn_router_ca vpn-router-ca
|
|
|
|
# ex: filetype=sh
|