From 044b2599b773e519fabd36604d80404a87b04f57 Mon Sep 17 00:00:00 2001
From: James Tomasino <james@tomasino.org>
Date: Tue, 14 Aug 2018 23:25:07 -0400
Subject: [PATCH] added pb executable

---
 pb | 139 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 139 insertions(+)
 create mode 100755 pb

diff --git a/pb b/pb
new file mode 100755
index 0000000..bd06f8e
--- /dev/null
+++ b/pb
@@ -0,0 +1,139 @@
+#!/bin/sh
+
+version="v.2018.08.13"
+ENDPOINT="https://0x0.tilde.team"
+flag_options="hvfs::"
+flag_version=0
+flag_help=0
+flag_file=0
+data=""
+
+SUCCESS=$(tput setaf 190)
+ERROR=$(tput setaf 196)
+RESET=$(tput sgr0)
+
+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                        Show this help
+  -v                        Show current version number
+  -f                        Explicitly interpret stdin as filename
+  -s server_address         Use alternative pastebin server address
+END
+}
+
+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 [ ! -z "${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}"
+}
+
+# is not interactive shell, use stdin
+if [ -t 0 ]; then
+  flag_file=1
+else
+  data="$(cat < /dev/stdin )"
+fi
+
+if ! parsed=$(getopt ${flag_options} "$@"); then
+  die "Invalid input" 2
+fi
+eval set -- "${parsed}"
+while true; do
+  case "$1" in
+    -h)
+      flag_help=1
+      shift
+      ;;
+    -v)
+      flag_version=1
+      shift
+      ;;
+    -f)
+      flag_file=1
+      shift
+      ;;
+    -s)
+      shift
+      ENDPOINT="$2"
+      shift
+      break
+      ;;
+    --)
+      shift
+      break
+      ;;
+    *)
+      die "Internal error: $1" 3
+      ;;
+  esac
+done
+
+if [ -z "$data" ]; then
+  data="$*"
+fi
+
+
+if [ ${flag_version} -gt 0 ]; then
+  printf "%s\\n" "${version}"
+  die "" 0
+fi
+
+if [ ${flag_help} -gt 0 ]; then
+  show_help
+  die "" 0
+fi
+
+if [ ${flag_file} -gt 0 ]; then
+  if [ -z "${data}" ]; then
+    printf "%sProvide data to upload%s\\n" "$ERROR" "$RESET"
+  elif [ ! -f "${data}" ]; then
+    printf "%s%s%s\\tFile not found.%s\\n" "$RESET" "${data}" "$ERROR" "$RESET"
+    # attempt to split data 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
+      printf "%s${f}\\t%s" "$RESET" "$SUCCESS"
+      if [ -f "${f}" ]; then
+        curl -F"file=@${f}" "${ENDPOINT}"
+        printf "%s" "$RESET"
+      else
+        printf "%sFile not found.%s\\n" "$ERROR" "$RESET"
+      fi
+    done
+  else
+    printf "%s${data}\\t%s" "$RESET" "$SUCCESS"
+    curl -F"file=@${data}" "${ENDPOINT}"
+    printf "%s" "$RESET"
+  fi
+else
+  if [ -z "${data}" ]; then
+    printf "%sNo data found for upload. Please try again.%s\\n" "$ERROR" "$RESET"
+  else
+    printf "%s" "$SUCCESS"
+    printf "%s" "${data}" | curl -F"file=@-;filename=null.txt" "${ENDPOINT}"
+    printf "%s" "$RESET"
+  fi
+fi
+