diff --git a/cranspasswords.py b/cranspasswords.py index b798c44c518fd2c655edd0f151951a4c45cf2a94..9c2de2bc8362807cfec48b58117df14e9973f18b 100755 --- a/cranspasswords.py +++ b/cranspasswords.py @@ -273,6 +273,11 @@ def show_roles(): if role.endswith('-w'): continue print " * " + role +def show_servers(): + print """Liste des serveurs disponibles""" + for server in config.servers.keys(): + print " * " + server + old_clipboard = None def saveclipboard(restore=False): global old_clipboard @@ -472,6 +477,9 @@ if __name__ == "__main__": action_grp.add_argument('--list-roles',action='store_const',dest='action', default=show_file,const=show_roles, help="Lister les rôles des gens") + action_grp.add_argument('--list-servers',action='store_const',dest='action', + default=show_file,const=show_servers, + help="Lister les rôles serveurs") action_grp.add_argument('--recrypt-role',action='store_const',dest='action', default=show_file,const=update_role, help="Met à jour (reencode les roles)") diff --git a/cranspasswords_bash_completion b/cranspasswords_bash_completion new file mode 100644 index 0000000000000000000000000000000000000000..6b9aced48c0697b54016077ce394d83987dbfd44 --- /dev/null +++ b/cranspasswords_bash_completion @@ -0,0 +1,90 @@ +# Fonction de notre auto completion + +contain(){ + local i + for i in $2; do + if [[ "$i" = "$1" ]]; then + return 0 + fi + done + return 1 +} + + +if [[ "$EDITOR" = "" ]]; then + export EDITOR="nano"; +fi + +_cranspasswords(){ + # declaration des variables locales + local argc first last prev cur cur_first_char opts_short opts role_dir pass_dir server server_list role_list pass_list timeout + + role_dir="/tmp/cranspasswords-$USER-role/" + pass_dir="/tmp/cranspasswords-$USER-passwords/" + # Combien de temps on garde les réponses du serveur en cache (en minutes) + timeout=5 + + #COMPREPLY désigne la réponse à renvoyer pour la complétion actuelle + COMPREPLY=() + # argc : vaut le nombre d'argument actuel sur la ligne de commande + argc=${COMP_CWORD}; + + # cur : désigne la chaine de caractère actuelle pour le dernier mot de la ligne de commande + first="${COMP_WORDS[1]}" + last="${COMP_WORDS[$(($argc - 1 ))]}" + prev="${COMP_WORDS[$(($argc - 2 ))]}" + cur="${COMP_WORDS[argc]}" + cur_first_char=${cur:0:1} + opts_short="-h -v -c -f -l" + opts="--help --server --verbose --clipboard --noclipboard --force --edit --view --remove --list --check-keys --update-keys --list-roles --recrypt-roles --roles --list-servers" + + + mkdir -p -m 700 "$role_dir" + mkdir -p -m 700 "$pass_dir" + + find "$role_dir" -type f -mmin +$timeout -exec rm -f {} \; + find "$pass_dir" -type f -mmin +$timeout -exec rm -f {} \; + + # On détermine si on utilsie un serveur alternatif + if contain "--server" "${COMP_WORDS[*]}"; then + if [[ "$prev" = "--server" ]]; then + server=$last; + fi + else + server="default"; + fi + + # les options possibles pour notre auto-complétion + if [[ $cur_first_char = "-" ]]; then + COMPREPLY=( $(compgen -W "$opts" -- $cur ) ) + return 0 + fi + + if [[ "$last" = "--server" ]]; then + server_list="`cranspasswords --list-servers | grep -- "*" | awk '{print $2}'`" + COMPREPLY=( $(compgen -W "$server_list" -- $cur ) ) + return 0 + fi + + if [[ "$last" = "--roles" ]]; then + if [ ! -f "${role_dir}$server" ]; then + echo "`cranspasswords --server $server --list-roles | grep -- "*" | awk '{print $2}'`" > "${role_dir}$server" + fi + role_list="`cat "${role_dir}$server"`" + COMPREPLY=( $(compgen -W "$role_list" -- $cur ) ) + return 0 + fi + + if true; then + if [ ! -f "${pass_dir}$server" ]; then + echo "`cranspasswords --server $server -l | grep "+" | awk '{print $2}'`" > "${pass_dir}$server" + fi + pass_list="`cat "${pass_dir}$server"`" + COMPREPLY=( $(compgen -W "$pass_list" -- $cur ) ) + return 0 + fi + +} + +# On active l'auto-completion +complete -F _cranspasswords cranspasswords