#!/bin/bash # # Common functions. # # Setup main configuration and load preferences function keyringer_config_load { if [ -f "$HOME/.$NAME" ]; then echo "Converting legacy configuration scheme..." mv $HOME/.$NAME $HOME/.$NAME.tmp mkdir $HOME/.$NAME mv $HOME/.$NAME.tmp $CONFIG fi if [ ! -e "$CONFIG" ]; then echo "Creating $CONFIG..." mkdir `dirname $CONFIG` touch $CONFIG chmod 600 $CONFIG echo "# Keyringer config file." > $CONFIG echo "" >> $CONFIG fi keyringer_config_load_preferences } function keyringer_config_load_preferences { # Load custom keyring preferences if [ ! -z "$PREFERENCES" ] && [ -f "$PREFERENCES" ]; then source $PREFERENCES fi } # Load a parameter from config function keyringer_config { if [ -z "$CONFIG" ]; then echo "Your have to set CONFIG variable in the code" exit 1 elif [ -e "$CONFIG" ]; then grep -e "^$1=" $CONFIG | tail -n 1 | cut -d = -f 2 | sed -e 's/"//g' -e "s/'//g" | sed -e 's/ *#.*$//' else echo "Config file not found: $CONFIG" exit 1 fi } # Return the list of recipients function keyringer_recipients { grep -v '^#' $1 | grep -v '^$' | awk '{ print "-r " $2 }' | xargs } # Check if keyringer has a given action function keyringer_has_action { if [ -z "$ACTIONS" ]; then echo "Your have to set ACTIONS variable in the code" exit 1 fi if [ -e "$ACTIONS/$1" ]; then true else false fi } # Execute an action function keyringer_exec { # Setup action="$1" basedir="$2" shift 2 # Dispatch if keyringer_has_action $action; then $ACTIONS/$action $basedir $* fi } # Return a filename with correct extension function keyringer_filename { if [ -z "$1" ]; then return else echo `dirname $1`/`basename $1 .asc`.asc fi } # Check if a folder is inside a git repository function keyringer_is_git { if [ -z "$1" ]; then false elif [ ! -d "$1" ]; then false elif [ -d "$1/.git" ]; then true else cwd="`pwd`" cd $1 && git="`git status &> /dev/null`" && cd $cwd if [ "$git" != "128" ]; then true else false fi fi } # Setup a temporary file function keyringer_set_tmpfile { if [ -z "$BASEDIR" ]; then echo "Please set BASEDIR before creating a tmp file" exit 1 fi if [ -z "$1" ]; then template="$BASEDIR/tmp/keyringer.XXXXXXXXXX" else template="$BASEDIR/tmp/$1.XXXXXXXXXX" fi mkdir -p $BASEDIR/tmp keyringer_git_ignore 'tmp/*' tmpfile="`mktemp $template`" if [ "$?" != "0" ]; then echo "Error: can't set tmpfile $tmpfile" exit 1 fi echo $tmpfile } # Remove a temporary file function keyringer_unset_tmpfile { if [ -z "$1" ]; then echo "No tmp file set" fi rm -f $1 if [ "$?" != "0" ]; then echo "Warning: could not delete file $1. Please delete it manually as it might have sensitive information." exit 1 fi } # Add a pattern into gitignore function keyringer_git_ignore { if [ ! -z "$BASEDIR/.gitignore" ]; then echo $1 > $BASEDIR/.gitignore keyringer_exec git $BASEDIR add .gitignore else if ! grep -q -e "^$1$" $BASEDIR/.gitignore; then echo $1 >> $BASEDIR/.gitignore fi fi } # Set needed environment variables. function keyringer_set_env { if [ -z "$1" ]; then echo "Error: missing arguments for keyringer_set_env" exit 1 fi ACTIONS="`dirname $0`" BASENAME="`basename $0`" BASEDIR="$1" KEYDIR="$BASEDIR/keys" RECIPIENTS="$BASEDIR/config/recipients" OPTIONS="$BASEDIR/config/options" }