aboutsummaryrefslogtreecommitdiff
path: root/misc/poc/firma-0.1.6
diff options
context:
space:
mode:
Diffstat (limited to 'misc/poc/firma-0.1.6')
-rwxr-xr-xmisc/poc/firma-0.1.6147
1 files changed, 147 insertions, 0 deletions
diff --git a/misc/poc/firma-0.1.6 b/misc/poc/firma-0.1.6
new file mode 100755
index 0000000..239c9a5
--- /dev/null
+++ b/misc/poc/firma-0.1.6
@@ -0,0 +1,147 @@
+#!/bin/bash
+#
+# firma v0.2: simple encrypted mailing list aliases
+# feedback: rhatto@riseup.net | GPL
+#
+# list configuration is passed through a config file,
+# where you put PARAMETER=value (whithout spaces)
+#
+# MAIL= path for mail program
+# GPG= path for gnupg binary
+# TMP= where you want the temp files
+# LISTNAME= list email
+# GPGDIR= gpg dir for the lists' keyring
+# PASSWD= passwd for the lists' keyring
+# FOOTER= message footer
+# ALLOWSENDKEY = set to 1 if you want people automatically receive the list
+# key requesting through listname-request@example.tld
+# with subject: key
+#
+# design / todo:
+#
+# - list-request:
+# - key (allow send key)
+# - help
+# - subscribe: exchange pubkey
+# - unsubscribe
+# - strings
+# - check signatures
+# - create list
+# - archive (optional)
+# - logfile (optional)
+# - gpg --no-tty --display-charset --utf8-strings ?
+#
+# sintax: firma -c || firma config-file
+# -c: create a new list
+# config-file: parse the email from stdin
+# with the parameters specified in the
+# config-file
+#
+# fix:
+#
+# - special chars
+# - id's recipient selection
+#
+
+fuction _refresh_cache {
+ rm $1 $1.gpg
+ touch $1; chmod 600 $1;
+ touch $1.gpg; chmod 600 $TMP.gpg;
+}
+
+function _process_message {
+ # get the headers
+ FROM=$(grep -m 1 ^From: $1 | cut -f 2 -d :)
+ DATE=$(grep -m 1 ^Date: $1)
+ SUBJECT=$(grep -m 1 ^Subject: $1)
+
+ # detect the encrypted message
+ sed -n '/-----BEGIN PGP MESSAGE-----/,/-----END PGP MESSAGE-----/p' $1 >> $1.gpg
+
+ # encrypting and sending for each recipient on the list
+ for EMAIL in $($GPGLIST | grep pub | cut -d "<" -f 2 | sed -e 's/>//' | grep @ | grep -v $LISTNAME); do
+
+ echo "$PASSWD
+ Message from: $FROM
+ $SUBJECT
+ $DATE
+
+ $(echo "$PASSWD" | $GPGDECRYPT $1.gpg)
+
+ ---
+ $FOOTER
+ " | sed -e 's/=20$//' | $GPGENCRYPT $EMAIL | $MAIL -r $LISTNAME $EMAIL
+ done
+}
+
+function _process_request {
+
+ # todo: support subjects like "key ", etc
+ FROM=$(grep -m 1 ^From: $1 | cut -f 2 -d :)
+ REQUEST=$(grep -m 1 ^Subject: $1)
+ if [[ $REQUEST == "key" ]]; then
+ if [[ $ALLOWSENDKEY == 1 ]]; then
+ # send key to From: recipient
+ else
+ # dont send the key; return error message
+ fi
+ else if [[ $REQUEST == "subscribe" ]]; then
+ # check if user put its pubkey and
+ # ask the list for subscribe From: recipient
+ else if [[ $REQUEST == "unsubscribe" ]]; then
+ # unsubscribe and advise the list
+ else
+ # error message
+ fi
+
+}
+
+function _process {
+
+ # eval the config file
+ source $1
+
+ GPGCOMMAND="$GPG -q --homedir $GPGDIR"
+ GPGLIST="$GPGCOMMAND --list-keys"
+ GPGDECRYPT="$GPGCOMMAND --decrypt"
+ GPGENCRYPT="$GPGCOMMAND --always-trust --hidden-recipient --textmode -e -s -a -r"
+
+ # clear the cache before read the message
+ _refresh_cache $TMP
+
+ # todo: use an array
+ while read STDIN; do
+ echo $STDIN >> $TMP
+ done
+
+ # check with action is requested depending on the To: field
+ TO=$(grep -m 1 ^To: $)
+ if [[ $TO == $LISTNAME ]]; then _process_message $TMP;
+ else _process_request $TMP;
+ fi
+
+ # clear after process
+ _refresh_cache $TMP
+
+}
+
+function newlist {
+
+ LISTHOME =
+ LISTNANE =
+ ...
+
+ $GPGCOMMAND --gen-key
+
+}
+
+# check sintax
+if [[ $1 = "-c" ]]; then
+ _newlist;
+else if [ -f $1 ];
+ then _process $1;
+else
+ echo sintax: $0 [-c] [config-file];
+fi
+
+rm $TMP $TMP.gpg