From: Sergey Matveev <stargrave@stargrave.org> Date: Mon, 10 Mar 2025 13:31:01 +0000 (+0300) Subject: Simpler paster X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=579d7a023f87c3bdd2fee3929f230c0421238ed0;p=dotfiles.git Simpler paster --- diff --git a/bin/bin/paster b/bin/bin/paster new file mode 100755 index 0000000..f3838f4 --- /dev/null +++ b/bin/bin/paster @@ -0,0 +1,74 @@ +#!/usr/bin/env zsh +# Simpler authenticated alternative to the paster. +# Install: +# pw useradd paster -s /usr/sbin/nologin -w no +# mkdir /path/to/pastes +# cat > /path/to/pastes/index.html <<EOF +# <!DOCTYPE html> +# <html> +# <head><title>paster</title></head> +# <body>Paste service.</body> +# </html> +# EOF +# chown -R paster:www pastes +# chmod 2750 pastes +# chmod 640 /path/to/pastes/index.html +# mkdir /home/paster/.ssh +# cat >/home/paster/.ssh/authorized_keys <<EOF +# restrict,command="internal-sftp -d /path/to/pastes" ... +# EOF +# chmod 600 /home/paster/.ssh/authorized_keys +# chmod 700 /home/paster/.ssh +# chown -R paster:paster /home/paster + +setopt ERR_EXIT + +if [[ -s $1 ]] ; then + src=$1 + ext=$src:e +else + ext=$1 + src=$(mktemp) + trap "rm -f $src" HUP PIPE INT QUIT TERM EXIT + cat >$src +fi +[[ -n $ext ]] || ext=txt +rnd=$(dd if=/dev/urandom bs=12 count=1 2>/dev/null | base64 | tr "+/=" "-_=") +fn=$rnd.$ext +if [[ $ext = cast ]] ; then + cast=$(mktemp) + trap "rm -f $cast" HUP PIPE INT QUIT TERM EXIT + cat >$cast <<EOF +<!DOCTYPE html> +<html> + <head> + <title>asciicast</title> + <link rel="stylesheet" type="text/css" href="asciinema-player-v2.6.1.css" /> + </head> + <body> + <asciinema-player src="$fn"></asciinema-player> + <script src="asciinema-player-v2.6.1.js"></script> + <noscript> + No JavaScript support. + Download <a href="{{.Cast}}">asciicast</a> and play it with + <a href="https://pypi.org/project/asciinema/">asciinema</a>. + </noscript> + </body> +</html> +EOF +fi +{ + cat <<EOF +put $src $fn.tmp +chmod 640 $fn.tmp +rename $fn.tmp $fn +EOF + [[ -z $cast ]] || cat <<EOF +put $cast $fn.html.tmp +chmod 640 $fn.html.tmp +rename $fn.html.tmp $fn.html +EOF +} | sftp paster@gw.stargrave.org +print http://paster.stargrave.org/$fn +[[ $ext != cast ]] || print http://paster.stargrave.org/$fn.html +b3sum <$src