summary refs log tree commit diff
path: root/bin/up.sh
diff options
context:
space:
mode:
Diffstat (limited to 'bin/up.sh')
-rw-r--r--bin/up.sh64
1 files changed, 41 insertions, 23 deletions
diff --git a/bin/up.sh b/bin/up.sh
index e65d4522..6305b1ee 100644
--- a/bin/up.sh
+++ b/bin/up.sh
@@ -2,68 +2,86 @@
 set -eu
 
 readonly Host='temp.causal.agency'
+readonly Root='/var/www'
 
+temp=
+temp() {
+	temp=$(mktemp -d)
+	trap 'rm -r "$temp"' EXIT
+}
+
+warn=
 upload() {
-	local src ext ts rand url
 	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}:/usr/local/www/${url}"
+	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}"
 }
 
-temp() {
-	temp=$(mktemp -d)
-	trap "rm -r '$temp'" EXIT
-}
-
 uploadText() {
 	temp
-	cat > "${temp}/input.txt"
+	cat >"${temp}/input.txt"
 	upload "${temp}/input.txt"
 }
 
 uploadCommand() {
 	temp
-	echo "$ $*" > "${temp}/exec.txt"
-	"$@" >> "${temp}/exec.txt" 2>&1 || true
+	echo "$ $1" >"${temp}/exec.txt"
+	$SHELL -c "$1" >>"${temp}/exec.txt" 2>&1 || true
 	upload "${temp}/exec.txt"
 }
 
-uploadHi() {
+uploadHilex() {
 	temp
-	hi -f html -o document,anchor,tab=4 "$@" > "${temp}/hi.html"
-	upload "${temp}/hi.html"
+	hilex -f html -o document,tab=4 "$@" >"${temp}/hilex.html"
+	upload "${temp}/hilex.html"
 }
 
 uploadScreen() {
 	temp
-	screencapture -i "$@" "${temp}/capture.png"
-	pngo "${temp}/capture.png" || true
+	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
+	cat >"${temp}/term.html" <<-EOF
 	<!DOCTYPE html>
+	<meta charset="utf-8">
 	<title>${1}</title>
 	<style>
 	$(scheme -s)
 	</style>
 	EOF
-	ptee "$@" | shotty -Bs >> "${temp}/term.html"
+	ptee $SHELL -c "$1" >"${temp}/term.pty"
+	shotty -Bs "${temp}/term.pty" >>"${temp}/term.html"
 	upload "${temp}/term.html"
 }
 
-while getopts 'chst' opt; do
-	case "$opt" in
+while getopts 'chstw:' opt; do
+	case $opt in
 		(c) fn=uploadCommand;;
-		(h) fn=uploadHi;;
+		(h) fn=uploadHilex;;
 		(s) fn=uploadScreen;;
 		(t) fn=uploadTerminal;;
+		(w) warn=$OPTARG;;
 		(?) exit 1;;
 	esac
 done