diff --git a/pb b/pb index bc19300..355c89f 100755 --- a/pb +++ b/pb @@ -1,19 +1,23 @@ #!/bin/sh -version="v.2018.08.16" +# init variables +version="v.2018.10.09" ENDPOINT="https://ttm.sh" -flag_options="hvcfs::x" +flag_options="hvcufs::x" flag_version=0 flag_help=0 flag_file=0 +flag_url=0 flag_shortlist=0 flag_colors=0 data="" +# Colors SUCCESS=$(tput setaf 190) ERROR=$(tput setaf 196) RESET=$(tput sgr0) +# help message available via func show_help() { cat > /dev/stdout << END pb [options] filename @@ -27,10 +31,12 @@ OPTIONAL FLAGS: -v Show current version number -f Explicitly interpret stdin as filename -c Pretty color output + -u Shorten URL -s server_address Use alternative pastebin server address END } +# helper for program exit, supports error codes and messages die () { msg="$1" code="$2" @@ -60,9 +66,12 @@ else data="$(cat < /dev/stdin )" fi +# attempt to parse options or die if ! parsed=$(getopt ${flag_options} "$@"); then die "Invalid input" 2 fi + +# handle options eval set -- "${parsed}" while true; do case "$1" in @@ -82,6 +91,9 @@ while true; do shift ENDPOINT="$1" ;; + -u) + flag_url=1 + ;; -x) flag_shortlist=1 ;; @@ -96,55 +108,99 @@ while true; do shift done +# if data variable is empty (not a pipe) use params as fallback if [ -z "$data" ]; then data="$*" fi +# display current version if [ ${flag_version} -gt 0 ]; then printf "%s\\n" "${version}" die "" 0 fi +# display help if [ ${flag_help} -gt 0 ]; then show_help die "" 0 fi +# shortlist used for bash command completion if [ ${flag_shortlist} -gt 0 ]; then - out="-f -v -h -s -c" + out="-f -v -h -s -c -u" lsresults="$(ls)" die "${out} ${lsresults}" 0 fi -if [ ${flag_file} -gt 0 ]; then +# URL shortening reference + +# If URL mode detected, process URL shortener and end processing without +# checking for a file to upload to the pastebin +if [ ${flag_url} -gt 0 ]; then + if [ -z "${data}" ]; then + # if no data + + # print error message + if [ ${flag_colors} -gt 0 ]; then + printf "%sProvide URL to shorten%s\\n" "$ERROR" "$RESET" + else + printf "Provide URL to shorten\\n" + fi + else + + # shorten URL and print results + curl -F"shorten=${data}" "${ENDPOINT}" + fi + die "" 0 +fi + +if [ ${flag_file} -gt 0 ]; then + # file mode + + if [ -z "${data}" ]; then + # if no data + + # print error message if [ ${flag_colors} -gt 0 ]; then printf "%sProvide data to upload%s\\n" "$ERROR" "$RESET" else printf "Provide data to upload\\n" fi + elif [ ! -f "${data}" ]; then + # file not found with name provided + + # print error messagse if [ ${flag_colors} -gt 0 ]; then printf "%s%s%s\\tFile not found.%s\\n" "$RESET" "${data}" "$ERROR" "$RESET" else printf "%s\\tFile not found.\\n" "${data}" fi - # attempt to split data and upload each string as file - for f in ${data} - do + + # attempt to split data string (multi-line?) and upload each string as file + for f in ${data}; do # if there's nothing to parse, skip this loop if [ "$f" = "$data" ]; then break; fi + + # print name of file parsed, but not yet status of success or failure if [ ${flag_colors} -gt 0 ]; then printf "%s%s\\t%s" "$RESET" "${f}" "$SUCCESS" fi + + # check if file exists if [ -f "${f}" ]; then + # send file to endpoint curl -F"file=@${f}" "${ENDPOINT}" + + # print result short url if [ ${flag_colors} -gt 0 ]; then printf "%s" "$RESET" fi else + # print error message if [ ${flag_colors} -gt 0 ]; then printf "%sFile not found.%s\\n" "$ERROR" "$RESET" else @@ -153,6 +209,9 @@ if [ ${flag_file} -gt 0 ]; then fi done else + # data available in file + + # send file to endpoint if [ ${flag_colors} -gt 0 ]; then printf "%s${data}\\t%s" "$RESET" "$SUCCESS" curl -F"file=@${data}" "${ENDPOINT}" @@ -162,13 +221,22 @@ if [ ${flag_file} -gt 0 ]; then fi fi else + # non-file mode + if [ -z "${data}" ]; then + # if no data + + # print error message if [ ${flag_colors} -gt 0 ]; then printf "%sNo data found for upload. Please try again.%s\\n" "$ERROR" "$RESET" else printf "No data found for upload. Please try again.\\n" fi + else + # data available + + # send data to endpoint, print short url if [ ${flag_colors} -gt 0 ]; then printf "%s" "$SUCCESS" printf "%s" "${data}" | curl -F"file=@-;filename=null.txt" "${ENDPOINT}"