about summary refs log tree commit diff stats
path: root/dot_local/bin/executable_0
diff options
context:
space:
mode:
Diffstat (limited to 'dot_local/bin/executable_0')
-rw-r--r--dot_local/bin/executable_0174
1 files changed, 174 insertions, 0 deletions
diff --git a/dot_local/bin/executable_0 b/dot_local/bin/executable_0
new file mode 100644
index 0000000..95cab51
--- /dev/null
+++ b/dot_local/bin/executable_0
@@ -0,0 +1,174 @@
+#!/bin/sh
+
+# init variables
+version="v2022.11.03"
+ENDPOINT="https://0.vern.cc"
+flag_options=":hvcfe:s:"
+long_flag_options="help,version,color,file,extension:,server:"
+flag_version=0
+flag_help=0
+flag_file=0
+flag_colors=0
+flag_ext=0
+data=""
+EXT=""
+
+# help message available via func
+show_help() {
+  cat > /dev/stdout << END
+pb [options] filename
+or
+(command-with-stdout) | pb
+
+Uploads a file or data to the tilde 0x0 paste bin
+
+OPTIONAL FLAGS:
+  -h | --help)                    Show this help
+  -v | --version)                 Show current version number
+  -f | --file)                    Explicitly interpret stdin as filename
+  -c | --color)                   Pretty color output
+  -s | --server server_address)   Use alternative pastebin server address
+  -e | --extension bin_extension) Specify file extension used in the upload
+END
+}
+
+show_usage() {
+  cat > /dev/stdout << END
+usage: pb [-hfvcux] [-s server_address] filename
+END
+}
+
+# helper for program exit, supports error codes and messages
+die () {
+  msg="$1"
+  code="$2"
+  # exit code defaults to 1
+  if printf "%s" "${code}" | grep -q '^[0-9]+$'; then
+    code=1
+  fi
+  # output message to stdout or stderr based on code
+  if [ -n "${msg}" ]; then
+    if [ "${code}" -eq 0 ]; then
+      printf "%s\\n" "${msg}"
+    else
+      printf "%s%s%s\\n" "$ERROR" "${msg}" "$RESET" >&2
+    fi
+  fi
+  exit "${code}"
+}
+
+# attempt to parse options or die
+if ! PARSED_ARGUMENTS=$(getopt -a -n pb -o ${flag_options} --long ${long_flag_options} -- "$@"); then
+  printf "pb: unknown option\\n"
+  show_usage
+  exit 2
+fi
+
+# For debugging: echo "PARSED_ARGUMENTS is $PARSED_ARGUMENTS"
+eval set -- "$PARSED_ARGUMENTS"
+while :
+do
+  case "$1" in
+    -h | --help)      flag_help=1                  ; shift   ;;
+    -v | --version)   flag_version=1               ; shift   ;;
+    -c | --color)     flag_color=1                 ; shift   ;;
+    -f | --file)      flag_file=1                  ; shift   ;;
+    -e | --extension) flag_ext=1;    EXT="$2"      ; shift 2 ;;
+    -s | --server)                   ENDPOINT="$2" ; shift 2 ;;
+    --) shift; break ;;
+    *) echo "Unexpected option: $1 - this should not happen."
+       show_usage ; die 3 ;;
+  esac
+done
+
+# 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
+
+# is not interactive shell, use stdin
+if [ -t 0 ]; then
+  flag_file=1
+else
+  if [ ${flag_ext} -gt 0 ]; then
+    # short-circuit stdin access to ensure binary data is transferred to curl
+    curl -sF"file=@-;filename=null.${EXT}" "${ENDPOINT}" < /dev/stdin
+    exit 0
+  else
+    data="$(cat < /dev/stdin )"
+  fi
+fi
+
+# if data variable is empty (not a pipe) use params as fallback
+if [ -z "$data" ]; then
+  data="$*"
+fi
+
+# Colors
+if [ ${flag_colors} -gt 0 ]; then
+  SUCCESS=$(tput setaf 190)
+  ERROR=$(tput setaf 196)
+  RESET=$(tput sgr0)
+else
+  SUCCESS=""
+  ERROR=""
+  RESET=""
+fi
+
+if [ ${flag_file} -gt 0 ]; then
+  # file mode
+  if [ -z "${data}" ]; then
+    # if no data
+    # print error message
+    printf "%sProvide data to upload%s\\n" "$ERROR" "$RESET"
+  elif [ ! -f "${data}" ]; then
+    # file not found with name provided
+    # print error messagse
+    printf "%s%s%s\\tFile not found.%s\\n" "$RESET" "${data}" "$ERROR" "$RESET"
+    # 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
+      # check if file exists
+      if [ -f "${f}" ]; then
+        if [ ${flag_ext} -gt 0 ]; then
+          # send file to endpoint masked with new extension
+          result=$(curl -sF"file=@${f};filename=null.${EXT}" "${ENDPOINT}")
+        else
+          # send file to endpoint
+          result=$(curl -sF"file=@${f}" "${ENDPOINT}")
+        fi
+        printf "%s%s%s\\n" "$SUCCESS" "$result" "$RESET"
+      else
+        # print error message
+        printf "%sFile not found.%s\\n" "$ERROR" "$RESET"
+      fi
+    done
+  else
+    # data available in file
+    # send file to endpoint
+    result=$(curl -sF"file=@${data}" "${ENDPOINT}")
+    printf "%s%s%s\\n" "$SUCCESS" "$result" "$RESET"
+  fi
+else
+  # non-file mode
+  if [ -z "${data}" ]; then
+    # if no data
+    # print error message
+    printf "%sNo data found for upload. Please try again.%s\\n" "$ERROR" "$RESET"
+  else
+    # data available
+    # send data to endpoint
+    result=$(printf "%s" "${data}" | curl -sF"file=@-;filename=null.txt" "${ENDPOINT}")
+    printf "%s%s%s\\n" "$SUCCESS" "$result" "$RESET"
+  fi
+fi