Files
flees/code/templates/flip
2018-08-20 22:15:14 +03:00

180 lines
3.8 KiB
Bash
Executable File

#!/bin/bash
set -e
_help() {
SELF=$( basename "$0" )
echo "Flees Clipboard v.{{ version }}
Usage: $SELF [command] [name] [filename]
Commands:
(r)ead Display on screen / copies to file
(w)rite Save from stdin / from file / folder
(d)elete Delete an entry
(l)ist [default] List names of clipboards
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() {
printf "%-16s %8s %s\n" Date Size Name
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
}
[[ "$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"
}
_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" = "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" = edit ]] && {
_edit
exit $?
}