PrintToVeraeTimeStamp/platform/linux/cups/backend-verae.sh

76 lines
2.1 KiB
Shell
Executable file

#!/bin/bash
# CUPS backend: verae — virtual printer "Verae Timestamping" (Linux)
# Discovery (no args): advertise device URI verae:/
# Job: spool PDF and run verae-print as the job user (digests only).
set -euo pipefail
LOG_ROOT="${CUPS_SERVERROOT:-/var/log/cups}"
BACKEND_LOG="${LOG_ROOT}/verae-backend.log"
log() {
echo "$(date -u +%Y-%m-%dT%H:%MZ) $*" >>"$BACKEND_LOG" 2>/dev/null || true
}
if [[ $# -eq 0 ]]; then
echo 'direct verae:/ "Verae Timestamping" "Verae Timestamping — digests-only stamp"'
exit 0
fi
JOB_ID="${1:-}"
JOB_USER="${2:-}"
JOB_TITLE="${3:-document}"
JOB_FILE="${6:-}"
VERAE_PRINT="${VERAE_PRINT_BIN:-/usr/local/bin/verae-print}"
CHANNEL="${VERAE_PRINT_CHANNEL:-zapier}"
if [[ -n "$JOB_USER" && -d "/home/$JOB_USER" ]]; then
SPOOL_BASE="/home/$JOB_USER/.local/share/verae/print-spool"
OUT_DIR="/home/$JOB_USER/Documents/Verae Timestamps"
else
SPOOL_BASE="/var/spool/verae/${JOB_USER:-unknown}"
OUT_DIR="/tmp/VeraeTimestamps"
fi
mkdir -p "$SPOOL_BASE"
chmod 700 "$SPOOL_BASE" 2>/dev/null || true
SAFE_TITLE=$(echo "$JOB_TITLE" | tr -cd 'A-Za-z0-9._ -' | head -c 80)
SAFE_TITLE=${SAFE_TITLE:-document}
WORK="$SPOOL_BASE/job-${JOB_ID}-$$"
mkdir -p "$WORK"
INPUT="$WORK/input.dat"
if [[ -n "$JOB_FILE" && -f "$JOB_FILE" ]]; then
cp "$JOB_FILE" "$INPUT"
else
cat >"$INPUT"
fi
PDF="$WORK/${SAFE_TITLE}.pdf"
if [[ "$(head -c 4 "$INPUT")" == "%PDF" ]]; then
cp "$INPUT" "$PDF"
else
# Best-effort: keep bytes; stamp accepts PDF/HTML
cp "$INPUT" "$PDF"
fi
log "job=$JOB_ID user=$JOB_USER title=$JOB_TITLE pdf=$PDF channel=$CHANNEL"
run_as_user() {
if [[ -n "$JOB_USER" && "$JOB_USER" != "root" ]] && command -v runuser >/dev/null 2>&1; then
runuser -u "$JOB_USER" -- "$@"
elif [[ -n "$JOB_USER" && "$JOB_USER" != "root" ]] && command -v su >/dev/null 2>&1; then
su - "$JOB_USER" -c "$(printf '%q ' "$@")"
else
"$@"
fi
}
mkdir -p "$OUT_DIR" 2>/dev/null || true
if run_as_user "$VERAE_PRINT" stamp -channel "$CHANNEL" -out-dir "$OUT_DIR" -skip-setup "$PDF"; then
log "job $JOB_ID ok → $OUT_DIR"
exit 0
fi
log "job $JOB_ID stamp failed"
exit 1