UP(1) General Commands Manual UP(1)

upupload file

up [-c | -h | -s | -t] [-w warn] [file | command]

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.
warn
Create an HTML redirect with warn in its title.

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

July 26, 2022 OpenBSD 7.4

up.sh in git

#!/bin/sh
set -eu

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

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

warn=
upload() {
	src=$1
	ext=${src##*.}
	name=$(printf '%x%s' "$(date +%s)" "$(openssl rand -hex 4)")
	url="${Host}/${name}.${ext}"
	scp -q "$src" "${Host}:${Root}/${url}"
	if test -n "$warn"; then
		test -n "$temp" || temp
		cat >"${temp}/warn.html" <<-EOF
			<!DOCTYPE html>
			<title>${warn}</title>
			<meta http-equiv="refresh" content="0;url=${name}.${ext}">
		EOF
		url="${Host}/${name}.html"
		scp -q "${temp}/warn.html" "${Host}:${Root}/${url}"
	fi
	echo "https://${url}"
}

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" >"${temp}/term.pty"
	shotty -Bs "${temp}/term.pty" >>"${temp}/term.html"
	upload "${temp}/term.html"
}

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

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