253 lines
6.5 KiB
Bash
Executable File
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
|
|
|