3 # uccpass, a wrapper around the pass(1) password manager for UCC
6 # (and your name here?)
8 # Permission is hereby granted, free of charge, to any person obtaining a copy
9 # of this software and associated documentation files (the "Software"), to deal
10 # in the Software without restriction, including without limitation the rights
11 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 # copies of the Software, and to permit persons to whom the Software is
13 # furnished to do so, subject to the following conditions:
15 # The above copyright notice and this permission notice shall be included in
16 # all copies or substantial portions of the Software.
18 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 # Check for pass subcommand
28 if ! type pass >/dev/null; then
29 echo "$0: can't find the pass(1) command, is it installed correctly?"
31 if ! type gpg2 >/dev/null; then
32 echo "$0: can't find gpg2(1), is it installed correctly?"
35 UCCPASS_ROOT="/home/wheel/bin/uccpass"
36 UCCPASS_KEYRING="$UCCPASS_ROOT/keyring.gpg"
37 export PASSWORD_STORE_DIR="$UCCPASS_ROOT/store"
38 export PASSWORD_STORE_UMASK=007
41 export GIT_AUTHOR_NAME="`getent passwd $USER | cut -d: -f5`"
45 if [ -n "$UCCPASS_DEBUG" ]; then set -x; fi
49 # If you add more shells here, don't forget to add them to the egrep below.
51 # Use keychain. It is just better than futzing around with {ssh,gpg}-agent.
52 # Maybe when systemd is on everything then https://github.com/vodik/envoy
53 # will be better; until then, stick with what works.
56 bash_profile=". $UCCPASS_ROOT/bash_profile.uccpass"
57 grep -qsF "$bash_profile" ~/.bash_profile || echo "$bash_profile" >> ~/.bash_profile
58 bashrc=". $UCCPASS_ROOT/bashrc.uccpass"
59 grep -qsF "$bashrc" ~/.bashrc || echo "$bashrc" >> ~/.bashrc
62 zprofile=". $UCCPASS_ROOT/zprofile.uccpass"
63 grep -qsF "$zprofile" ~/.zprofile || echo "$zprofile" >> ~/.zprofile
64 zshenv=". $UCCPASS_ROOT/zshenv.uccpass"
65 grep -qsF "$zshenv" ~/.zshenv || echo "$zshenv" >> ~/.zshenv
68 fishconfig="source $UCCPASS_ROOT/config.uccpass.fish"
69 grep -qsF "$fishconfig" ~/.config/fish/config.fish || { mkdir -p ~/.config/fish; echo $fishconfig >> ~/.config/fish/config.fish ; }
75 gpg2 --quiet --import $UCCPASS_KEYRING
79 echo " > Setting you up for $0"
82 echo -n " >> Checking for running GPG agent... "
83 # Checking for a running agent sucks!
84 if [ -z "$GPG_AGENT_INFO" ] || ! gpg-connect-agent /bye 2>/dev/null; then
86 USER_SHELL=`basename $SHELL`
87 if echo $USER_SHELL | egrep -q 'zsh|bash|fish'; then
88 echo " [!] $0 can install an password caching agent into your shell initialisation files."
89 echo -n " [?] Do you want to do so? [Y/n] "
91 case $install_agent in
96 echo " [!] You will need to start a new shell to pick up your new agent."
100 echo -n " >> Starting GPG agent... "
101 eval `SHELL=/bin/sh keychain --eval --quiet --agents gpg`
105 # Generate new GPG key
106 if ! gpg --list-keys $GIT_AUTHOR_EMAIL >/dev/null 2>&1; then
107 echo " >> Generating new GPG key for $GIT_AUTHOR_NAME (UCC Wheel Group)"
108 echo " [!] At the next prompt, you will be asked for a secure passphrase."
109 echo " This controls access to the password store - please choose something secure."
110 echo " [?] Press ENTER to continue..."
112 new_key_info=" Key-Type: default
114 Name-Real: $GIT_AUTHOR_NAME (UCC Wheel Group)
115 Name-Email: $GIT_AUTHOR_EMAIL
119 echo "$new_key_info" | gpg2 --gen-key --batch
122 # Get the key fingerprint
123 KEY_FINGERPRINT=`gpg --list-secret-keys --with-fingerprint --with-colons $GIT_AUTHOR_EMAIL | grep '^fpr' | head -n 1 | cut -d: -f 10`
126 echo -n " >> Adding your key to the access list... "
127 if grep -qF "$KEY_FINGERPRINT" $PASSWORD_STORE_DIR/.gpg-id; then
128 echo "already present!"
130 echo "$KEY_FINGERPRINT" >> $PASSWORD_STORE_DIR/.gpg-id
135 # XXX: is it worth submitting these to an online keyserver?
136 echo -n " >> Adding your key to the shared keyring... "
137 if gpg2 --with-fingerprint --with-colons $UCCPASS_KEYRING | grep -qF "$KEY_FINGERPRINT"; then
138 echo "already present!"
140 gpg2 --export --armor "$KEY_FINGERPRINT" >> $UCCPASS_KEYRING && echo "ok."
144 echo " > $0 setup complete."
145 echo " [!] Ask someone with existing access to the password store to run \`$0 reload\`."
157 echo "The following keys have access to the password store:"
158 gpg2 --with-colons --list-keys `cat $PASSWORD_STORE_DIR/.gpg-id` | grep '^uid' | cut -d: -f 10
160 command pass init `cat $PASSWORD_STORE_DIR/.gpg-id`
164 echo "$0 also supports the following commands:"
165 echo "setup: generate a new key and insert it into the password store"
166 echo "reload: re-encrypt the password store"
168 insert|edit|generate|rm|cp|mv|git)
177 # vim: autoindent tabstop=4 shiftwidth=4 expandtab softtabstop=4