Compare commits
9 Commits
ce61054098
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| a0e9e88448 | |||
| 13237120eb | |||
| b5a1ba3579 | |||
| 0087bf3622 | |||
| 8b49189438 | |||
| 143d5fd470 | |||
| 6aa7035804 | |||
| 91eb824daa | |||
| 8f20ec55ef |
61
src/paperctl.sh
Normal file → Executable file
61
src/paperctl.sh
Normal file → Executable file
@@ -0,0 +1,61 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "Welcome to paperctl, the ultimate cli client/server management tool"
|
||||
echo "(c)2026 - MyPapertown, MyPaperCloud, Elias Fierke"
|
||||
echo "Version 1.0"
|
||||
echo ""
|
||||
|
||||
show_help(){
|
||||
echo "-- HELP --"
|
||||
echo " -v | Print the current application version"
|
||||
echo " -h | Show this help text"
|
||||
echo " -y | Answer all questions with yes"
|
||||
echo ""
|
||||
echo "-- MODES --"
|
||||
echo " access | control over remote access to the device (mac-based-filtering using nftables)"
|
||||
echo " transfer | simplified file-transfer with backup-option"
|
||||
exit 0
|
||||
}
|
||||
|
||||
print_config(){
|
||||
echo "-- CURRENT CONFIG --"
|
||||
cat $HOME/.config/paperctl.cfg
|
||||
exit 0
|
||||
}
|
||||
|
||||
if [[ "$1" == "access" ]]; then
|
||||
|
||||
shift
|
||||
|
||||
if [[ -x "./sub/access.sh" ]]; then
|
||||
./sub/access.sh "$@"
|
||||
else
|
||||
echo "Command 'access' not found!" >&2
|
||||
exit 1
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [[ "$1" == "transfer" ]]; then
|
||||
|
||||
shift
|
||||
|
||||
if [[ -x "./sub/transfer.sh" ]]; then
|
||||
./sub/transfer.sh "$@"
|
||||
else
|
||||
echo "Command 'transfer' not found!" >&2
|
||||
exit 1
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
|
||||
while getopts ":cyhv" opt; do
|
||||
case $opt in
|
||||
c) print_config ;;
|
||||
v) exit 0 ;;
|
||||
h) show_help ;;
|
||||
y) ALWAYS_YES="1" ;;
|
||||
\?) echo "Unknown option: -$OPTARG" >&2; exit 1 ;;
|
||||
:) echo "Option -$OPTARG needs an argument" >&2; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
85
src/sub/access.sh
Normal file → Executable file
85
src/sub/access.sh
Normal file → Executable file
@@ -0,0 +1,85 @@
|
||||
#!/bin/bash
|
||||
|
||||
allow_mac(){
|
||||
echo "Allowing $MAC"
|
||||
exit 0
|
||||
}
|
||||
|
||||
check(){
|
||||
if command -v nftables &>/dev/null
|
||||
then
|
||||
echo "nftables is installed. Check passed. Bye."
|
||||
exit 0;
|
||||
else
|
||||
echo "Please install nftables."
|
||||
while [[ -z "$HAD_BEST_SUCCESS" ]]; do
|
||||
read -p "Install now? [y/N] " QUESTION
|
||||
if [[ -z "$QUESTION" ]] || [[ "$QUESTION" = "n" ]] || [[ "$QUESTION" = "N" ]]; then
|
||||
echo "Alright, bye."
|
||||
exit 0;
|
||||
fi
|
||||
if [[ "$QUESTION" = "y" ]] || [[ "$QUESTION" = "Y" ]]; then
|
||||
HAD_BEST_SUCCESS="true"
|
||||
echo "Trying to install nftables..."
|
||||
if command -v apt &>/dev/null
|
||||
then
|
||||
sudo apt update
|
||||
sudo apt install nftables -y
|
||||
echo "Attempted to install nftables. Please execute the check again. Bye."
|
||||
exit 0;
|
||||
fi
|
||||
|
||||
if command -v dnf &>/dev/null
|
||||
then
|
||||
sudo dnf update
|
||||
sudo dnf install nftables -y
|
||||
echo "Attempted to install nftables. Please execute the check again. Bye."
|
||||
exit 0;
|
||||
fi
|
||||
|
||||
if command -v pacman &>/dev/null
|
||||
then
|
||||
sudo pacman -S nftables
|
||||
echo "Attempted to install nftables. Please execute the check again. Bye."
|
||||
exit 0;
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
deny_mac(){
|
||||
echo "Denying $MAC"
|
||||
exit 0
|
||||
}
|
||||
|
||||
show_help(){
|
||||
echo "-- HELP --"
|
||||
echo " -a AA:AA:AA:AA:AA:AA | Allow the access for the given mac-address"
|
||||
echo " -d AA:AA:AA:AA:AA:AA | Deny the access for the given mac-address"
|
||||
echo " -y | Answer all questions with yes"
|
||||
echo " -h | Show this help text"
|
||||
echo " -v | Get Version Info"
|
||||
echo " -c | Check the usability of this tool"
|
||||
exit 0
|
||||
}
|
||||
|
||||
while getopts ":a:d:vhyc" opt; do
|
||||
case $opt in
|
||||
a) MAC="$OPTARG"; allow_mac ;;
|
||||
d) MAC="$OPTARG"; deny_mac ;;
|
||||
v) exit 0 ;;
|
||||
c) check ;;
|
||||
h) show_help ;;
|
||||
y) ALWAYS_YES="1" ;;
|
||||
\?) echo "Unknown option: -$OPTARG" >&2; exit 1 ;;
|
||||
:) echo "Option -$OPTARG needs an argument" >&2; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
echo "Nothing to do."
|
||||
exit 0
|
||||
258
src/sub/transfer.sh
Executable file
258
src/sub/transfer.sh
Executable file
@@ -0,0 +1,258 @@
|
||||
#!/bin/bash
|
||||
|
||||
check_rsync(){
|
||||
if command -v rsync &>/dev/null
|
||||
then
|
||||
echo "rsync is installed. Check passed. Bye."
|
||||
HAD_BEST_SUCCESS="true"
|
||||
else
|
||||
echo "Please install rsync."
|
||||
while [[ -z "$HAD_BEST_SUCCESS" ]]; do
|
||||
read -p "Install now? [y/N] " QUESTION
|
||||
if [[ -z "$QUESTION" ]] || [[ "$QUESTION" = "n" ]] || [[ "$QUESTION" = "N" ]]; then
|
||||
echo "Alright, bye."
|
||||
HAD_BEST_SUCCESS="true"
|
||||
fi
|
||||
if [[ "$QUESTION" = "y" ]] || [[ "$QUESTION" = "Y" ]]; then
|
||||
HAD_BEST_SUCCESS="true"
|
||||
echo "Trying to install rsync..."
|
||||
if command -v apt &>/dev/null
|
||||
then
|
||||
sudo apt update
|
||||
sudo apt install rsync -y
|
||||
echo "Attempted to install rsync. Please execute the check again. Bye."
|
||||
fi
|
||||
|
||||
if command -v dnf &>/dev/null
|
||||
then
|
||||
sudo dnf update
|
||||
sudo dnf install rsync -y
|
||||
echo "Attempted to install rsync. Please execute the check again. Bye."
|
||||
fi
|
||||
|
||||
if command -v pacman &>/dev/null
|
||||
then
|
||||
sudo pacman -S rsync
|
||||
echo "Attempted to install rsync. Please execute the check again. Bye."
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
|
||||
fi
|
||||
}
|
||||
|
||||
check_openssl(){
|
||||
if command -v openssl &>/dev/null
|
||||
then
|
||||
echo "openssl is installed. Check passed. Bye."
|
||||
HAD_BEST_SUCCESS_O="true"
|
||||
else
|
||||
echo "Please install openssl."
|
||||
while [[ -z "$HAD_BEST_SUCCESS_O" ]]; do
|
||||
read -p "Install now? [y/N] " QUESTION
|
||||
if [[ -z "$QUESTION" ]] || [[ "$QUESTION" = "n" ]] || [[ "$QUESTION" = "N" ]]; then
|
||||
echo "Alright, bye."
|
||||
HAD_BEST_SUCCESS_O="true"
|
||||
fi
|
||||
if [[ "$QUESTION" = "y" ]] || [[ "$QUESTION" = "Y" ]]; then
|
||||
HAD_BEST_SUCCESS_O="true"
|
||||
echo "Trying to install openssl..."
|
||||
if command -v apt &>/dev/null
|
||||
then
|
||||
sudo apt update
|
||||
sudo apt install openssl -y
|
||||
echo "Attempted to install openssl. Please execute the check again. Bye."
|
||||
fi
|
||||
|
||||
if command -v dnf &>/dev/null
|
||||
then
|
||||
sudo dnf update
|
||||
sudo dnf install openssl -y
|
||||
echo "Attempted to install openssl. Please execute the check again. Bye."
|
||||
fi
|
||||
|
||||
if command -v pacman &>/dev/null
|
||||
then
|
||||
sudo pacman -S openssl
|
||||
echo "Attempted to install openssl. Please execute the check again. Bye."
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
|
||||
fi
|
||||
}
|
||||
|
||||
check_borg(){
|
||||
if command -v borg &>/dev/null
|
||||
then
|
||||
echo "borg is installed. Check passed. Bye."
|
||||
HAD_BEST_SUCCESS_B="true"
|
||||
else
|
||||
echo "Please install borg."
|
||||
while [[ -z "$HAD_BEST_SUCCESS_B" ]]; do
|
||||
read -p "Install now? [y/N] " QUESTION
|
||||
if [[ -z "$QUESTION" ]] || [[ "$QUESTION" = "n" ]] || [[ "$QUESTION" = "N" ]]; then
|
||||
echo "Alright, bye."
|
||||
HAD_BEST_SUCCESS_B="true"
|
||||
fi
|
||||
if [[ "$QUESTION" = "y" ]] || [[ "$QUESTION" = "Y" ]]; then
|
||||
HAD_BEST_SUCCESS_B="true"
|
||||
echo "Trying to install borg..."
|
||||
if command -v apt &>/dev/null
|
||||
then
|
||||
sudo apt update
|
||||
sudo apt install borg -y
|
||||
echo "Attempted to install borg. Please execute the check again. Bye."
|
||||
fi
|
||||
|
||||
if command -v dnf &>/dev/null
|
||||
then
|
||||
sudo dnf update
|
||||
sudo dnf install borg -y
|
||||
echo "Attempted to install borg. Please execute the check again. Bye."
|
||||
fi
|
||||
|
||||
if command -v pacman &>/dev/null
|
||||
then
|
||||
sudo pacman -S borg
|
||||
echo "Attempted to install borg. Please execute the check again. Bye."
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
|
||||
fi
|
||||
}
|
||||
|
||||
backup_encrypt(){
|
||||
echo "Creating encrypted backup..."
|
||||
local GEN_PASSPHRASE="$1" # "gen" oder leer
|
||||
|
||||
if [[ -z "$SOURCE" || -z "$DESTINATION" ]]; then
|
||||
echo "SOURCE and DESTINATION must be set"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ ! -e "$SOURCE" ]]; then
|
||||
echo "Source does not exist: $SOURCE"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local PASSPHRASE=""
|
||||
if [[ "$GEN_PASSPHRASE" == "gen" ]]; then
|
||||
PASSPHRASE="$(openssl rand -base64 48)"
|
||||
|
||||
echo "======================================================"
|
||||
echo "BORG PASSPHRASE (please note down)"
|
||||
echo
|
||||
echo "$PASSPHRASE"
|
||||
echo
|
||||
echo "The phrase won't be shown again and will not be saved."
|
||||
echo "======================================================"
|
||||
echo
|
||||
fi
|
||||
|
||||
local ARCHIVE_NAME
|
||||
ARCHIVE_NAME="backup-$(date +%F_%H-%M-%S)"
|
||||
|
||||
BORG_PASSPHRASE="$PASSPHRASE" \
|
||||
borg create \
|
||||
--stats \
|
||||
--progress \
|
||||
--compression lz4 \
|
||||
"$DESTINATION::$ARCHIVE_NAME" \
|
||||
"$SOURCE"
|
||||
|
||||
local RC=$?
|
||||
unset BORG_PASSPHRASE
|
||||
|
||||
if [[ $RC -eq 0 ]]; then
|
||||
echo "Backup successful: $ARCHIVE_NAME"
|
||||
else
|
||||
echo "Backup failed (exit code $RC)"
|
||||
fi
|
||||
|
||||
exit 0;
|
||||
return $RC
|
||||
}
|
||||
|
||||
backup(){
|
||||
if [[ -z "$ENCRYPT" ]]; then
|
||||
backup_encrypt
|
||||
exit 0;
|
||||
fi
|
||||
|
||||
echo "Creating unencrypted backup..."
|
||||
|
||||
if [[ -z "$SOURCE" || -z "$DESTINATION" ]]; then
|
||||
echo "SOURCE and DESTINATION must be set"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ ! -e "$SOURCE" ]]; then
|
||||
echo "Source does not exist: $SOURCE"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local ARCHIVE_NAME
|
||||
ARCHIVE_NAME="backup-$(date +%F_%H-%M-%S)"
|
||||
|
||||
borg create \
|
||||
--stats \
|
||||
--progress \
|
||||
--compression lz4 \
|
||||
"$DESTINATION::$ARCHIVE_NAME" \
|
||||
"$SOURCE"
|
||||
|
||||
local RC=$?
|
||||
|
||||
if [[ $RC -eq 0 ]]; then
|
||||
echo "Unencrypted backup successful: $ARCHIVE_NAME"
|
||||
else
|
||||
echo "Backup failed (exit code $RC)"
|
||||
fi
|
||||
|
||||
return $RC
|
||||
}
|
||||
|
||||
|
||||
transfer(){
|
||||
exit 0;
|
||||
}
|
||||
|
||||
|
||||
show_help(){
|
||||
echo "-- HELP --"
|
||||
echo " -y | Answer all questions with yes"
|
||||
echo " -s SOURCE | Source path (e.g. /srv/fileshare/main/)"
|
||||
echo " -d DESTINATION | Destination path (e.g. using ssh)"
|
||||
echo " -b | Transfer as backup"
|
||||
echo " -e | encrypt destination using a passphrase"
|
||||
echo " -h | Show this help text"
|
||||
echo " -v | Get Version Info"
|
||||
echo " -c | Check the usability of this tool"
|
||||
exit 0
|
||||
}
|
||||
|
||||
while getopts ":s:d:Bvhyce" opt; do
|
||||
case $opt in
|
||||
s) SOURCE="$OPTARG";;
|
||||
d) DESTINATION="$OPTARG";;
|
||||
v) exit 0 ;;
|
||||
c) check_rsync; check_borg; check_openssl; exit 0 ;;
|
||||
e) ENCRYPT="1" ;;
|
||||
B) backup ;;
|
||||
h) show_help ;;
|
||||
y) ALWAYS_YES="1" ;;
|
||||
\?) echo "Unknown option: -$OPTARG" >&2; exit 1 ;;
|
||||
:) echo "Option -$OPTARG needs an argument" >&2; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
echo "Nothing to do."
|
||||
exit 0
|
||||
Reference in New Issue
Block a user