aboutsummaryrefslogtreecommitdiffhomepage
path: root/bin
diff options
context:
space:
mode:
authorHsieh Chin Fan <pham@topo.tw>2024-12-03 17:33:13 +0800
committerHsieh Chin Fan <pham@topo.tw>2024-12-03 17:33:13 +0800
commitd1b57c1d68fa60a4a67c208f29b739ef0f20d5c5 (patch)
treecb7d281af1ae22efe00a2f10394d6680aab9dfbf /bin
parent152ecc894dd24cac6934a10f26f0fcce8445c2ea (diff)
Update
Diffstat (limited to 'bin')
-rw-r--r--bin/log/shellrc2
-rwxr-xr-xbin/mail/append_authorized_key.sh2
-rwxr-xr-xbin/mail/comment.sh41
3 files changed, 43 insertions, 2 deletions
diff --git a/bin/log/shellrc b/bin/log/shellrc
index a39e291..b3c95fc 100644
--- a/bin/log/shellrc
+++ b/bin/log/shellrc
@@ -1,7 +1,7 @@
1# about vimwiki 1# about vimwiki
2alias cdl='cd ~/log' 2alias cdl='cd ~/log'
3alias chw='tig -C ~/log' 3alias chw='tig -C ~/log'
4ww() { entry="${1:-plan.context}"; vim ~/log/${entry%%.md}.md; } 4ww() { entry="${1:-inbox}"; vim ~/log/${entry%%.md}.md; }
5wj() { echo "$@" >>~/log/buffer.md; } 5wj() { echo "$@" >>~/log/buffer.md; }
6wg() { grep -r "$@" --color --exclude-dir={logseq,.git,.obsidian} ~/log; } 6wg() { grep -r "$@" --color --exclude-dir={logseq,.git,.obsidian} ~/log; }
7wi() { cat ~/log/${1%%.md}.md; } 7wi() { cat ~/log/${1%%.md}.md; }
diff --git a/bin/mail/append_authorized_key.sh b/bin/mail/append_authorized_key.sh
index 950be90..3686959 100755
--- a/bin/mail/append_authorized_key.sh
+++ b/bin/mail/append_authorized_key.sh
@@ -13,7 +13,7 @@ MAIL="$(cat)"
13test -f ~/.config/passphase || exit 1 13test -f ~/.config/passphase || exit 1
14PASSPHASE="$(cat ~/.config/passphase)" 14PASSPHASE="$(cat ~/.config/passphase)"
15 15
16# Only execute the following script when header matched 16# Check passphase, or exit 0
17grep -qE "^Passphase: ${PASSPHASE}" <<<"$MAIL" || exit 0 17grep -qE "^Passphase: ${PASSPHASE}" <<<"$MAIL" || exit 0
18 18
19# Append comment and last line to ~/.ssh/authorized_keys 19# Append comment and last line to ~/.ssh/authorized_keys
diff --git a/bin/mail/comment.sh b/bin/mail/comment.sh
new file mode 100755
index 0000000..807bcb2
--- /dev/null
+++ b/bin/mail/comment.sh
@@ -0,0 +1,41 @@
1#! /bin/bash
2
3output_dir=${output_dir:-/srv/http}
4
5# Restore mail into variable
6MAIL="$(tr -d '\r')"
7headers="$(<<<"$MAIL" sed '/^$/ q')"
8contents="$(<<<"$MAIL" sed -n '/^$/,$ p' | sed '1d')"
9
10# enable execute last command in pipe under current shell
11shopt -s lastpipe; set +m;
12
13# get route (target page of comment) and id
14<<<"$MAIL" sed -En '/^To: comment+/ {s/^To: comment\+([^+]+)\+?(.*)@.*$/\1 \2/p; q}; /^$/q' \
15| read route id
16
17# sender want comment on some page, but find no route for this
18if [ $route = "" ]; then
19 echo 'rcpt "comment+<ROUTE>" not matched' >&2
20 exit 1
21fi
22
23output=$output_dir/${route#/}.comment
24exec 1>>$output
25
26# check mail includes multiple part
27<<<"$headers" grep '^Content-Type:.*mixed' >/dev/null
28if [ $? -eq 0 ]; then
29 boundary="$(<<<"$headers" sed -En 's/^Content-Type:.*boundary="(.*)".*$/\1/p')"
30 if [ $boundary = "" ]; then
31 echo 'cannot get boundary from mail header' >&2
32 exit 1
33 fi
34
35 # print content of first mail part
36 pattern="\\@^--${boundary}\$@"
37 <<<"$contents" sed -n "${pattern},${pattern} p" | sed -n "1,4d; ${pattern} q; p"
38else
39 # print content
40 <<<"$contents" sed '/^$/,$ p'
41fi