cranspasswords_bash_completion 3 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# 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
51
      _cranspasswords_server=$last;
52
53
    fi
  else
54
    _cranspasswords_server="default";
55
56
  fi

57
58
server=$_cranspasswords_server

59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
  # 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
  
80
81
82
83
84
85
86
87
88
 if [[ "$last" = "--edit" ]]; then
    if  [ ! -f "${pass_dir}${server}-w" ]; then
      echo "`cranspasswords --server $server -l | grep "+" | awk '{print $2}'`" > "${pass_dir}${server}-w"
    fi
    pass_list="`cat "${pass_dir}${server}-w"`"
    COMPREPLY=( $(compgen -W "$pass_list" -- $cur ) )
    return 0
  fi

89
90
  if true; then
    if  [ ! -f "${pass_dir}$server" ]; then
91
      echo "`cranspasswords --server $server -l | grep "\( +\| -\)" | awk '{print $2}'`" > "${pass_dir}$server"
92
93
94
95
96
97
98
99
100
101
    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