76 lines
2.1 KiB
Shell
Executable file
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
|