#!/bin/bash set -e _help() { SELF=$( basename "$0" ) echo "Flees Clipboard v.{{ version }} Usage: $SELF [command] [name] [filename] Commands: (l)ist [default] List names of clipboards (r)ead Display on screen / copies to file (w)rite Save from stdin / from file / folder (d)elete Delete an entry url Get the direct share url update Update flip client Name: Any string for the clipboard name. default: 0 Filename: When reading from clipboard: File or folder to write the clipboard contents. If omitted: stdout When writing to clipboard: File or folder to read from. If omitted: stdin Shorthand: echo my data | $SELF 1 # writes data with name: 1 $SELF 1 | cat - # prints the contents of file: 1 Config: set: FLEES_ROOTURL, FLEES_SHARE, FLEES_TOKEN " exit } _load_config() { FLEES_SHARE="${FLEES_SHARE:-{{ name }}}" FLEES_TOKEN="${FLEES_TOKEN:-{{ token }}}" FLEES_ROOTURL="${FLEES_ROOTURL:-{{ rooturl }}}" } _update_client() { [[ -n "$FLEES_TOKEN" ]] && [[ -n "$FLEES_SHARE" ]] && { sharetoken="/$FLEES_SHARE/$FLEES_TOKEN" } curl -o "$0" "$FLEES_ROOTURL/script/flip$sharetoken" err=$? chmod +x "$0" exit $err } _list() { curl -s "$FLEES_ROOTURL/file/ls/$FLEES_SHARE/$FLEES_TOKEN" printf "\n" } _write() { # no file mentioned, use stdin [[ -z "$FILE" ]] && stream_in=1 # stdin is open, use stdin [ -t 0 ] || stream_in=1 [ -t 0 ] && [[ -z "$FILE" ]] && { _msg File to read needed, or use stdin exit 1 } _msg "Writing $NAME" [[ "$stream_in" -eq 1 ]] && { _write_stdin "$NAME" } || { [[ -d "$FILE" ]] && { _write_folder "$NAME" "$FILE" } || { _write_file "$NAME" "$FILE" } } } _write_folder() { # name, file tar c "$2" | curl -F "file=@-;filename=$1" --progress-bar "${FLEES_ROOTURL}upload/${FLEES_SHARE}/${FLEES_TOKEN}" | cat - } _write_file() { # name, file curl -F "file=@$2;filename=$1" --progress-bar "${FLEES_ROOTURL}upload/${FLEES_SHARE}/${FLEES_TOKEN}" | cat - } _write_stdin() { # name cat - | curl -F "file=@-;filename=$1" "${FLEES_ROOTURL}upload/${FLEES_SHARE}/${FLEES_TOKEN}" } _read() { [[ -z "$FILE" ]] && stream_out=1 [ -t 1 ] || stream_out=1 [[ "$stream_out" -eq 1 ]] && { _read_stdout "$NAME" } || { _read_file "$NAME" "$FILE" } } _read_file() { # name, file curl --progress "$FLEES_ROOTURL/download/$FLEES_SHARE/$FLEES_TOKEN/$1" > "$2" } _read_stdout() { # name curl -s "$FLEES_ROOTURL/download/$FLEES_SHARE/$FLEES_TOKEN/$1" } _delete() { # name read -p "Sure to delete: $1 ? Break to exit " foo curl -s "$FLEES_ROOTURL/file/delete/$FLEES_SHARE/$FLEES_TOKEN/$1" } _url() { # name curl -s "$FLEES_ROOTURL/file/direct/$FLEES_SHARE/$FLEES_TOKEN/$1" echo '' } _msg() { echo "$@" >&2 } _get_name() { [[ "$ARG1" = "$CMD" ]] && { NAME="$ARG2" } || { NAME="$ARG1" } [[ -z "$NAME" ]] && [[ ! "$CMD" = delete ]] && NAME=0 return 0 } _get_file() { [[ "$ARG1" = "$NAME" ]] && { FILE="$ARG2" } [[ "$ARG2" = "$NAME" ]] && { FILE="$ARG3" } return 0 } _load_config for (( i=1; i<=$#; i++ )); do [[ "${!i}" = "-h" ]] && _help [[ "${!i}" = "--help" ]] && _help done ARG1="$1" ARG2="$2" ARG3="$3" CMD=list [[ "$1" = "r" || "$1" = "read" ]] && { CMD=read; ARG1=$CMD; } [[ "$1" = "w" || "$1" = "write" ]] && { CMD=write; ARG1=$CMD; } [[ "$1" = "d" || "$1" = "delete" || "$1" = "del" ]] && { CMD=delete; ARG1=$CMD; } [[ "$1" = "l" || "$1" = "list" ]] && { CMD=list; ARG1=$CMD; } [[ "$1" = "url" ]] && { CMD=url; ARG1=$CMD; } [[ "$1" = "update" ]] && { _update_client; } [[ "$1" = "h" || "$1" = "help" ]] && _help # if stdout redirected, default to read [ -t 1 ] || CMD=read # if stdin comes from stream, default to write [ -t 0 ] || CMD=write [[ "$CMD" = list ]] && { _list exit $? } _get_name _get_file [[ "$CMD" = read ]] && { _read exit $? } [[ "$CMD" = delete ]] && { _delete "$NAME" exit $? } [[ "$CMD" = write ]] && { _write exit $? } [[ "$CMD" = url ]] && { _url "$NAME" exit $? }