about summary refs log tree commit diff stats
path: root/scripts/mk_key.sh
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-05-12 18:40:40 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-05-12 18:40:40 +0200
commit41345c6109c004d6a04beb56f783eb017d04552a (patch)
tree549e80a59b6311a223374eca28e9aeaa8fc6d06e /scripts/mk_key.sh
downloadpgp-wkd-41345c6109c004d6a04beb56f783eb017d04552a.zip
chore: Initial commit
Diffstat (limited to 'scripts/mk_key.sh')
-rwxr-xr-xscripts/mk_key.sh74
1 files changed, 74 insertions, 0 deletions
diff --git a/scripts/mk_key.sh b/scripts/mk_key.sh
new file mode 100755
index 0000000..2c98cc8
--- /dev/null
+++ b/scripts/mk_key.sh
@@ -0,0 +1,74 @@
+#!/usr/bin/env sh
+
+die() {
+    echo "$@";
+    exit 1;
+}
+
+help() {
+    cat << EOF
+A helper script to add an gpg key to the wkd.
+
+USAGE:
+    mk_key KEY_ID KEY_EMAIL_DOMAIN KEY_HASH
+
+OPTIONS:
+    --help | -h
+                    Display this help and exit.
+ARGUMENTS:
+    KEY_ID := [[ gpg --list-keys --with-colons | awk -F: '/^uid:/ { print \$10 }' ]]
+                    The key to use, as specified by the key id.
+
+    KEY_EMAIL_DOMAIN
+                    The email domain of this key. For example 'key@example.org' would
+                    have an KEY_EMAIL_DOMAIN of 'example.org'.
+
+    KEY_HASH
+                    This is the hashed name of the key as specified in the WKD spec.
+                    Get this by running: 'gpg --with-wkd-hash --list-keys <KEY_ID>'.
+EOF
+}
+
+add() {
+    key_id="$1";
+    key_email="$2";
+    key_hash="$3";
+
+    cd "$(git rev-parse --show-toplevel)" || die "No source dir!"
+
+    dir="./src/.well-known/openpgpkey/$key_email/hu"
+
+    full_key_id="$(gpg --list-keys --with-colons "$key_id" | awk -F: '/^uid:/ { print $10 }' | tail -n 1)"
+
+    mkdir --parents "$dir"
+    gpg --no-armor --export "$key_id" > "$dir/$key_hash" &&
+
+    printf "%s%s%s%s\n" '`' "$dir/$key_hash" '`' " -> $full_key_id" >> stored_keys.md &&
+
+    echo "Key export done!";
+}
+
+for arg in "$@"; do
+    case "$arg" in
+        "--help" | "-h")
+            help;
+            exit 0;
+            ;;
+    esac
+done
+
+
+key_id="$1";
+key_email="$2";
+key_hash="$3";
+shift 3
+
+[ -z "$key_id" ] && die "No KEY_ID specified, see '--help'!"
+[ -z "$key_email" ] && die "No KEY_EMAIL_DOMAIN specified, see '--help'!"
+[ -z "$key_hash" ] && die "No KEY_HASH specified, see '--help'!"
+
+[ -n "$*" ] && die "The arguments '$*' are not recognized; see '--help' for a list!"
+
+add "$key_id" "$key_email" "$key_hash"
+
+# vim: ft=sh