UP(1) General Commands Manual UP(1)

upupload file

up [-h] [file]

up -c | -t command

up -s

up uploads a file to temp.causal.agency with scp(1). If no file is provided, standard input is read and uploaded as text.

The destination file name is chosen using date(1) and openssl(1) rand. The URL of the uploaded file is printed and copied to the pasteboard with pbcopy(1) if available.

The arguments are as follows:

Run a command to produce a text file for upload.
Use hilex(1) to produce an HTML file for upload.
Use screencapture(1) or scrot(1) to produce a PNG file for upload. The file is optimized by pngo(1).
Run a command with ptee(1) and shotty(1) to produce an HTML file for upload.

Any arguments after ‘--’ are passed to hilex(1) and screencapture(1) or scrot(1), respectively.

June 21, 2021 OpenBSD 7.0

up.sh in git

#!/bin/sh
set -eu

readonly Host='temp.causal.agency'
readonly Root='/var/www'

upload() {
	src=$1
	ext=${src##*.}
	ts=$(date +'%s')
	rand=$(openssl rand -hex 4)
	url=$(printf '%s/%x%s.%s' "$Host" "$ts" "$rand" "$ext")
	scp -q "$src" "${Host}:${Root}/${url}"
	echo "https://${url}"
}

temp() {
	temp=$(mktemp -d)
	trap 'rm -r "$temp"' EXIT
}

uploadText() {
	temp
	cat >"${temp}/input.txt"
	upload "${temp}/input.txt"
}

uploadCommand() {
	temp
	echo "$ $1" >"${temp}/exec.txt"
	$SHELL -c "$1" >>"${temp}/exec.txt" 2>&1 || true
	upload "${temp}/exec.txt"
}

uploadHilex() {
	temp
	hilex -f html -o document,tab=4 "$@" >"${temp}/hilex.html"
	upload "${temp}/hilex.html"
}

uploadScreen() {
	temp
	if command -v screencapture >/dev/null; then
		screencapture -i "$@" "${temp}/capture.png"
	else
		scrot -s "$@" "${temp}/capture.png"
	fi
	pngo "${temp}/capture.png"
	upload "${temp}/capture.png"
}

uploadTerminal() {
	temp
	cat >"${temp}/term.html" <<-EOF
	<!DOCTYPE html>
	<meta charset="utf-8">
	<title>${1}</title>
	<style>
	$(scheme -s)
	</style>
	EOF
	ptee $SHELL -c "$1" | shotty -Bs >>"${temp}/term.html"
	upload "${temp}/term.html"
}

while getopts 'chst' opt; do
	case $opt in
		(c) fn=uploadCommand;;
		(h) fn=uploadHilex;;
		(s) fn=uploadScreen;;
		(t) fn=uploadTerminal;;
		(?) exit 1;;
	esac
done
shift $((OPTIND - 1))
[ $# -eq 0 ] && : ${fn:=uploadText}
: ${fn:=upload}

url=$($fn "$@")
printf '%s' "$url" | pbcopy || true
echo "$url"