diff --git a/src/simple-send.sh b/src/simple-send.sh new file mode 100644 index 0000000..ab2ba62 --- /dev/null +++ b/src/simple-send.sh @@ -0,0 +1,70 @@ +# Constants for ffsend binary and server with environment variable overrides +FFSEND_URL="${FFSEND_URL:-https://github.com/timvisee/ffsend/releases/download/v0.2.76/ffsend-v0.2.76-linux-x64}" +FFSEND_DIR="${FFSEND_DIR:-$HOME/.local/bin}" +FFSEND_PATH="${FFSEND_PATH:-$FFSEND_DIR/ffsend}" +DEFAULT_FFSEND_HOST="${DEFAULT_FFSEND_HOST:-https://send.aenow.fun}" + +# Private: Ensure ffsend is installed only when needed +_install_ffsend() { + # Check if ffsend is already installed + if [ -f "$FFSEND_PATH" ]; then + return + fi + + echo "ffsend not found, checking if the download URL is valid..." + + # Check if the URL is valid by making a HEAD request + if curl -Isf "$FFSEND_URL" > /dev/null; then + echo "URL is valid, downloading ffsend..." + mkdir -p "$FFSEND_DIR" + curl -L "$FFSEND_URL" -o "$FFSEND_PATH" + chmod +x "$FFSEND_PATH" + else + echo "Error: The ffsend download URL is not valid. Please check the URL: $FFSEND_URL" + exit 1 + fi +} + +# Private: Generate random password, not accessible from the CLI +_generate_password() { + openssl rand -base64 12 +} + +# Private: Upload file or piped data function +_ffsend_upload() { + local file=$1 + local password=$(_generate_password) + + # Use the custom host if FFSEND_CUSTOM_HOST is set, otherwise use the default host + local ffsend_host="${FFSEND_CUSTOM_HOST:-$DEFAULT_FFSEND_HOST}" + + # Upload the file or data with 7-day expiry and the generated password + $FFSEND_PATH upload --host "$ffsend_host" --expiry-time 7d --password "$password" "$file" + + # Print the password and the download URL + echo "Password: $password" +} + +# Public: Main send function to wrap the upload, accepts files and piped data +send() { + # Ensure ffsend is installed before proceeding + _install_ffsend + + if [ -p /dev/stdin ]; then + # Handle piped input + local temp_file=$(mktemp) + cat > "$temp_file" + _ffsend_upload "$temp_file" + rm "$temp_file" + elif [ -f "$1" ]; then + # Handle file input as an argument + _ffsend_upload "$1" + else + # Print usage if no input or argument is provided + echo "Usage: send or echo 'data' | send" + return 1 + fi +} + +# To override any of the defaults, set the corresponding environment variables: +# FFSEND_URL, FFSEND_DIR, FFSEND_PATH, DEFAULT_FFSEND_HOST