Skip to content

Commit

Permalink
Added shell script for masochits that syncs card data from VPS
Browse files Browse the repository at this point in the history
  • Loading branch information
hiviah committed Nov 16, 2023
1 parent 99c16b6 commit d1706d2
Showing 1 changed file with 137 additions and 0 deletions.
137 changes: 137 additions & 0 deletions SYNC_cards_from_vps.sh
@@ -0,0 +1,137 @@
#!/bin/bash

# This copies 2 files, cards.txt and cards_desfire.txt from brmdoor@brmlab.cz
# Shows the mtime (modified time according to server), which should be set to:
#
# $ cat /etc/timezone
# Europe/Prague
#
# Use same timezones, you'll have less headache
# The mtime check is just a sanity check, a human should check if it's correct
#
# ANY TIME YOU CAN ABORT THE SCRIPT WITH CTRL-C, BUT DABASE CHANGES THAT HAPPENED
# WILL NOT ROLL BACK!
#
# Then it will show diff of cards existing and to be imported in vimdiff
# Overview and use !q to exit
#
# Script will ask 3 times, Enter is accept, Ctrl-C is abort:
# 1) do you agree with the mtimes, are they corre



################################################################
# Settings - keys, user, server
#

USERNAME=brmdoor
SERVER=brmlab.cz
SSH_PRIVATE_KEY="$HOME/.ssh/brmdoor_vps_ecdsa-sha2-nistp256"
BRMDOOR_SQLITE_DB="$HOME/brmdoor_libnfc/brmdoor.sqlite"
WORK_DIR="$HOME/brmdoor_libnfc/"


################################################################
# Trapping errors
#

tempfiles=( )
cleanup() {
rm -f "${tempfiles[@]}"
}
trap cleanup 0

error() {
local parent_lineno="$1"
local message="$2"
local code="${3:-1}"
if [[ -n "$message" ]] ; then
echo "Error on or near line ${parent_lineno}: ${message}; exiting with status ${code}"
else
echo "Error on or near line ${parent_lineno}; exiting with status ${code}"
fi
exit "${code}"
}
trap 'error ${LINENO}' ERR

# This shit doesn't work on SQLite, but works on 'sort'
export LC_ALL=C.UTF-8


################################################################
# Actual code that downloads cards, shows diff, asks if you agree.
# If agreed, cards will be imported into brmdoor db

BLUE='\033[0;34m'
WHITE='\033[0;37m'
RED='\033[0;31m'


clear


echo -e "$RED"
echo "################## READ THE DIRECTIONS FFS! #######################"
echo "---!--- We are going to download cards files from $USERNAME@$SERVER, we will show you first the last modified time (mtime) as a sanity check"
echo "---!--- Entering work directory $WORK_DIR"
echo -e "$WHITE"
cd "$WORK_DIR"

# Following will work with config, but we are using variables set here
#sftp brmdoor@brmlab.cz <<< "ls -l cards/"

sftp -i "$SSH_PRIVATE_KEY" "$USERNAME@$SERVER" <<< "ls -l cards/" || error "SFTP file list failed"



echo -e "$RED"
echo
echo
echo "--???-- Do you accept the last modified time of changes?"
echo "---!--- Press ENTER to continue or CTRL-C to ABORT"
read

echo -e "$WHITE"
sftp -i "$SSH_PRIVATE_KEY" "$USERNAME@$SERVER":cards/"cards*.txt" . || error "SFTP file card download failed"

echo -e "$RED"
echo "---!--- Accepted, downloaded 2 files, for UID cards and Desfire cards."
echo "---!--- Now we will show differences in vimdiff for UID-only cards first, use :qa! to quit vimdiff or zR to expand complete file, then answer whether you accept changes"
echo "---!--- Note there a tiny bug in 'sort' vs SQL collate, some members may appear at different order in list"
echo "---!--- Press ENTER to continue or CTRL-C to ABORT"
read



NEW_CARDS_FILE="cards.txt"
vimdiff <(sqlite3 "$BRMDOOR_SQLITE_DB" 'select nick, uid_hex from authorized_uids order by nick,uid_hex COLLATE RTRIM;') <(LC_ALL=C sort <"$NEW_CARDS_FILE" | sed 's/ /|/')

echo -e "$BLUE"
echo "---!--- Now you have seen difference for UID-based cards"
echo -e "$RED"
echo "---!--- Do you accept changes?"
echo "---!--- Press ENTER to continue or CTRL-C to ABORT"
read

echo -e "$RED"
echo "---!--- We will show differences for *****DESFIRE***** cards, use :qa! to quit vimdiff or zR to expand complete file"
echo "---!--- Press ENTER to continue or CTRL-C to ABORT"
read

NEW_CARDS_FILE="cards_desfire.txt"
vimdiff <(sqlite3 ~/brmdoor_libnfc/brmdoor.sqlite 'select nick, uid_hex from authorized_desfires order by nick,uid_hex;') <(LC_ALL=C sort <"$NEW_CARDS_FILE" | sed 's/ /|/')

echo -e "$BLUE"
echo "---!--- Now you have seen difference for DESFIRE-based cards"
echo -e "$RED"
echo "---!--- Do you accept changes?"
echo "---!--- Press ENTER to continue or CTRL-C to ABORT"
echo
echo "Now ALL ACCEPTED CHANGES WILL BE COMMITED to brmdoor DB on Enter"

read

python2 ./import_jendasap_cards.py cards.txt brmdoor.sqlite && \
echo "Imported UID-based cards" && \
./import_jendasap_cards.py --desfire cards_desfire.txt brmdoor.sqlite || \
error "Full import failed, check what got b0rked"

0 comments on commit d1706d2

Please sign in to comment.