76 lines
2.4 KiB
Bash
76 lines
2.4 KiB
Bash
#!/usr/bin/env bash
|
|
# upload.sh — CLI uploader for upload.jeffemmett.com
|
|
# Usage: ./upload.sh <file> [options]
|
|
# -e, --expires Expiry (1h, 1d, 7d, 30d)
|
|
# -p, --password Password-protect the file
|
|
# -s, --server Server URL (default: https://upload.jeffemmett.com)
|
|
#
|
|
# Install: curl -o ~/.local/bin/upload https://upload.jeffemmett.com/cli && chmod +x ~/.local/bin/upload
|
|
|
|
set -euo pipefail
|
|
|
|
SERVER="${UPLOAD_SERVER:-https://upload.jeffemmett.com}"
|
|
EXPIRES=""
|
|
PASSWORD=""
|
|
FILE=""
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
-e|--expires) EXPIRES="$2"; shift 2 ;;
|
|
-p|--password) PASSWORD="$2"; shift 2 ;;
|
|
-s|--server) SERVER="$2"; shift 2 ;;
|
|
-h|--help)
|
|
echo "Usage: upload <file> [-e 7d] [-p secret]"
|
|
echo ""
|
|
echo "Options:"
|
|
echo " -e, --expires Expiry duration (1h, 1d, 7d, 30d)"
|
|
echo " -p, --password Password-protect the file"
|
|
echo " -s, --server Server URL (default: https://upload.jeffemmett.com)"
|
|
exit 0
|
|
;;
|
|
-*) echo "Unknown option: $1" >&2; exit 1 ;;
|
|
*) FILE="$1"; shift ;;
|
|
esac
|
|
done
|
|
|
|
if [[ -z "$FILE" ]]; then
|
|
echo "Usage: upload <file> [-e 7d] [-p secret]" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! -f "$FILE" ]]; then
|
|
echo "Error: file not found: $FILE" >&2
|
|
exit 1
|
|
fi
|
|
|
|
CURL_ARGS=(-s -S --progress-bar -F "file=@${FILE}")
|
|
[[ -n "$EXPIRES" ]] && CURL_ARGS+=(-F "expires_in=${EXPIRES}")
|
|
[[ -n "$PASSWORD" ]] && CURL_ARGS+=(-F "password=${PASSWORD}")
|
|
|
|
RESPONSE=$(curl "${CURL_ARGS[@]}" "${SERVER}/upload")
|
|
|
|
if command -v jq &>/dev/null; then
|
|
URL=$(echo "$RESPONSE" | jq -r '.url')
|
|
DELETE_TOKEN=$(echo "$RESPONSE" | jq -r '.delete_token')
|
|
EXPIRES_AT=$(echo "$RESPONSE" | jq -r '.expires_at // empty')
|
|
|
|
echo ""
|
|
echo "URL: $URL"
|
|
[[ -n "$EXPIRES_AT" ]] && echo "Expires: $EXPIRES_AT"
|
|
echo "Delete: curl -X DELETE -H 'Authorization: Bearer ${DELETE_TOKEN}' ${SERVER}/f/$(echo "$RESPONSE" | jq -r '.id')"
|
|
|
|
# Copy to clipboard if available
|
|
if command -v xclip &>/dev/null; then
|
|
echo -n "$URL" | xclip -selection clipboard
|
|
echo "(copied to clipboard)"
|
|
elif command -v pbcopy &>/dev/null; then
|
|
echo -n "$URL" | pbcopy
|
|
echo "(copied to clipboard)"
|
|
elif command -v wl-copy &>/dev/null; then
|
|
echo -n "$URL" | wl-copy
|
|
echo "(copied to clipboard)"
|
|
fi
|
|
else
|
|
echo "$RESPONSE"
|
|
fi
|