summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/m2n-prompt.sh176
1 files changed, 127 insertions, 49 deletions
diff --git a/scripts/m2n-prompt.sh b/scripts/m2n-prompt.sh
index d57db96..312cb76 100644
--- a/scripts/m2n-prompt.sh
+++ b/scripts/m2n-prompt.sh
@@ -1,82 +1,160 @@
#!/bin/bash
-# Mail2News posting script — NeoMutt + torsocks + swaks
-# Bind to F9 in neomuttrc.tor:
-# macro index,pager <F9> "<shell-escape>~/.config/neomutt/m2n-prompt.sh<enter>" "Post to Usenet"
-set -euo pipefail
-
-M2N_TO="mail2news@xilb7y4kj6u6qfo45o3yk2kilfv54ffukzei3puonuqlncy7cn2afwyd.onion"
-SMTP_HOST="xilb7y4kj6u6qfo45o3yk2kilfv54ffukzei3puonuqlncy7cn2afwyd.onion"
-SMTP_PORT="25"
-FROM="nobody@virebent.invalid"
+# Mail2News - Script interattivo per comporre post Usenet
+# Flusso: Newsgroup → Subject → [References se Re:] → Messaggio → Revisione → Invio
clear
-echo "=== MAIL2NEWS — Usenet Post ==="
+echo "========================================"
+echo " MAIL2NEWS - Nuovo Post"
+echo "========================================"
echo
-printf "Newsgroup(s) [comma-separated]: "
-read -r NEWSGROUP
-[ -z "$NEWSGROUP" ] && echo "Aborted." && exit 1
+# 1. Newsgroup (supporta multipli separati da virgola)
+echo -n "Newsgroup(s) (separa con virgola per crosspost): "
+read NEWSGROUP
+
+if [ -z "$NEWSGROUP" ]; then
+ echo "Errore: newsgroup obbligatorio"
+ exit 1
+fi
+
+# Rimuovi spazi attorno alle virgole (misc.test, alt.test → misc.test,alt.test)
NEWSGROUP=$(echo "$NEWSGROUP" | sed 's/ *, */,/g')
-printf "Subject: "
-read -r SUBJECT
-[ -z "$SUBJECT" ] && echo "Aborted." && exit 1
+# 2. Subject
+echo -n "Subject: "
+read SUBJECT
+
+if [ -z "$SUBJECT" ]; then
+ echo "Errore: subject obbligatorio"
+ exit 1
+fi
+# 3. Se inizia con Re: chiedi References
REFERENCES=""
-if echo "$SUBJECT" | grep -qi "^re:"; then
- printf "References (Message-ID of original): "
- read -r REFERENCES
+if [[ "$SUBJECT" =~ ^[Rr][Ee]:* ]]; then
+ echo -n "References (Message-ID del post originale): "
+ read REFERENCES
fi
-MSGFILE=$(mktemp /tmp/m2n-body.XXXXXX)
+# 4. Componi messaggio
+MSGFILE=$(mktemp /tmp/m2n-msg.XXXXXX)
echo "" > "$MSGFILE"
echo "-- " >> "$MSGFILE"
-echo "posted via virebent.art mail2news" >> "$MSGFILE"
+echo "Gabx" >> "$MSGFILE"
+
+echo
+echo "Scrivi il messaggio (si aprirà vim + firma YubiKey)..."
+echo "Premi INVIO per continuare..."
+read
-${EDITOR:-vim} "$MSGFILE"
+/home/gabriel1/bin/vim-yubisigner "$MSGFILE"
+# 5. Indirizzo mail2news semplice (senza data)
+TO="mail2news@xilb7y4kj6u6qfo45o3yk2kilfv54ffukzei3puonuqlncy7cn2afwyd.onion"
+
+# 6. Crea draft completo per revisione
DRAFTFILE=$(mktemp /tmp/m2n-draft.XXXXXX)
-{
- printf "To: %s\n" "$M2N_TO"
- printf "From: %s\n" "$FROM"
- printf "Subject: %s\n" "$SUBJECT"
- [ -n "$REFERENCES" ] && printf "References: %s\n" "$REFERENCES"
- printf "Newsgroups: %s\n" "$NEWSGROUP"
- printf "\n"
- cat "$MSGFILE"
-} > "$DRAFTFILE"
+cat > "$DRAFTFILE" << EOF
+To: $TO
+From: Gabx <mail2news@virebent.invalid>
+Subject: $SUBJECT
+EOF
+
+if [ -n "$REFERENCES" ]; then
+ echo "References: $REFERENCES" >> "$DRAFTFILE"
+fi
+
+echo "Newsgroups: $NEWSGROUP" >> "$DRAFTFILE"
+echo "" >> "$DRAFTFILE"
+cat "$MSGFILE" >> "$DRAFTFILE"
+
+# 7. Mostra e permetti modifica
clear
-echo "=== REVIEW ==="
+echo "========================================"
+echo " REVISIONE EMAIL"
+echo "========================================"
+echo
cat "$DRAFTFILE"
echo
-printf "[s]end [e]dit [q]uit: "
-read -r CHOICE
+echo "========================================"
+echo "[e] Modifica [s] Spedisci [q] Annulla"
+echo -n "Scelta: "
+read CHOICE
case "$CHOICE" in
- e|E) ${EDITOR:-vim} "$DRAFTFILE" ;;
- q|Q) rm -f "$MSGFILE" "$DRAFTFILE"; echo "Cancelled."; exit 0 ;;
+ e|E)
+ vim "$DRAFTFILE"
+ echo
+ echo "[s] Spedisci [q] Annulla"
+ echo -n "Scelta: "
+ read CHOICE2
+ if [[ "$CHOICE2" != "s" && "$CHOICE2" != "S" ]]; then
+ echo "Annullato."
+ rm -f "$MSGFILE" "$DRAFTFILE"
+ exit 0
+ fi
+ ;;
+ q|Q)
+ echo "Annullato."
+ rm -f "$MSGFILE" "$DRAFTFILE"
+ exit 0
+ ;;
+ s|S)
+ # continua sotto
+ ;;
+ *)
+ # default: spedisci
+ ;;
esac
+# 8. Invia via sendmail/msmtp o salva per neomutt
+# Generiamo il file per neomutt
+echo "set my_m2n_draft = \"${DRAFTFILE}\"" > /tmp/m2n.rc
+echo "set my_m2n_to = \"${TO}\"" >> /tmp/m2n.rc
+echo "set my_m2n_subj = \"${SUBJECT}\"" >> /tmp/m2n.rc
+if [ -n "$REFERENCES" ]; then
+ echo "my_hdr References: ${REFERENCES}" >> /tmp/m2n.rc
+fi
+echo "my_hdr Newsgroups: ${NEWSGROUP}" >> /tmp/m2n.rc
+
+# Salva draft per invio
+cp "$DRAFTFILE" /tmp/m2n-final.eml
+
echo
-echo "Sending via Tor..."
+echo "Email pronta. Invio in corso..."
+
+# Invia via swaks attraverso Tor (gestisce correttamente la sincronizzazione SMTP)
+SMTP_HOST="qee4i7sags6phsvb2yodwecfj7noimfhhalsjktsvikrwotxzis3raad.onion"
+SMTP_PORT="25"
+
+# SECURITY: Strip Message-ID to force server-side generation (anonymity)
+CLEANFILE=$(mktemp /tmp/m2n-clean.XXXXXX)
+grep -v "^Message-ID:" "$DRAFTFILE" > "$CLEANFILE"
torsocks swaks \
--server "${SMTP_HOST}:${SMTP_PORT}" \
- --from "$FROM" \
- --to "$M2N_TO" \
- --data "@${DRAFTFILE}" \
+ --from "mail2news@virebent.invalid" \
+ --to "${TO}" \
+ --data "@${CLEANFILE}" \
--timeout 60 \
- 2>&1 | tee /tmp/m2n-smtp.log
+ > /tmp/m2n-smtp.log 2>&1
-if grep -q "250 " /tmp/m2n-smtp.log; then
- echo
- echo "Sent to: $NEWSGROUP"
+rm -f "$CLEANFILE"
+
+if grep -q "250 .*[Qq]ueued\|250 2.0.0 Ok" /tmp/m2n-smtp.log; then
+ echo "✓ Messaggio inviato a $NEWSGROUP"
+ cat /tmp/m2n-smtp.log
else
- echo
- echo "ERROR — check /tmp/m2n-smtp.log"
+ echo "✗ Errore invio. Log:"
+ cat /tmp/m2n-smtp.log
+ echo ""
+ echo "Draft salvato in: $DRAFTFILE"
+ exit 1
fi
-rm -f "$MSGFILE" "$DRAFTFILE"
-printf "\nPress Enter to return to NeoMutt..."
-read -r
+# Cleanup
+rm -f "$MSGFILE"
+echo
+echo "Premi INVIO per tornare a neomutt..."
+read