dotfiles/scripts/.local/bin/share

89 lines
2 KiB
Text
Raw Normal View History

2023-01-01 14:16:21 +00:00
#!/bin/env bash
# share.sh - Shares a file with a link by uploading to a "Gokapi" backend
# Depends on: curl, jq, libsecret
set -e
URL="https://${SHARE_DOMAIN}/api/files/add"
usage() {
printf "share - Share a file
Usage: share [options] FILE
Options:
-f <name>\tName of the file that will be uploaded
-p <passwd>\tPassword
-d <number>\tAllowed nubmer of downloads
-e <expiry>\tExpiry in days\n"
}
[ $# -eq 0 ] && usage && exit 1
options=$(getopt "hp:d:e:f:" "$@")
eval set -- "$options"
while true; do
case $1 in
-p)
shift
PASSWORD="$1"
;;
-d)
shift
ALLOWED_DOWNLOADS="$1"
;;
-e)
shift
EXPIRY_DAYS="$1"
;;
-f)
shift
FILENAME="$1"
;;
-h)
usage
exit 0
;;
--)
shift
break;;
esac
shift
done
[ $# -eq 0 ] && usage && exit 1 || FILE=$1
if [ ! -f "$FILE" ] && [ $FILE != "-" ]; then
echo "File ${FILE} not found."
exit 1
fi
APIKEY=$(secret-tool lookup share apikey)
if [ ! "$APIKEY" ]; then
echo "Please enter your API key for Gokapi"
secret-tool store --label "API key for share.sh" share apikey
APIKEY=$(secret-tool lookup share apikey)
fi
read RESULT ID URL HOTLINKURL HOTLINKID < <(echo $(curl -# -X POST \
--fail \
-F "file=@${FILE};filename=${FILENAME:-$FILE}" \
-F "password=${PASSWORD}" \
-F "allowedDownloads=${ALLOWED_DOWNLOADS:-0}" \
-F "expiryDays=${EXPIRY_DAYS}" \
-H "accept: application/json" \
-H "apikey: ${APIKEY}" \
-H "Content-Type: multipart/form-data" \
"${URL}" | jq -r '.Result, .FileInfo.Id, .Url, .HotlinkUrl, .FileInfo.HotlinkId'))
if [ $RESULT != "OK" ]; then
echo "An error occured when trying to upload the file."
echo "Result was: $RESULT"
exit 1
fi
echo "Uploaded url: ${URL}${ID}"
[ ! "$HOTLINKID" ] || echo "Hotlink: ${HOTLINKURL}${HOTLINKID}"