From d890e0ea21d3617601a1e87bf3e95858c47e0cff Mon Sep 17 00:00:00 2001 From: Luke Smith Date: Mon, 13 Feb 2023 18:06:10 -0500 Subject: [PATCH] continue revision --- bin/mw | 111 +++++++++++++++++++++------------------------ share/notmuch-temp | 14 ++++++ share/online-temp | 4 ++ 3 files changed, 70 insertions(+), 59 deletions(-) create mode 100644 share/notmuch-temp create mode 100644 share/online-temp diff --git a/bin/mw b/bin/mw index 58ec4f0..a5b1341 100755 --- a/bin/mw +++ b/bin/mw @@ -16,6 +16,17 @@ mpoptemp="$muttshare/mpop-temp" mbsynctemp="$muttshare/mbsync-temp" mutttemp="$muttshare/mutt-temp" msmtptemp="$muttshare/msmtp-temp" +onlinetemp="$muttshare/online-temp" +notmuchtemp="$muttshare/notmuch-temp" +# With the use of templates, it's impossible to use parameter substitution. +# Therefore, some default variables that might be otherwise overwritten are set +# here. +folder="$maildir/$fulladdr" +iport="993" +sport="465" +imapssl="IMAPS" +tlsline="tls_starttls off" +maxmes="0" alias mbsync='mbsync -c "$mbsyncrc"' @@ -50,9 +61,9 @@ list() { getaccounts && [ -n "$accounts" ] && echo "$accounts" || exit 1 ;} prepmsmtp() { mkdir -p "${msmtprc%/*}" "${msmtplog%/*}" ; ln -s "$msmtprc" "$HOME/.msmtprc" 2>/dev/null ; envsubst < "$msmtptemp" >> "$msmtprc" ;} -prepmbsync() { folder="$maildir/$fulladdr" ; maxmes="${maxmes:-0}" ; mkdir -p "${mbsyncrc%/*}" ; envsubst < "$mbsynctemp" >> "$mbsyncrc" ;} +prepmbsync() { mkdir -p "${mbsyncrc%/*}" ; [ -f "$mbsyncrc" ] && echo >> "$mbsyncrc" ; envsubst < "$mbsynctemp" >> "$mbsyncrc" ;} -prepmpop() { folder="$maildir/$fulladdr" ; mkdir -p "${mpoprc%/*}" ; envsubst < "$mpoptemp" >> "$mpoprc" ;} +prepmpop() { mkdir -p "${mpoprc%/*}" ; envsubst < "$mpoptemp" >> "$mpoprc" ;} prepmutt() { mkdir -p "${muttrc%/*}" "$accdir" envsubst < "$mutttemp" > "$accdir/$fulladdr.muttrc" @@ -63,25 +74,22 @@ prepmutt() { mkdir -p "${muttrc%/*}" "$accdir" } getprofiles() { \ - case "$iport" in - 1143) imapssl=None ;; - 143) imapssl=STARTTLS ;; - "") iport="993"; imapssl=IMAPS ;; - *) imapssl=IMAPS ;; - esac case "$type" in - online) folder="imaps://$login@$imap:$iport" -extra="set imap_user = \"$login\" -set imap_pass = \"\`pass $passprefix$fulladdr\`\" -set ssl_starttls = yes -set ssl_force_tls = yes" + online) + folder="imaps://$login@$imap:$iport" + extra="$(envsubst < "$onlinetemp")" ;; pop) prepmpop ;; - *) prepmbsync ;; + *) + case "$iport" in + 1143) imapssl=None ;; + 143) imapssl=STARTTLS ;; + esac + prepmbsync ;; esac prepmsmtp prepmutt - prepnotmuch # Create a notmuch config file if not present already. + prepnotmuch } parsedomains(){ serverinfo="$(grep "^${fulladdr#*@}" "$muttshare/domains.csv" 2>/dev/null)" @@ -118,10 +126,6 @@ delete() { if [ -z "${fulladdr+x}" ]; then sed -ibu "/account $fulladdr$/,/^\(\s*$\|account\)/d" "$mpoprc" 2>/dev/null; rm -f "$mpoprc"bu pass rm -f "$passprefix$fulladdr" >/dev/null 2>&1 [ -n "${purge+x}" ] && rm -rf "${maildir:?}/${fulladdr:?}" - - for file in "$msmtprc" "$mbsyncrc" "$mpoprc"; do - sed -ibu 'N;/^\n$/D;P;D;' "$file" 2>/dev/null; rm -f "$file"bu - done } askinfo() { \ @@ -140,8 +144,6 @@ askinfo() { \ read -r smtp case $sport in 587) tlsline="# tls_starttls" ;; - "") tlsline="tls_starttls off"; sport="465" ;; - *) tlsline="tls_starttls off" ;; esac [ -z "$realname" ] && realname="${fulladdr%%@*}" [ -z "$passprefix" ] && passprefix="" @@ -156,6 +158,10 @@ askinfo() { \ createpass() { echo "$password" > "$PASSWORD_STORE_DIR/$passprefix$fulladdr" "$GPG" -qe $(printf -- " -r %s" $(cat "$PASSWORD_STORE_DIR/.gpg-id")) "$PASSWORD_STORE_DIR/$passprefix$fulladdr" + case "$(uname)" in + Darwin|*BSD) rm -P "$PASSWORD_STORE_DIR/$passprefix$fulladdr" ;; + *) shred -u "$PASSWORD_STORE_DIR/$passprefix$fulladdr" ;; + esac rm -f "$PASSWORD_STORE_DIR/$passprefix$fulladdr" ;} errorexit() { @@ -200,20 +206,7 @@ finalize() { echo "$toappend" >> "$accdir/$fulladdr.muttrc" prepnotmuch() { \ [ -z "$NOTMUCH_CONFIG" ] && NOTMUCH_CONFIG="$HOME/.notmuch-config" [ -f "$NOTMUCH_CONFIG" ] && return 0 - echo "[database] -path=$maildir -[user] -name=$realname -primary_email=$fulladdr -[new] -tags=unread;inbox; -ignore=.mbsyncstate;.uidvalidity -[search] -exclude_tags=deleted;spam; -[maildir] -synchronize_flags=true -[crypto] -gpg_path=$GPG" > "$NOTMUCH_CONFIG" ;} + envsubst < "$notmuchtemp" > "$NOTMUCH_CONFIG" ;} togglecron() { cron="$(mktemp)" crontab -l > "$cron" @@ -229,7 +222,7 @@ togglecron() { cron="$(mktemp)" setact() { if [ -n "${action+x}" ] && [ "$action" != "$1" ]; then echo "Running $1 with $action..." echo "Incompatible options given. Only one action may be specified per run." - return 1 + exit 1 else action="$1" fi; } @@ -294,29 +287,29 @@ reorder() { } while getopts "rfpXlhodTYD:y:i:I:s:S:u:a:n:P:x:m:t:" o; do case "${o}" in - l) setact list || exit 1 ;; - r) setact reorder || 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" ;; - P) setact add || exit 1 ; passprefix="$OPTARG" ;; - m) setact add || exit 1 ; maxmes="$OPTARG" ;; - o) setact add || exit 1 ; type="online" ;; - p) setact add || exit 1 ; type="pop"; protocol="pop3s" ; iport="${iport:-995}" ;; - f) setact add || exit 1 ; force=True ;; - x) setact add || exit 1 ; password="$OPTARG" ;; - X) setact delete || exit 1 ; purge=True ;; - t) setact toggle || exit 1 ; cronmin="$OPTARG" ;; - T) setact toggle || exit 1 ;; - *) mwinfo; exit 1 ;; + l) setact list ;; + r) setact reorder1 ;; + d) setact delete ;; + D) setact delete ; fulladdr="$OPTARG" ;; + y) setact sync ; fulladdr="$OPTARG" ;; + Y) setact sync ;; + a) setact add ; fulladdr="$OPTARG" ;; + i) setact add ; imap="$OPTARG" ;; + I) setact add ; iport="$OPTARG" ;; + s) setact add ; smtp="$OPTARG" ;; + S) setact add ; sport="$OPTARG" ;; + u) setact add ; login="$OPTARG" ;; + n) setact add ; realname="$OPTARG" ;; + P) setact add ; passprefix="$OPTARG" ;; + m) setact add ; maxmes="$OPTARG" ;; + o) setact add ; type="online" ;; + p) setact add ; type="pop"; protocol="pop3s" ; iport="${iport:-995}" ;; + f) setact add ; force=True ;; + x) setact add ; password="$OPTARG" ;; + X) setact delete ; purge=True ;; + t) setact toggle ; cronmin="$OPTARG" ;; + T) setact toggle ;; + *) mwinfo ;; esac done case "$action" in diff --git a/share/notmuch-temp b/share/notmuch-temp new file mode 100644 index 0000000..c91eef9 --- /dev/null +++ b/share/notmuch-temp @@ -0,0 +1,14 @@ +[database] +path=$maildir +[user] +name=$realname +primary_email=$fulladdr +[new] +tags=unread;inbox; +ignore=.mbsyncstate;.uidvalidity +[search] +exclude_tags=deleted;spam; +[maildir] +synchronize_flags=true +[crypto] +gpg_path=$GPG diff --git a/share/online-temp b/share/online-temp new file mode 100644 index 0000000..5fd385c --- /dev/null +++ b/share/online-temp @@ -0,0 +1,4 @@ +set imap_user = "$login" +set imap_pass = "`pass $passprefix$fulladdr`" +set ssl_starttls = yes +set ssl_force_tls = yes