feat(user/ots-git-gpg-wrapper*):Add OpenTimestamps v0.7.0 wrapper scripts
authorSteven Baltakatei Sandoval <baltakatei@gmail.com>
Tue, 14 Mar 2023 07:55:58 +0000 (07:55 +0000)
committerSteven Baltakatei Sandoval <baltakatei@gmail.com>
Tue, 14 Mar 2023 07:55:58 +0000 (07:55 +0000)
- Note: See
    https://github.com/opentimestamps/opentimestamps-client/blob/cd9ca65cbf7bd70db668cce47241f0feb8ea2186/ots-git-gpg-wrapper.sh

- Note: Wrapper scripts are meant to replace the default
  `ots-git-gpg-wrapper.sh` script included in ots v0.7.0:
    https://github.com/opentimestamps/opentimestamps-client/blob/cd9ca65cbf7bd70db668cce47241f0feb8ea2186/ots-git-gpg-wrapper.sh

user/ots-git-gpg-wrapper-wait.sh [new file with mode: 0755]
user/ots-git-gpg-wrapper.sh [new file with mode: 0755]

diff --git a/user/ots-git-gpg-wrapper-wait.sh b/user/ots-git-gpg-wrapper-wait.sh
new file mode 100755 (executable)
index 0000000..7fc0377
--- /dev/null
@@ -0,0 +1,66 @@
+#!/usr/bin/env bash
+# Desc: Wrapper for ots-git-gpg-wrapper with `--wait` option
+# Note: Required because git's gpg.program option doesn't allow you to set
+#   command line options.
+# Usage: git -c gpg.program=<path to ots-git-gpg-wrapper-wait.sh> commit -S
+# Input: file: $HOME/.local/share/ots/jsonrpc_url.txt  # first line is JSON RPC
+#          url for local bitcoin node containing login credentials. Example:
+#            http://user:35z8deadbeefhrdeadbeef5rk3@192.168.86.1:8332/
+# Depends: ots 0.7.0 (see https://github.com/opentimestamps/opentimestamps-client )
+# Version: 0.0.6
+# Ref/Attrib: [1] “How can I test if a particular alias is defined?”. https://unix.stackexchange.com/a/288513
+#             [2] “OpenTimestamps Git Integration”. (2016-10-13). https://github.com/opentimestamps/opentimestamps-client/blob/master/doc/git-integration.md
+
+declare -a args calendars
+
+# Specify default calendars
+calendars+=("https://finney.calendar.eternitywall.com");
+calendars+=("https://btc.calendar.catallaxy.com");
+calendars+=("https://alice.btc.calendar.opentimestamps.org");
+calendars+=("https://bob.btc.calendar.opentimestamps.org");
+
+# Check if gpg is alias. See [1].
+if alias gpg 2>/dev/null; then
+    ## Get gpg alias command
+    gpg_cmd="$(type gpg)"; # get raw alias definition
+    gpg_cmd="${gpg_cmd#*=\'}"; # trim chars before and including first apostrophe
+    gpg_cmd="${gpg_cmd%\'*}"; # trim chars after and including last apostrophe
+else
+    gpg_cmd="$(which gpg)";
+fi;
+
+# Assemble args array
+## Specify '--wait' option
+args+=("--wait");
+
+## Specify bitcoin node jsonrpc url if available
+path_jsonrpc_url="$HOME/.local/share/ots/jsonrpc_url.txt";
+if [[ -f "$path_jsonrpc_url" ]]; then
+    jsonrpc_url="$(head -n1 "$path_jsonrpc_url")";
+    args+=("--bitcoin-node");
+    args+=("$jsonrpc_url");
+fi;
+
+## Pick random calendar
+### Get calendars array size
+cal_size="${#calendars[@]}";
+cal_rnd_idx="$(shuf -i 1-"$cal_size" -n 1)";
+cal_rnd_idx="$((cal_rnd_idx - 1))"; # bash array is zero-indexed
+url_cal_random="${calendars[$cal_rnd_idx]}";
+args+=("--whitelist");
+args+=("$url_cal_random");
+args+=("--no-default-whitelist");
+
+## Specify '--gpg-program' option
+args+=("--gpg-program");
+args+=("$gpg_cmd");
+
+## Passthrough positional parameters
+args+=("--"); # mark end of ots-git-wrapper options
+for param in "$@"; do
+    args+=("$param");
+done;
+
+# Run command with args
+#   pseudocode: ots-git-gpg-wrapper --wait $jsonrpc_option $calendar_option --gpg-program $gpg_cmd -- "$@"
+ots-git-gpg-wrapper "${args[@]}";
diff --git a/user/ots-git-gpg-wrapper.sh b/user/ots-git-gpg-wrapper.sh
new file mode 100755 (executable)
index 0000000..b61ed95
--- /dev/null
@@ -0,0 +1,63 @@
+#!/usr/bin/env bash
+# Desc: Wrapper for ots-git-gpg-wrapper
+# Note: Required because git's gpg.program option doesn't allow you to set
+#   command line options.
+# Usage: git -c gpg.program=<path to ots-git-gpg-wrapper.sh> commit -S
+# Input: file: $HOME/.local/share/ots/jsonrpc_url.txt  # first line is JSON RPC
+#          url for local bitcoin node containing login credentials. Example:
+#            http://user:35z8deadbeefhrdeadbeef5rk3@192.168.86.1:8332/
+# Depends: ots 0.7.0 (see https://github.com/opentimestamps/opentimestamps-client )
+# Version: 0.0.6
+# Ref/Attrib: [1] “How can I test if a particular alias is defined?”. https://unix.stackexchange.com/a/288513
+#             [2] “OpenTimestamps Git Integration”. (2016-10-13). https://github.com/opentimestamps/opentimestamps-client/blob/master/doc/git-integration.md
+
+declare -a args calendars
+
+# Specify default calendars
+calendars+=("https://finney.calendar.eternitywall.com");
+calendars+=("https://btc.calendar.catallaxy.com");
+calendars+=("https://alice.btc.calendar.opentimestamps.org");
+calendars+=("https://bob.btc.calendar.opentimestamps.org");
+
+# Check if gpg is alias. See [1].
+if alias gpg 2>/dev/null; then
+    ## Get gpg alias command
+    gpg_cmd="$(type gpg)"; # get raw alias definition
+    gpg_cmd="${gpg_cmd#*=\'}"; # trim chars before and including first apostrophe
+    gpg_cmd="${gpg_cmd%\'*}"; # trim chars after and including last apostrophe
+else
+    gpg_cmd="$(which gpg)";
+fi;
+
+# Assemble args array
+## Specify bitcoin node jsonrpc url if available
+path_jsonrpc_url="$HOME/.local/share/ots/jsonrpc_url.txt";
+if [[ -f "$path_jsonrpc_url" ]]; then
+    jsonrpc_url="$(head -n1 "$path_jsonrpc_url")";
+    args+=("--bitcoin-node");
+    args+=("$jsonrpc_url");
+fi;
+
+## Pick random calendar
+### Get calendars array size
+cal_size="${#calendars[@]}";
+cal_rnd_idx="$(shuf -i 1-"$cal_size" -n 1)";
+cal_rnd_idx="$((cal_rnd_idx - 1))"; # bash array is zero-indexed
+url_cal_random="${calendars[$cal_rnd_idx]}";
+args+=("--no-default-whitelist");
+args+=("--whitelist");
+args+=("$url_cal_random");
+
+## Specify '--gpg-program' option
+args+=("--gpg-program");
+args+=("$gpg_cmd");
+
+## Passthrough positional parameters
+args+=("--"); # mark end of ots-git-wrapper options
+for param in "$@"; do
+    args+=("$param");
+done;
+
+# Run command with args
+#   pseudocode: ots-git-gpg-wrapper $jsonrpc_option $calendar_option --gpg-program $gpg_cmd -- "$@"
+ots-git-gpg-wrapper "${args[@]}";