#!/usr/bin/env bash # Copyright (c) 2012 fbt # # About: # A simple upload script for ZFH (http://zerofiles.org) _self="${0##*/}" cfg_url_regex='^[A-Za-z]([A-Za-z0-9+.-]+)?://.+' cfg_tmp_dir="/tmp/$USER/sup"; TEMPDIR="$cfg_tmp_dir" cfg_script_url='https://zfh.so/upload' cfg_screenshot_ext='png' [[ -f $HOME/.suprc ]] && { source "$HOME/.suprc"; } sup.msg() { echo "[sup] $1"; } sup.err() { sup.msg "(error) $1" >&2; } sup.usage() { echo "Usage: ${_self} [-RsF] [-D num] [file/url]" } sup.env() { for i in "$cfg_tmp_dir"; do [[ -d "$i" ]] || { mkdir -p "$i"; } done } sup.upload() { curl -F file="@$file" \ -F upload_mode='api' \ -F flag_private="$flag_private" \ -F secret="$secret" \ -F submit="" \ "$cfg_script_url" -sL -A 'zerofiles.org upload script' || { return 1; } (( "$flag_rm" )) && { rm "$file"; } return 0 } sup.mktemp() { >"$1" || { sup.err "Cannot create $1!" return 1 } echo "$1" } sup.scrot() { local tmp_file [[ "$scrot_exec" ]] || { scrot_exec=$(type -P scrot); } [[ "$scrot_exec" ]] || { sup.err "Please install scrot to use this function" return 1 } (( "$flag_scrot_fullscreen" )) || { scrot_args+=( '-s' ); } [[ "$cfg_scrot_delay" ]] && { scrot_args+=( "-d $cfg_scrot_delay" ); } tmp_file="$(sup.mktemp "${cfg_tmp_dir}" ".${cfg_screenshot_ext}")" scrot "${scrot_args[@]}" "$tmp_file" || { sup.err "Failed to take a screenshot." return 1 } echo "$tmp_file" } sup.exclude() { [[ "$2" ]] && { echo "$1"; return 1; } return 0 } sup.if_url() { echo "$1" | grep -oE "$cfg_url_regex" &>/dev/null; } sup.mktemp() { local tmp_file_name tmp_file_name_extra="$2" tmp_dir="$1" [[ -d "$tmp_dir" ]] || { sup.err "${tmp_dir} does not exist or is not a directory." return 1 } until [[ ! -e "${tmp_dir}/${tmp_file_name}" ]]; do tmp_file_name="${RANDOM}${RANDOM}${tmp_file_name_extra}" done echo "${tmp_dir}/${tmp_file_name}" } set_argv() { declare arg opt c declare -g argv while (( $# )); do unset -v arg opt c case "$1" in (--) argv+=( "$1" ); break;; (--*) IFS='=' read arg opt <<< "$1" argv+=( "$arg" ) [[ "$opt" ]] && { argv+=( "$opt" ) } ;; (-*) while read -n1 c do case "$c" in -|'') :;; *) argv+=( "-$c" );; esac done <<< "$1" ;; (*) argv+=( "$1" );; esac shift done } main() { declare args file target flag_private flag_rm flag_scrot flag_scrot_fullscreen cfg_scrot_delay while [[ "$1" ]]; do case "$1" in -p|--private) flag_private='true';; -R|--remove-file) flag_rm='1';; -s|--screenshot) flag_scrot='1';; -F|--fullscreen) flag_scrot_fullscreen='1';; -D|--screenshot-delay) cfg_scrot_delay="$2"; shift;; -h|--help|--usage) sup.usage; return;; --) shift; break;; *) break;; esac shift done sup.env if (( flag_scrot )); then file="$(sup.scrot)" || { return 1; } else (( $# )) || { sup.usage return 1 } target="$1" if sup.if_url "$target"; then file=$(sup.mktemp "$cfg_tmp_dir") curl -skL "$target" > "$file" || { sup.err "Could not download file." return 1 } else file="$target" [[ -f "$file" ]] || { sup.err "No such file: ${file}" return 1 } fi fi sup.upload } set_argv "$@" main "${argv[@]}"