diff --git a/contrib/rushlink b/contrib/rushlink new file mode 100755 index 0000000..1f67b75 --- /dev/null +++ b/contrib/rushlink @@ -0,0 +1,85 @@ +#!/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 | sed -n '1p;/deleteToken/{s@.*\(https://\)@\1@;p;q}' | ( + 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 + 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 +} + +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 (--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 + ;; + *) + 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