#!/bin/bash # # Keyringer key management system. # # Copyright (C) 2010 Silvio Rhatto - rhatto at riseup.net # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the # License, or any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # function keyringer_init { BASEDIR="$3" URL="$4" RECIPIENTS="$BASEDIR/config/recipients" OPTIONS="$BASEDIR/config/options" # We are initializing, so avoid some checks export KEYRINGER_CHECK_VERSION="false" export KEYRINGER_CHECK_RECIPIENTS="false" # Parse if [ -z "$BASEDIR" ]; then echo "Usage: $BASENAME init [url]" exit 1 elif grep -q -e "^$KEYRING=" $CONFIG; then echo "Keyring $KEYRING already defined" exit 1 fi # Setup if [ ! -z "$URL" ]; then git clone "$URL" "$BASEDIR" if [ "$?" != "0" ]; then echo "Error cloning remote $URL" exit 1 fi else if [ -e "$BASEDIR" ]; then if [ ! -d "$BASEDIR/keys" ] || [ ! -e "$RECIPIENTS" ]; then echo "Invalid keyring $BASEDIR: incomplete installation" # A common mistake if [ -d "$BASEDIR/../keys" ]; then echo "You might try `cd $BASEDIR/.. && pwd` instead" fi exit 1 fi else # Setup folders mkdir -p "$BASEDIR/"{config,keys} # Setup recipients keyringer_create_new_recipients "$RECIPIENTS/default" # Setup options touch "$OPTIONS" # Setup README echo "Keyring repository powered by http://git.sarava.org/?p=keyringer.git;a=summary" > "$BASEDIR/README" echo "" >> "$BASEDIR/README" fi # Secure chmod 700 "$RECIPIENTS" fi # Reparse basedir to force absolute folder BASEDIR="`cd $BASEDIR && pwd`" # Add entry chmod 700 "$BASEDIR" echo "$KEYRING=\"$BASEDIR\"" >> "$CONFIG" # Init if ! keyringer_is_git "$BASEDIR"; then keyringer_exec git "$BASEDIR" init keyringer_exec git "$BASEDIR" add . keyringer_exec git "$BASEDIR" commit -m Importing fi } function keyringer_dispatch { BASEDIR="`keyringer_config $KEYRING`" # Dispatch if [ ! -z "$BASEDIR" ]; then shift 2 keyringer_exec "$ACTION" "$BASEDIR" $* exit $? else echo "No keydir configured for $KEYRING" exit 1 fi } # Config NAME="keyringer" KEYRINGER_VERSION="0.1" CONFIG="$HOME/.$NAME/config" BASENAME="`basename $0`" KEYRING="$1" ACTION="$2" # Turn off pathname expansion so expansion can work properly set -f # Export preferences and version for other scripts export PREFERENCES="`dirname $CONFIG`/$KEYRING" export KEYRINGER_VERSION # Set functions location if [ -e "`dirname $(readlink -f $0)`/lib/$NAME/functions" ]; then # Development or local installation layout LIB="`dirname $(readlink -f $0)`/lib/$NAME/functions" else # System installation layout LIB="`dirname $(readlink -f $0)`/../lib/$NAME/functions" fi # Set actions location if [ -e "`dirname $(readlink -f $0)`/share/$NAME" ]; then # Development or local installation layout ACTIONS="`dirname $(readlink -f $0)`/share/$NAME" else # System installation layout ACTIONS="`dirname $(readlink -f $0)`/../share/$NAME" fi # Load functions source "$LIB" || exit 1 # Setup main configuration and load preferences keyringer_config_load if [ -z "$ACTION" ]; then keyringer_usage exit 1 fi if [ "$ACTION" == "init" ]; then keyringer_init $* elif keyringer_has_action "$ACTION"; then keyringer_dispatch $* else echo "No such action $ACTION" exit 1 fi