#!/usr/bin/env bash # upload.sh — CLI uploader for upload.jeffemmett.com # Usage: ./upload.sh [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 [-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 [-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