]> Sergey Matveev's repositories - dotfiles.git/commitdiff
Simpler paster
authorSergey Matveev <stargrave@stargrave.org>
Mon, 10 Mar 2025 13:31:01 +0000 (16:31 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Tue, 11 Mar 2025 13:46:40 +0000 (16:46 +0300)
bin/bin/paster [new file with mode: 0755]

diff --git a/bin/bin/paster b/bin/bin/paster
new file mode 100755 (executable)
index 0000000..f3838f4
--- /dev/null
@@ -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