rp

simple email tools
git clone https://git.parazyd.org/rp
Log | Files | Refs | README | LICENSE

commit f3fa45fa0c8fe75b9c193edb4efb304276c7e9af
parent 611044199ff9528142f4f9bc1f7be6b71e0f58ae
Author: parazyd <parazyd@dyne.org>
Date:   Thu, 20 Dec 2018 12:38:07 -0500

Improve messages and code style.

Diffstat:
Mbin/rpabook | 50+++++++++++++++++++++++++-------------------------
Mbin/rppeek | 4++--
Mbin/rpqueue | 4+++-
Mbin/rpsend | 40++++++++++++++++++++--------------------
Mbin/rpsieve | 40++++++++++++++++++++--------------------
Mbin/rpsign | 28+++++++++++++++++++++-------
Mbin/rpsync | 20++++++++++----------
Mheaders.c | 2+-
Mind.c | 6+++---
Mrohrpost.c | 3+--
Msieve.c | 6+++---
Mutil.c | 4++--
12 files changed, 111 insertions(+), 96 deletions(-)

diff --git a/bin/rpabook b/bin/rpabook @@ -10,39 +10,39 @@ ab="$profile/whitelist.abook" usage() { cat <<EOF -* usage: $(basename $0) [-a < email] [-c pattern] +* Usage: $(basename $0) [-a < email] [-c pattern] -a: add to abook -c: completion (used with mutt) EOF exit 1 } -for i in "$@"; do - case "$i" in - -a) - email="$(cat)" - addr="$(echo "$email" | rpheaders From | cut -d'<' -f2 | tr -d '<>')" - name="$(echo "$email" | rpheaders From | cut -d'<' -f1 | sed 's/ $//')" - echo "$addr" - grep -q "^email=$addr" "$ab" && { - echo "* address already in abook" - exit 0 - } +while getopts "ach" opt; do + case "$opt" in + a) + email="$(cat)" + addr="$(echo "$email" | rpheaders From | cut -d'<' -f2 | tr -d '<>')" + name="$(echo "$email" | rpheaders From | cut -d'<' -f1 | sed 's/ $//')" + echo "$addr" + grep -q "^email=$addr" "$ab" && { + echo "* Address already in abook" + exit 0 + } - if [ "$addr" = "$name" ]; then - name="$(echo "$name" | cut -d '@' -f1)" - fi + if [ "$addr" = "$name" ]; then + name="$(echo "$name" | cut -d '@' -f1)" + fi - echo "email=$addr,$name" >> "$ab" - exit $? - ;; - -c) - grep -i "$2" "$ab" | sed -e 's/^email=//' -e 's/,/\t/' - exit $? - ;; - *) - usage - ;; + echo "email=$addr,$name" >> "$ab" + exit $? + ;; + c) + grep -i "$2" "$ab" | sed -e 's/^email=//' -e 's/,/\t/' + exit $? + ;; + *) + usage + ;; esac done diff --git a/bin/rppeek b/bin/rppeek @@ -7,7 +7,7 @@ profile="${RPPROFILE:-$HOME/.rp/default}" usage() { - echo "* usage: $(basename $0) [folder]" + echo "* Usage: $(basename $0) [folder]" exit 1 } @@ -18,7 +18,7 @@ for i in "$@"; do ;; *) folder="-f =${i}" - echo "* requested folder: '$i'" + echo "* Opening '$i'" ;; esac done diff --git a/bin/rpqueue b/bin/rpqueue @@ -11,4 +11,6 @@ mkdir -p "$profile/tmp/outbox" email="$(cat)" fname="$(echo "$email" | rpheaders Message-ID | tr -d '<>')" -echo "$email" > "$profile/tmp/outbox/$fname" +cat > "$profile/tmp/outbox/$fname" <<EOF +$email +EOF diff --git a/bin/rpsend b/bin/rpsend @@ -8,7 +8,7 @@ profile="${RPPROFILE:-$HOME/.rp/default}" usage() { cat <<EOF -* usage: $(basename $0) [-n] [-v] [-l] [-a] < email +* Usage: $(basename $0) [-n] [-v] [-l] [-a] < email -n: dry run -l: list outbox -v: verbose list output @@ -28,19 +28,19 @@ listoutbox() { done } -for i in "$@"; do - case "$i" in - -n) +while getopts "nvlah" opt; do + case "$opt" in + n) dryrun="--pretend" ;; - -v) + v) verbose="true" ;; - -l) + l) list="true" ;; - -a) - echo " * sending all queued emails" + a) + echo "* Sending all queued emails..." for j in $(rpsend -l); do rpsend < "$j" && { [ -z "$dryrun" ] && rm -f "$j" ; } done @@ -63,10 +63,10 @@ rnet="$(rpheaders rnet < "$profile"/config)" rimap="$(echo "$rnet" | cut -d'!' -f2)" ruser="$(rpheaders ruser < "$profile"/config)" -printf "\\n\\n * smtp send via %s\\n" "$rimap" +printf "\\n\\n* SMTP send via %s\\n" "$rimap" if ! [ -f "$profile/smtp-fingerprint" ]; then - echo "* no saved tls certificate fingerprint found. going with tofu." + echo "* No saved TLS certificate fingerprint found. Going with TOFU." rputil -e getfpr "$rnet" > "$profile"/smtp-fingerprint fi @@ -75,12 +75,12 @@ served="$(rputil -e getfpr "$rnet")" if [ "$known" != "$served" ]; then cat <<EOF -* known fingerprint: $known -* served fingerprint: $served +* Known fingerprint: $known +* Served fingerprint: $served -* server fingerprint mismatch!" -* the known one is different, this may be mitm -* to trust the new one, edit or delete $profile/smtp-fingerprint +* Server fingerprint mismatch!" +* The known one is different, this may be a man-in-the-middle! +* To trust the new one, edit or delete $profile/smtp-fingerprint EOF exit 1 fi @@ -105,10 +105,10 @@ _dest="$(echo "$email" | rpheaders To)" _cc="$(echo "$email" | rpheaders Cc)" cat <<EOF -* subject: $_subj -* to: $_dest -* cc: $_cc -* sending $(rputil -e humansize "${#email}") over the network +* Subject: $_subj +* To: $_dest +* Cc: $_cc +* Sending $(rputil -e humansize "${#email}") over the network... EOF cat | msmtp "$dryrun" -C "$msmtpcfg" -t -X "$profile/tmp/msmtp.log" << EOF @@ -121,7 +121,7 @@ rm -f "$msmtpcfg" case "$_e" in 0) - echo "* email sent successfully" + echo "* Email sent successfully" ;; *) echo "* msmtp failed" diff --git a/bin/rpsieve b/bin/rpsieve @@ -8,7 +8,7 @@ profile="${RPPROFILE:-$HOME/.rp/default}" usage() { cat <<EOF -* usage: $(basename $0) [-e] [-u] [-v] +* Usage: $(basename $0) [-e] [-u] [-v] -e: edit filters.txt before continuing -u: upload filters.sieve when done -v; be verbose @@ -16,20 +16,20 @@ EOF exit 1 } -for i in "$@"; do - case "$i" in - -e) - ed=true - ;; - -u) - upload=true - ;; - -v) - verbose="-v" - ;; - *) - usage - ;; +while getopts "euvh" opt; do + case "$opt" in + e) + ed=true + ;; + u) + upload=true + ;; + v) + verbose="-v" + ;; + *) + usage + ;; esac done @@ -40,15 +40,15 @@ ab="$profile/whitelist.abook" [ -n "$ed" ] && vim "$ft" [ -f "$ft" ] || { - echo "* no filters.txt file" + echo "* No filters.txt file" exit 1 } [ -f "$ab" ] || { - echo "* no whitelist.abook file" + echo "* No whitelist.abook file" exit 1 } -echo "* generating sieve rules" +echo "* Generating sieve rules" cat > "$fs" << EOF # mailbox supports fileinto :create require ["fileinto","mailbox","variables"]; @@ -76,11 +76,11 @@ fileinto :create "unsorted"; EOF if [ -n "$upload" ]; then - echo "* uploading filters.sieve" + echo "* Uploading filters.sieve" host=t3.dyne.org path=/var/vmail/sieve-scripts/"$(readlink "$profile")" scp "$fs" "$host:$path" || { - echo "* upload failed" + echo "* Upload failed" exit 1 } fi diff --git a/bin/rpsign b/bin/rpsign @@ -4,17 +4,31 @@ # by parazyd # +usage() { + cat <<EOF +* Usage: $(basename $0) [-e] < email + -e: Prepare email for encryption +EOF + exit 1 +} + +while getopts "eh" opt; do + case "$opt" in + e) + # Prepare for encryption + enc=1 + ;; + *) + usage + ;; + esac +done + + boundary="$(rputil -e genmimeb)" email="$(cat)" -case "$1" in - -e) - # prepare for encryption - enc=1 - ;; -esac - headers="$(echo "$email" | sed '/^$/q' | sed '/Content-Type: /d')" emabody="$(echo "$email" | sed '1,/^$/d')" diff --git a/bin/rpsync b/bin/rpsync @@ -19,14 +19,14 @@ if not PROFILE: def usage(): - """ usage function """ - print(" * usage: %s [-n]" % argv[0]) - print("\t-n: dry run") + """ Usage function """ + print("* Usage: %s [-n]" % argv[0]) + print(" -n: dry run") exit(1) def parsecfg(): - """ function for parsing the config file """ + """ Function for parsing the config file """ cfgmap = {} rawtxt = open(join(PROFILE, 'config')).read() contents = rawtxt.split('\n')[:-1] @@ -38,7 +38,7 @@ def parsecfg(): def main(): - """ main routine """ + """ Main routine """ if len(argv) > 1 and argv[1] != '-n': usage() @@ -61,9 +61,9 @@ def main(): else: imap = IMAP4(host=rhost, port=rport) - print(" * connecting to %s:%s" % (rhost, rport)) + print("* Connecting to %s:%s" % (rhost, rport)) if dryrun: - print(" * dry run enabled") + print("* Dry run enabled") data = imap.login(config['ruser'], config['rpass']) data = imap.list() @@ -80,7 +80,7 @@ def main(): if hasmail: for i in hasmail: - print(' * new mail in:', i.decode('utf-8')) + print('* New mail in', i.decode('utf-8')) if not dryrun: data = imap.select(i) data = imap.fetch('1:*', '(FLAGS)') @@ -98,7 +98,7 @@ def main(): imap.store(j.split()[0], '+FLAGS', '\\Deleted') imap.expunge() else: - print(' * no new mail') + print('* No new mail') imap.logout() @@ -107,4 +107,4 @@ if __name__ == '__main__': T1 = time() main() T2 = time() - print(" * total time: %.2f seconds" % (T2 - T1)) + print("* Total time: %.2f seconds" % (T2 - T1)) diff --git a/headers.c b/headers.c @@ -13,7 +13,7 @@ char *argv0; void headersusage(void) { - die("usage: %s [-v] [header [header [...]]]\n", argv0); + die("Usage: %s [-v] [header [header [...]]]\n", argv0); } int headersmain(int argc, char *argv[]) { diff --git a/ind.c b/ind.c @@ -12,7 +12,7 @@ void edie(char *fmt, ...) { va_list fmtargs; va_start(fmtargs, fmt); - fprintf(stderr, "\033[31m*\033[0m "); + fprintf(stderr, "* "); vfprintf(stderr, fmt, fmtargs); va_end(fmtargs); fprintf(stderr, ": "); @@ -26,7 +26,7 @@ void die(char *fmt, ...) { va_list fmtargs; va_start(fmtargs, fmt); - fprintf(stderr, "\033[31m*\033[0m "); + fprintf(stderr, "* "); vfprintf(stderr, fmt, fmtargs); va_end(fmtargs); @@ -37,7 +37,7 @@ void info(char *fmt, ...) { va_list fmtargs; va_start(fmtargs, fmt); - fprintf(stderr, "\033[32m*\033[0m "); + fprintf(stderr, "* "); vfprintf(stderr, fmt, fmtargs); va_end(fmtargs); } diff --git a/rohrpost.c b/rohrpost.c @@ -15,7 +15,7 @@ char *argv0; void usage(void) { - die("usage: %s [-hil] cmd [args]\n", argv0); + die("Usage: %s [-hil] cmd [args]\n", argv0); } struct command { @@ -76,5 +76,4 @@ int main(int argc, char *argv[]) { } usage(); - return 1; } diff --git a/sieve.c b/sieve.c @@ -93,15 +93,15 @@ int sievemain(int argc, char *argv[]) { strtok(l, "\n"); if (!strncmp("to", l, 2)) { if (gento(l)) - die("invalid line %d: %s\n", c, l); + die("Invalid syntax on line %d: %s\n", c, l); } else if (!strncmp("from", l, 4)) { if (genfrom(l)) - die("invalid line %d: %s\n", c, l); + die("Invalid syntax on line %d: %s\n", c, l); } else if (!strncmp("email=", l, 6)) { if (genabook(l)) - die("invalid line %d: %s\n", c, l); + die("Invalid syntax on line %d: %s\n", c, l); } } printf("\n"); diff --git a/util.c b/util.c @@ -18,9 +18,9 @@ char be[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; void utilusage(void) { - die("usage: %s [-e cmd [args]]\n" + die("Usage: %s [-e util [args]]\n" " -e: run util\n\n" - "available utils:\n" + "Available utils:\n" " * genmsgid: generates a Message-ID header\n" " * genmimeb: generates a semi-random MIME boundary\n" " * humansize: calculates byte size into human readable\n"