Files
didactyl/swarm/admin_post.sh
T

58 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# Publish a kind 1 note as the admin, signed by the n_signer on the
# nostr_signer qube (role "main", path m/44'/1237'/0'/0/0).
#
# The admin key never leaves the signer qube.
#
# Usage:
# ./admin_post.sh "My queen, what is 2 + 2?"
# ./admin_post.sh --tag t=didactyl-swarm "some note"
set -euo pipefail
SIGNER_CLIENT="${SIGNER_CLIENT:-$HOME/lt/signer/target/release/signer-client}"
QREXEC="nostr_signer:qubes.SignerRpc"
RELAY="${SWARM_RELAY:-ws://127.0.0.1:7777}"
ROLE="main"
ROLE_PATH="m/44'/1237'/0'/0/0"
# Parse optional --tag k=v flags (repeatable), then the content.
TAGS_JSON="[]"
while [[ $# -gt 0 && "$1" == --tag ]]; do
kv="$2"; shift 2
key="${kv%%=*}"; val="${kv#*=}"
TAGS_JSON=$(TAGS_JSON="$TAGS_JSON" KEY="$key" VAL="$val" python3 -c "
import json, os
tags = json.loads(os.environ['TAGS_JSON'])
tags.append([os.environ['KEY'], os.environ['VAL']])
print(json.dumps(tags))
")
done
CONTENT="${1:-}"
if [[ -z "$CONTENT" ]]; then
echo "usage: $0 [--tag k=v ...] \"content\"" >&2
exit 2
fi
PUBKEY=$("$SIGNER_CLIENT" --qrexec "$QREXEC" --role "$ROLE" --path "$ROLE_PATH" get-public-key)
CREATED_AT=$(date +%s)
EVENT=$(CONTENT="$CONTENT" TAGS_JSON="$TAGS_JSON" PUBKEY="$PUBKEY" CREATED_AT="$CREATED_AT" python3 -c "
import json, os
print(json.dumps({
'kind': 1,
'content': os.environ['CONTENT'],
'tags': json.loads(os.environ['TAGS_JSON']),
'created_at': int(os.environ['CREATED_AT']),
'pubkey': os.environ['PUBKEY'],
}))
")
echo "signing as admin ($PUBKEY) via $QREXEC ..." >&2
SIGNED=$(echo "$EVENT" | "$SIGNER_CLIENT" --qrexec "$QREXEC" --role "$ROLE" --path "$ROLE_PATH" sign-event)
echo "publishing to $RELAY ..." >&2
echo "$SIGNED" | nak event "$RELAY" >/dev/null
echo "$SIGNED"