commit 038b90bb46115c5696fdaee6fd05394ca14e7736
parent c8f2aa2c529464306decbc2e21f1702d4bd9ae17
Author: Luke Smith <luke@lukesmith.xyz>
Date: Thu, 7 Jan 2021 18:11:35 -0500
tweaks
cloe #367
Diffstat:
M | bin/mw | | | 90 | ++++++++++++++++++++++++++++++++++++++++--------------------------------------- |
1 file changed, 46 insertions(+), 44 deletions(-)
diff --git a/bin/mw b/bin/mw
@@ -1,13 +1,5 @@
#!/bin/sh
-command -V gpg >/dev/null 2>&1 && GPG="gpg" || GPG="gpg2"
-[ -z ${PASSWORD_STORE_DIR+x} ] && PASSWORD_STORE_DIR="$HOME/.password-store"
-[ -r "$PASSWORD_STORE_DIR/.gpg-id" ] &&
- "$GPG" --list-secret-keys "$(cat "$PASSWORD_STORE_DIR/.gpg-id")" >/dev/null 2>&1 || {
- printf "\`pass\` must be installed and initialized to encrypt passwords.\\nBe sure it is installed and run \`pass init <yourgpgemail>\`.\\nIf you don't have a GPG public private key pair, run \`%s --full-gen-key\` first.\\n" "$GPG"
- exit 1
- }
-
prefix="/usr/local"
pass_prefix="mw-"
muttdir="${XDG_CONFIG_HOME:-$HOME/.config}/mutt" # Main mutt config location
@@ -24,18 +16,28 @@ msmtplog="${XDG_CONFIG_HOME:-$HOME/.config}/msmtp/msmtp.log"
marker="# mw-autogenerated"
alias mbsync='mbsync -c "$mbsyncrc"'
-for x in "/etc/ssl/certs/ca-certificates.crt" "/etc/pki/tls/certs/ca-bundle.crt" "/etc/ssl/ca-bundle.pem" "/etc/pki/tls/cacert.pem" "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem" "/etc/ssl/cert.pem" "/usr/local/share/ca-certificates/"
-do
+for x in "/etc/ssl/certs/ca-certificates.crt" "/etc/pki/tls/certs/ca-bundle.crt" "/etc/ssl/ca-bundle.pem" "/etc/pki/tls/cacert.pem" "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem" "/etc/ssl/cert.pem" "/usr/local/share/ca-certificates/"; do
[ -f "$x" ] && sslcert="$x" && break
done || { echo "CA Certificate not found. Please install one or link it to /etc/ssl/certs/ca-certificates.crt" && exit 1 ;}
+checkbasics() { command -V gpg >/dev/null 2>&1 && GPG="gpg" || GPG="gpg2"
+ PASSWORD_STORE_DIR="${PASSWORD_STORE_DIR:-$HOME/.password-store}"
+ [ -r "$PASSWORD_STORE_DIR/.gpg-id" ] &&
+ "$GPG" --list-secret-keys "$(cat "$PASSWORD_STORE_DIR/.gpg-id")" >/dev/null 2>&1 || {
+ echo "First run \`pass init <yourgpgemail>\` to set up a password archive."
+ echo "(If you don't already have a GPG key pair, first run \`$GPG --fullgenkey\`.)"
+ exit 1 ;} ;}
+
getaccounts() { accounts="$(find -L "$accdir" -type f | grep -o "[0-9]-.*.muttrc" | sed "s/-/: /;s/\.muttrc$//" | sort -n)" ;}
list() { getaccounts && [ -n "$accounts" ] && echo "$accounts" ;}
getprofiles() { \
unset msmtp_header msmtp_profile mutt_profile mbsync_profile
- [ "$iport" = "1143" ] && imapssl="None"
+ case "$iport" in
+ 1143) imapssl=None ;;
+ 143) imapssl=STARTTLS ;;
+ esac
msmtp_header="defaults
auth on
tls on
@@ -296,34 +298,7 @@ setact() { if [ -n "${action+x}" ] && [ "$action" != "$1" ]; then
action="$1"
fi; }
-while getopts "fplhodTYD:y:i:I:s:S:u:a:n:x:m:t:" o; do case "${o}" in
- l) setact list || exit 1 ;;
- d) setact delete || exit 1 ;;
- D) setact delete || exit 1 ; fulladdr="$OPTARG" ;;
- y) setact sync || exit 1 ; fulladdr="$OPTARG" ;;
- Y) setact sync || exit 1 ;;
- a) setact add || exit 1 ; fulladdr="$OPTARG" ;;
- i) setact add || exit 1 ; imap="$OPTARG" ;;
- I) setact add || exit 1 ; iport="$OPTARG" ;;
- s) setact add || exit 1 ; smtp="$OPTARG" ;;
- S) setact add || exit 1 ; sport="$OPTARG" ;;
- u) setact add || exit 1 ; login="$OPTARG" ;;
- n) setact add || exit 1 ; realname="$OPTARG" ;;
- m) setact add || exit 1 ; maxmes="$OPTARG" ;;
- o) setact add || exit 1 ; online=True ;;
- f) setact add || exit 1 ; force=True ;;
- x) setact add || exit 1 ; password="$OPTARG" ;;
- t) setact toggle || exit 1 ; cronmin="$OPTARG" ;;
- T) setact toggle || exit 1 ;;
- p) echo "NOTE: Protonmail users must install and configure Protonmail Bridge first for the first sync to work."
- imap="127.0.0.1"
- iport="1143"
- smtp="127.0.0.1"
- sport="1025"
- tlsline="tls_fingerprint $(msmtp --serverinfo --host=$smtp --port=$sport --tls --tls-certcheck=off | awk '/SHA256:/ {print $2}')"
- setact add || exit 1
- ;;
- *) cat << EOF
+mwinfo() { cat << EOF
mw: mutt-wizard, auto-configure email accounts for mutt
including downloadable mail with \`isync\`.
@@ -354,16 +329,43 @@ NOTE: Once at least one account is added, you can run
To change an account's password, run \`pass edit ${pass_prefix}your@email.com\`.
EOF
-exit 1
-;;
-esac done
+}
-! command -v mbsync >/dev/null && [ -z "${force+x}" ] && echo "\`mbsync (isync package)\` must be installed." && exit 1
+while getopts "fplhodTYD:y:i:I:s:S:u:a:n:x:m:t:" o; do case "${o}" in
+ l) setact list || exit 1 ;;
+ d) setact delete || exit 1 ;;
+ D) setact delete || exit 1 ; fulladdr="$OPTARG" ;;
+ y) setact sync || exit 1 ; fulladdr="$OPTARG" ;;
+ Y) setact sync || exit 1 ;;
+ a) setact add || exit 1 ; fulladdr="$OPTARG" ;;
+ i) setact add || exit 1 ; imap="$OPTARG" ;;
+ I) setact add || exit 1 ; iport="$OPTARG" ;;
+ s) setact add || exit 1 ; smtp="$OPTARG" ;;
+ S) setact add || exit 1 ; sport="$OPTARG" ;;
+ u) setact add || exit 1 ; login="$OPTARG" ;;
+ n) setact add || exit 1 ; realname="$OPTARG" ;;
+ m) setact add || exit 1 ; maxmes="$OPTARG" ;;
+ o) setact add || exit 1 ; online=True ;;
+ f) setact add || exit 1 ; force=True ;;
+ x) setact add || exit 1 ; password="$OPTARG" ;;
+ t) setact toggle || exit 1 ; cronmin="$OPTARG" ;;
+ T) setact toggle || exit 1 ;;
+ p) echo "NOTE: Protonmail users must install and configure Protonmail Bridge first for the first sync to work."
+ imap="127.0.0.1"
+ iport="1143"
+ smtp="127.0.0.1"
+ sport="1025"
+ tlsline="tls_fingerprint $(msmtp --serverinfo --host=$smtp --port=$sport --tls --tls-certcheck=off | awk '/SHA256:/ {print $2}')"
+ setact add || exit 1
+ ;;
+ *) mwinfo; exit 1 ;;
+esac done
case "$action" in
list) list ;;
- add) askinfo && getprofiles && writeinfo && getboxes && finalize || { delete ; exit 1 ;} ;;
+ add) checkbasics && askinfo && getprofiles && writeinfo && getboxes && finalize || { delete ; exit 1 ;} ;;
delete) delete ;;
sync) mailsync $fulladdr ;;
toggle) togglecron ;;
+ *) mwinfo; exit 1 ;;
esac