| #!/bin/bash |
| # This script is for refreshing your keyring on a regular |
| # basis. It can be run from cron or manually. See README.rst |
| # for details on how to set it up. |
| # |
| # Remove the following line. It is there so people don't run this |
| # script directly from the git repository. |
| exit 0 |
| |
| # FIX ME: point at the actual location of pgpkeys.git clone |
| PGPKEYS="$HOME/git/korg-pgpkeys" |
| |
| # If you remove "--import-options merge-only", it will import keys |
| # not already present on your keyring, which is not what you want! |
| IMPORTFLAGS="--import-options import-clean --import-options merge-only" |
| |
| # Make sure this points to your gpg v2 binary. You can also add other |
| # flags here, such as --homedir |
| GPGBIN="/usr/bin/gpg --batch" |
| |
| # Run with -q from cron to silence most output |
| [[ $1 == '-q' ]] && Q='-q' |
| |
| cd $PGPKEYS || exit 1 |
| # Exit if we can't run git fetch (perhaps not online?) |
| [[ -z "$Q" ]] && echo "Updating the repository" |
| git fetch $Q || exit 0 |
| |
| |
| if [[ $(git rev-parse HEAD) == $(git rev-parse @{u}) ]]; then |
| [[ -z $Q ]] && echo "No changes since last run" |
| exit 0 |
| fi |
| |
| # Verify that the signature on the tip is both good and valid. |
| # To be valid, it needs to be signed by a key with ultimate or |
| # full ownertrust -- see README for details. |
| [[ -z $Q ]] && echo "Verifying commit signature at the tip" |
| COUNT=$(git verify-commit --raw @{u} 2>&1 | grep -c -E '^\[GNUPG:\] (GOODSIG|VALIDSIG)') |
| if [[ ${COUNT} -lt 2 ]]; then |
| # Hopefully, this never happens. :) |
| echo "$0: FAILED TO VERIFY COMMIT SIGNATURE!" |
| exit 1 |
| fi |
| |
| CHANGED=$(git diff --name-only HEAD @{u} | grep '.asc$') |
| |
| # Don't use pull here in case upstream moved on since the fetch above. If this |
| # happens CHANGED would likely be incomplete and you wouldn't have verified |
| # HEAD but continue to import keymaterial from it. |
| git merge $Q @{u} |
| |
| IMPORTFILES='' |
| for ASCFILE in $CHANGED; do |
| # It may have been a delete, so check if it's still there |
| [[ -f $ASCFILE ]] && IMPORTFILES="$IMPORTFILES $ASCFILE" |
| done |
| |
| # This is a somewhat hacky but effective way to trim space |
| IMPORTFILES=$(echo $IMPORTFILES | xargs) |
| if [[ ! -z $IMPORTFILES ]]; then |
| [[ -z "$Q" ]] && echo "Updating keyring" |
| $GPGBIN $Q --import $IMPORTFLAGS $IMPORTFILES |
| fi |