d0bb13d40b3a04f651b8ab344ae5dfc8e984dc95
[monkeysphere.git] / howler / howler
1 #!/bin/sh
2
3 # howler: monkeysphere server gpg generator/publisher/maintainer
4 #
5 # Written by
6 # Jameson Rollins <jrollins@fifthhorseman.net>
7 #
8 # Copyright 2008, released under the GPL, version 3 or later
9
10 PGRM=$(basename $0)
11
12 ########################################################################
13 # FUNCTIONS
14 ########################################################################
15
16 usage() {
17 cat <<EOF
18 usage: $PGRM gen-key
19        $PGRM publish-key
20        $PGRM trust-uids USERID [USERID...]
21        $PGRM help
22 EOF
23 }
24
25 failure() {
26     echo "$1" >&2
27     exit ${2:-'1'}
28 }
29
30 # generate server gpg key
31 gen_key() {
32     KEY_TYPE=${KEY_TYPE:-RSA}
33     KEY_LENGTH=${KEY_LENGTH:-2048}
34     KEY_USAGE=${KEY_USAGE:-encrypt,auth}
35     SERVICE=${SERVICE:-ssh}
36     HOSTNAME_FQDN=${HOSTNAME_FQDN:-$(hostname -f)}
37
38     USERID=${USERID:-"$SERVICE"://"$HOSTNAME_FQDN"}
39
40     echo "key parameters:"
41     cat <<EOF
42 Key-Type: $KEY_TYPE
43 Key-Length: $KEY_LENGTH
44 Key-Usage: $KEY_USAGE
45 Name-Real: $USERID
46 EOF
47
48     read -p "generate key? [Y|n]: " OK; OK=${OK:=Y}
49     if [ ${OK/y/Y} != 'Y' ] ; then
50         failure "aborting."
51     fi
52
53     if gpg --list-key ="$USERID" > /dev/null 2>&1 ; then
54         failure "key for '$USERID' already exists"
55     fi
56
57     echo "generating server key..."
58     gpg --batch --gen-key <<EOF
59 Key-Type: $KEY_TYPE
60 Key-Length: $KEY_LENGTH
61 Key-Usage: $KEY_USAGE
62 Name-Real: $USERID
63 %commit
64 EOF
65 }
66
67 publish_key() {
68     read -p "publish key to $KEYSERVER? [Y|n]: " OK; OK=${OK:=Y}
69     if [ ${OK/y/Y} != 'Y' ] ; then
70         failure "aborting."
71     fi
72
73     keyID=$(gpg --list-key --with-colons ="$USERID" 2> /dev/null | grep '^pub:' | cut -d: -f5)
74
75     # dummy command so as not to publish fakes keys during testing
76     # eventually:
77     #gpg --send-keys --keyserver "$KEYSERVER" "$keyID"
78     echo "gpg --send-keys --keyserver $KEYSERVER $keyID"
79 }
80
81 # FIXME: need to figure out how to automate this, in a batch mode
82 #  or something.
83 trust_uids() {
84     for userID ; do
85         gpg --keyserver "$KEYSERVER" --search ="$userID"
86         gpg --edit-key "$userID"
87     done
88 }
89
90 ########################################################################
91 # MAIN
92 ########################################################################
93
94 # set ms home directory
95 MS_HOME=${MS_HOME:-/etc/monkeysphere}
96
97 # load configuration file
98 MS_CONF=${MS_CONF:-"$MS_HOME"/monkeysphere.conf}
99 [ -e "$MS_CONF" ] && . "$MS_CONF"
100
101 GNUPGHOME=${GNUPGHOME:-"$MS_HOME"/gnupg}
102 export GNUPGHOME
103 KEYSERVER=${KEYSERVER:-subkeys.pgp.net}
104 export KEYSERVER
105
106 COMMAND="$1"
107 [ "$COMMAND" ] || failure "Type '$PGRM help' for usage."
108 shift 1
109
110 case $COMMAND in
111     'gen-key')
112         gen_key
113         ;;
114     'publish-key')
115         publish_key
116         ;;
117     'trust-uids')
118         trust_uids "$@"
119         ;;
120     'help')
121         usage
122         exit
123         ;;
124     *)
125         failure "Unknown command: '$COMMAND'
126 Type '$PGRM help' for usage."
127         ;;
128 esac