# 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