#!/usr/bin/env sh set -e LINK=https://hashru.link/ DELFILE="${XDG_DATA_HOME:-$HOME/.local/share}/rushlink/delete" link() { case "$1" in https://*|http://*) printf '%s' "$1" | curl -sS -F'shorten=<-' "$LINK" ;; *) curl -sS -Ffile=@- "$LINK" < "$1" ;; esac | awk 'NR == 1 { print } $NF ~ /deleteToken=/ { print $NF; exit }' | ( IFS= read -r link IFS= read -r deletelink echo "$link" mkdir -p "$(dirname "$DELFILE")" echo "$deletelink" >> "$DELFILE" ) } del() { case "$1" in https://*|http://*) URL="$1" ;; *) URL="$LINK$1" ;; esac # Remove file extension, if any. NAME="${URL##*/}" URL="${URL%/*}/${NAME%%.*}" if DELURL=$(grep -s -m1 "$URL?deleteToken=" "$DELFILE"); then echo "Deleting $URL..." >&2 curl -sS -X DELETE "$DELURL" | grep deleted else echo "Delete token for $URL is not known." >&2 exit 1 fi } screenshot() { if command -v import >/dev/null 2>&1; then CMD="import png:-" elif command -v maim >/dev/null 2>&1; then CMD="maim -uks" else echo "Neither import (imagemagick) nor maim were found. One of these is needed to make screenshots." >&2 exit 1 fi FILE=$(mktemp) if $CMD > "$FILE"; then LINK=$(link "$FILE") rm -f "$FILE" echo "$LINK.png" if command -v xdg-open >/dev/null 2>&1; then xdg-open "$LINK.png" fi else rm -f "$FILE" exit $? fi } if [ $# -gt 0 ]; then case "$1" in --help|-h) CMD=$(basename "$0") echo "$CMD - Command line tool for $LINK" echo echo "Usage:" echo " $CMD https://example.com/" echo " Shorten link." echo " $CMD file.txt" echo " $CMD < file.txt" echo " Upload file." echo " $CMD" echo " echo hi | $CMD" echo " Upload file from standard input." echo " $CMD (--screenshot|-s)" echo " Select a window or an area of your screen, and upload it as png." echo " $CMD (--delete|-d) ${LINK}xd42" echo " $CMD (--delete|-d) xd42" echo " Delete file or shortened link." echo echo "Delete tokens are stored in $DELFILE" exit 0 ;; --delete|-d) shift for url in "$@"; do del "$url" done exit 0 ;; --screenshot|-s) shift if [ $# -gt 0 ]; then echo "No arguments expected to --screenshot" >&2 exit 1 fi screenshot exit 0 ;; *) for url in "$@"; do link "$url" done exit 0 esac fi if [ -t 0 ]; then echo "Sending standard input to $LINK" >&2 echo "^C to cancel, ^D to send." >&2 fi link /dev/stdin