mirror of
https://github.com/brmlab/brmdoor_libnfc.git
synced 2025-06-06 23:54:00 +02:00
Added shell script for masochits that syncs card data from VPS
This commit is contained in:
parent
99c16b63fd
commit
d1706d29fc
1 changed files with 137 additions and 0 deletions
137
SYNC_cards_from_vps.sh
Executable file
137
SYNC_cards_from_vps.sh
Executable file
|
@ -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"
|
Loading…
Add table
Add a link
Reference in a new issue