upload-service/web/static/upload.sh

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