SFS/scripts/up

253 lines
6.5 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
#######################################################################
# Configuration #
#######################################################################
# Curl function to be used
CURL=("curl")
# Defaults field to use. If equal to $UNSET will be oncsiedered as no set
URLPATH="/up"
GETPATH="/d"
GETPATHSUFFIX="/raw"
USERNAME="-1"
PASSWORD="-1"
URL="-1"
FILEPASSWORD="-1"
VISIBLE="-1"
UNSET="-1"
#######################################################################
# Set defaults #
#######################################################################
GET=0
VERB=0
#######################################################################
# Help #
#######################################################################
function usage()
{
echo "Script to send files to sfs in command line"
echo ""
echo "$0 [options] filenames ..."
echo ""
echo "options:"
echo "\t-h --help : help"
echo "\t-u / --username USERNAME : username for log-in"
echo "\t-p / --password PASSWORD: password for log-in"
echo "\t-s / --server / --url URL : URL of server"
echo "\t-v / --visible : make the file publicly visible"
echo "\t-x / --file-password PASSWORD: set a password for downloading of file"
echo "\t-g / --get : Download file rather than upload"
echo "\t--verbose / --infos : Set to verbose mode"
echo ""
echo "filenames:"
echo "\tList of filenames from disk to upload"
echo "\tor if -g is set filename to download."
echo ""
}
#######################################################################
# Colored terms #
#######################################################################
if [[ -t 1 ]]
then
VERT="\033[32m"
ORANGE="\033[1;33m"
ROUGE="\033[1;31m"
STOPC="\033[0m"
else
VERT=""
ORANGE=""
ROUGE=""
STOPC=""
fi
#######################################################################
# Check prerequisites #
#######################################################################
function check_prerequisite()
{
if ! command -v ${CURL[0]} &> /dev/null
then
echo -e "${ROUGE}ERROR${STOPC}: ${CURL[0]} could not be found."
echo "Aborting"
exit 2
fi
}
check_prerequisite
#######################################################################
# Parsing arguments #
#######################################################################
FILES=()
while [[ $# -gt 0 ]]
do
key="$1"
case $key in
-h|--help)
usage
exit 0
;;
-u|--username)
if [ $# -gt 1 ]; then
USERNAME="$2"
shift # past argument
shift # past value
else
echo -e "${ROUGE}ERROR${STOPC}: Could not parse argument username"
echo ""
usage
exit 3
fi
;;
-p|--password)
if [ $# -gt 1 ]; then
PASSWORD="$2"
shift # past argument
shift # past value
else
echo -e "${ROUGE}ERROR${STOPC}: Could not parse argument password"
echo ""
usage
exit 3
fi
;;
-s|--server|--url)
if [ $# -gt 1 ]; then
URL="$2"
shift # past argument
shift # past value
else
echo -e "${ROUGE}ERROR${STOPC}: Could not parse argument server url"
echo ""
usage
exit 3
fi
;;
-v|--visible)
VISIBLE="1"
shift # past argument
;;
-x|--file-password)
if [ $# -gt 1 ]; then
FILEPASSWORD="$2"
shift # past argument
shift # past value
else
echo -e "${ROUGE}ERROR${STOPC}: Could not parse argument file password"
echo ""
usage
exit 3
fi
;;
-g|--get)
GET=1
shift # past argument
;;
--verbose|--infos)
VERB=1
shift # past argument
;;
-*)
echo -e "${ROUGE}ERROR${STOPC}: Unknown argument $1"
echo ""
usage
exit 3
;;
*) # Filename
FILES+=("$1")
shift # past argument
;;
esac
done
#######################################################################
# Check arguments #
#######################################################################
# We need username, password (for dl only), url and at least one filename
# Check for filenames
if [ ! ${#FILES[@]} -gt 0 ]
then
echo -e "${ROUGE}ERROR${STOPC}: Filenames not provided"
echo ""
usage
exit 3
fi
# check for url or ask !
if [ "$URL" = "$UNSET" ]
then
read -p "Server URL: " URL
fi
# check for password or ask !
if [ "$USERNAME" = "$UNSET" ]
then
read -p "Username: " USERNAME
fi
if [ $GET -eq 1 ]
then
[ $VERB -gt 0 ] && echo "Download mode"
else
[ $VERB -gt 0 ] && echo "Upload mode"
# check for password or ask !
if [ "$PASSWORD" = "$UNSET" ]
then
read -s -p "Password: " PASSWORD
fi
fi
#######################################################################
# Prepare the query #
#######################################################################
ARGS=()
if [ $GET -eq 1 ]
then
# File password
[ ! $FILEPASSWORD = "$UNSET" ] && ARGS+=("-F" "password=$FILEPASSWORD")
# Add files
for FPATH in "${FILES[@]}"
do
FULLURL="$URL"
[ ! "$GETPATH" = "$UNSET" ] && FULLURL+="$GETPATH"
FULLURL+="/$USERNAME/$FPATH"
[ ! "$GETPATHSUFFIX" = "$UNSET" ] && FULLURL+="$GETPATHSUFFIX"
[ $VERB -gt 0 ] && echo "> $CURL ${ARGS[@]} $FULLURL -o $FPATH"
${CURL[@]} ${ARGS[@]} $FULLURL -o $FPATH
done
else
# Default args
ARGS+=("-F" "username=$USERNAME" "-F" "password=$PASSWORD")
# Visible
[ $VISIBLE -gt 0 ] && ARGS+=("-F" "visible=1")
# File password
[ ! $FILEPASSWORD = "$UNSET" ] && ARGS+=("-F" "filepwd=$FILEPASSWORD")
# Add files
for FPATH in "${FILES[@]}"
do
ARGS+=("-F" "file[]=@$FPATH")
done
FULLURL="$URL"
[ ! "$URLPATH" = "$UNSET" ] && FULLURL+="$URLPATH"
ARGS+=("$FULLURL")
[ $VERB -gt 0 ] && echo "> $CURL ${ARGS[@]}"
${CURL[@]} ${ARGS[@]}
fi