aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config/systemd/user/syncemail.service10
-rwxr-xr-xlocal/bin/annoyme17
-rwxr-xr-xlocal/sbin/annoyme-request50
-rwxr-xr-xlocal/sbin/syncemail36
4 files changed, 113 insertions, 0 deletions
diff --git a/config/systemd/user/syncemail.service b/config/systemd/user/syncemail.service
new file mode 100644
index 0000000..a44f383
--- /dev/null
+++ b/config/systemd/user/syncemail.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Email synchronization
+
+[Service]
+ExecStart=/home/cynerd/.local/sbin/syncemail
+KillSignal=SIGUSR2
+Restart=always
+
+[Install]
+WantedBy=multi-user.target
diff --git a/local/bin/annoyme b/local/bin/annoyme
new file mode 100755
index 0000000..99c6392
--- /dev/null
+++ b/local/bin/annoyme
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+DOT_ANNOYME=~/.annoyme
+
+for NAME in `ls | grep -E '.pid$' | sed 's/\.pid$//'`; do
+ echo -e "\033[0;31m$NAME:\033[0m" `cat "$DOT_ANNOYME/$NAME.desc"`
+ echo -ne "\033[0;1m Y/n: \033[0;0m"
+ read
+ if [[ $REPLY =~ ^[Yy]?$ ]]; then
+ if $DOT_ANNOYME/$NAME.script > "$DOT_ANNOYME/$NAME.out"; then
+ kill -SIGUSR1 `cat $NAME.pid`
+ else
+ kill -SIGUSR2 `cat $NAME.pid`
+ fi
+ fi
+ echo
+done
diff --git a/local/sbin/annoyme-request b/local/sbin/annoyme-request
new file mode 100755
index 0000000..28a9864
--- /dev/null
+++ b/local/sbin/annoyme-request
@@ -0,0 +1,50 @@
+#!/bin/bash
+
+DOT_ANNOYME=~/.annoyme
+
+NAME=$1
+EC=2
+
+onexit() {
+ rm -f "$DOT_ANNOYME/$NAME.script"
+ rm -f "$DOT_ANNOYME/$NAME.pid"
+ rm -f "$DOT_ANNOYME/$NAME.desc"
+ rm -f "$DOT_ANNOYME/$NAME.out"
+ kill $SLEEPID 2>/dev/null
+ exit $EC
+}
+trap onexit EXIT INT QUIT TERM ABRT
+
+mkdir -p $DOT_ANNOYME
+
+echo "#!/bin/bash" > "$DOT_ANNOYME/$NAME.script"
+while read -r LINE; do
+ echo "$LINE" >> "$DOT_ANNOYME/$NAME.script"
+done
+chmod +x "$DOT_ANNOYME/$NAME.script"
+echo "$$" > "$DOT_ANNOYME/$NAME.pid"
+echo "$2" > "$DOT_ANNOYME/$NAME.desc"
+
+onsuccess() {
+ echo "User intervention successful." 1>&2
+ cat "$DOT_ANNOYME/$NAME.out"
+ EC=0
+ exit
+}
+
+onfailure() {
+ echo "User intervention failed." 1>&2
+ EC=1
+ exit
+}
+
+trap onsuccess SIGUSR1
+trap onfailure SIGUSR2
+
+echo "Waiting for user intervention using annoyme" 1>&2
+notify-send -a "$NAME" "$NAME: User intervention required" "$2"
+sleep 3h &
+SLEEPID=$!
+wait $SLEEPID
+echo "User intervention timed out." 1>&2
+notify-send -a "$NAME" "$NAME: User intervention request timed out."
diff --git a/local/sbin/syncemail b/local/sbin/syncemail
new file mode 100755
index 0000000..95deb7e
--- /dev/null
+++ b/local/sbin/syncemail
@@ -0,0 +1,36 @@
+#!/usr/bin/python2
+# This starts offlineimap, but first it requests passwords from pass by user
+# notification launching script at front.
+import os
+import sys
+import subprocess
+from offlineimap import OfflineImap
+
+frontscript = """
+echo "Asking for gpg password to access pass" 1>&2
+pass mail/cynerd@email.cz
+echo "All done" 1>&2
+"""
+annoyme = [
+ os.path.expanduser("~/.local/sbin/annoyme-request"),
+ "syncemail",
+ "Imap email synchronization service password request."
+ ]
+
+anproc = subprocess.Popen(annoyme, stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE)
+anproc.stdin.write(frontscript)
+anproc.stdin.close()
+output = anproc.stdout.read().splitlines()
+excode = anproc.wait()
+
+if excode != 0:
+ print("Authentication failed. Please start emailsync again")
+ sys.exit(1)
+print(output)
+
+sys.argv.append('-k')
+sys.argv.append('Repository_email-remote:remotepass=' + output[0])
+
+
+OfflineImap().run()