declare -Ag appRollCall # Associative array for storing app status
declare -Ag fileRollCall # Associative array for storing file status
declare -Ag dirRollCall # Associative array for storing dir status
+declare -a recPubKeys # for processArguments function
+declare recipients # for main function
#===BEGIN Declare local script functions===
checkapp() {
echoerr " -v, --verbose"
echoerr " Display debugging info."
echoerr
+ echoerr " -e, --encrypt"
+ echoerr " Encrypt output."
+ echoerr
+ echoerr " -r, --recipient [ pubkey string ]"
+ echoerr " Specify recipient."
+ echoerr
echoerr " -o, --output [ directory ]"
echoerr " Specify output directory to save logs."
+ echoerr
+ echoerr " -c, --compress"
+ echoerr " Compress output with gzip (before encryption if enabled)."
+ echoerr
+ echoerr "EXAMPLE: (bash script lines)"
+ echoerr "/bin/bash bkgpslog -e -c \\"
+ echoerr "-r age1mrmfnwhtlprn4jquex0ukmwcm7y2nxlphuzgsgv8ew2k9mewy3rs8u7su5 \\"
+ echoerr "-r age1ala848kqrvxc88rzaauc6vc5v0fqrvef9dxyk79m0vjea3hagclswu0lgq \\"
+ echoerr "-o ~/Sync/Location"
} # Display information on how to use this script.
showVersion() {
echoerr "$SCRIPT_VERSION"
--version) showVersion; exit 1;; # Show version
-v | --verbose) OPTION_VERBOSE="true"; vbm "DEBUG:Verbose mode enabled.";; # Enable verbose mode.
-o | --output) if [ -d "$2" ]; then DIROUT="$2"; vbm "DEBUG:DIROUT:$DIROUT"; shift; fi ;; # Define output directory.
+ -e | --encrypt) OPTION_ENCRYPT="true"; vbm "DEBUG:Encrypted output mode enabled.";;
+ -r | --recipient) # Add 'age' recipient via public key string
+ recPubKeys+=("$2"); vbm "pubkey added:""$2"; shift;;
+ -c | --compress) OPTION_COMPRESS="true"; vbm "DEBUG:Compressed output mode enabled.";;
*) echoerr "ERROR: Unrecognized argument."; exit 1;; # Handle unrecognized options.
esac
shift
} # Get date&time without separators
main() {
processArguments "$@" # Process arguments.
- if checkapp gpspipe && checkdir "$DIROUT"; then
+ if [[ "$OPTION_ENCRYPT" = "true" ]]; then # Check if encryption option active.
+ if checkapp age; then # Check that age is available.
+ for pubkey in "${recPubKeys[@]}"; do # Validate recipient pubkey strings by forming test message
+ vbm "DEBUG:Testing pubkey string:$pubkey"
+ if echo "butts" | age -a -r "$pubkey" 1>/dev/null; then
+ # Form age recipient string
+ recipients="$recipients""-r $pubkey ";
+ vbm "Added pubkey for forming age recipient string:""$pubkey";
+ vbm "DEBUG:recipients:""$recipients";
+ else
+ yell "ERROR:Exit code ""$?"". Invalid recipient pubkey string. Exiting."; exit 1;
+ fi
+ done
+ vbm "DEBUG:Finished processing recPubKeys array";
+ # Form age command string
+ CMD_ENCRYPT="age ""$recipients ";
+ CMD_ENCRYPT_SUFFIX=".age";
+ else
+ yell "ERROR:Encryption enabled but \"age\" not found. Exiting."; exit 1;
+ fi
+ else
+ CMD_ENCRYPT="tee /dev/null ";
+ CMD_ENCRYPT_SUFFIX="";
+ vbm "DEBUG:Encryption not enabled."
+ fi
+ if [[ "$OPTION_COMPRESS" = "true" ]]; then # Check if compression option active
+ if checkapp gzip; then # Check if gzip available
+ CMD_COMPRESS="gzip ";
+ CMD_COMPRESS_SUFFIX=".gz";
+ else
+ yell "ERROR:Compression enabled but \"gzip\" not found. Exiting."; exit 1;
+ fi
+ else
+ CMD_COMPRESS="tee /dev/null ";
+ CMD_COMPRESS_SUFFIX="";
+ vbm "DEBUG:Compression not enabled."
+ fi
+
+
+ if checkapp gpspipe && checkdir "$DIROUT"; then
+
# # Set script lifespan to end at start of next day
# if ! scriptTTL="$(timeUntilNextDay)"; then
# if [[ "$scriptTTL" -eq 0 ]]; then
((debugCounter++))
# Determine output file paths (time is start of buffer period)
FILEOUT_BASENAME="$(dateTimeShort)""--P""$bufferTTL""S..""$SCRIPT_HOSTNAME""_location" ; # ISO-8601 YYYYmmddTHHMMSS+zzP[$bufferTTL]S
- FILEOUT_NMEA="$FILEOUT_BASENAME".nmea ;
- FILEOUT_GPX="$FILEOUT_BASENAME".gpx ;
- FILEOUT_KML="$FILEOUT_BASENAME".kml ;
+ FILEOUT_NMEA="$FILEOUT_BASENAME".nmea"$CMD_COMPRESS_SUFFIX""$CMD_ENCRYPT_SUFFIX" ;
+ FILEOUT_GPX="$FILEOUT_BASENAME".gpx"$CMD_COMPRESS_SUFFIX""$CMD_ENCRYPT_SUFFIX" ;
+ FILEOUT_KML="$FILEOUT_BASENAME".kml"$CMD_COMPRESS_SUFFIX""$CMD_ENCRYPT_SUFFIX" ;
+ # Define GPS conversion commands
+ CMD_CONV_NMEA="tee /dev/null "
+ CMD_CONV_GPX="gpsbabel -i nmea -f - -o gpx -F - "
+ CMD_CONV_KML="gpsbabel -i nmea -f - -o kml -F - "
# Fill buffer
buffer="$(timeout "$bufferTTL""s" gpspipe -r)"; # Record gpspipe nmea data to buffer for bufferTTL seconds
- # Process and save buffers
- echo "$buffer" > "$DIROUT"/"$FILEOUT_NMEA" & # Save NMEA format
- echo "$buffer" | gpsbabel -i nmea -f - -o gpx -F - > "$DIROUT"/"$FILEOUT_GPX" & # Save GPX format
- echo "$buffer" | gpsbabel -i nmea -f - -o kml -F - > "$DIROUT"/"$FILEOUT_KML" & # Save KML format
+ # Execute processing and save command string
+ echo "$buffer" | $CMD_CONV_NMEA | $CMD_COMPRESS | $CMD_ENCRYPT > "$DIROUT"/"$FILEOUT_NMEA" & # Save NMEA format
+ echo "$buffer" | $CMD_CONV_GPX | $CMD_COMPRESS | $CMD_ENCRYPT > "$DIROUT"/"$FILEOUT_GPX" & # Save GPX format
+ echo "$buffer" | $CMD_CONV_KML | $CMD_COMPRESS | $CMD_ENCRYPT > "$DIROUT"/"$FILEOUT_KML" & # Save KML format
vbm "DEBUG:Completed buffer session $debugCounter ." 1>&2;
# Reset buffer and filenames
unset buffer FILEOUT_BASENAME FILEOUT_NMEA FILEOUT_GPX FILEOUT_KML;