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