58 lines
1.7 KiB
Bash
Executable File
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"
|