mirror of
https://git.mills.io/saltyim/saltyim.git
synced 2024-06-30 18:51:03 +00:00
Simplify into a single script
This commit is contained in:
parent
5a06155fdf
commit
79f6c66fdc
12
lookup.sh
12
lookup.sh
@ -1,12 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ $# -lt 1 ]; then
|
||||
printf "Usage: %s nick@domain\n" "$(basename "$0")"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
user="$1"
|
||||
nick="$(echo "$user" | awk -F@ '{ print $1 }')"
|
||||
domain="$(echo "$user" | awk -F@ '{ print $2 }')"
|
||||
|
||||
curl -qsSL "https://$domain/.well-known/salty/${nick}.json"
|
@ -1,8 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ -z "$SALTY_IDENTITY" ]; then
|
||||
echo "SALTY_IDENTITY not set"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
jq -r '.payload' | base64 -d | salty -i "$SALTY_IDENTITY" -d
|
@ -1,9 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
topic="$1"
|
||||
|
||||
if [ -z "$topic" ]; then
|
||||
topic="$USER"
|
||||
fi
|
||||
|
||||
msgbus sub "$topic" ./msgbus-salty-chat.sh
|
186
salty-chat
Executable file
186
salty-chat
Executable file
@ -0,0 +1,186 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
# Validate environment
|
||||
if ! command -v msgbus > /dev/null; then
|
||||
printf "missing msgbus command. Use: go install git.mills.io/prologic/msgbus/cmd/msgbus@master"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v salty > /dev/null; then
|
||||
printf "missing salty command. Use: go install go.mills.io/salty/cmd/salty@master"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v salty-keygen > /dev/null; then
|
||||
printf "missing salty-keygen command. Use: go install go.mills.io/salty/cmd/salty-keygen@master"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$SALTY_IDENTITY" ]; then
|
||||
export SALTY_IDENTITY="$HOME/.config/salty/$USER.key"
|
||||
fi
|
||||
|
||||
get_user () {
|
||||
user=$(grep user: "$SALTY_IDENTITY" | awk '{print $3}')
|
||||
if [ -z "$user" ]; then
|
||||
user="$USER"
|
||||
fi
|
||||
echo "$user"
|
||||
}
|
||||
|
||||
stream () {
|
||||
if [ -z "$SALTY_IDENTITY" ]; then
|
||||
echo "SALTY_IDENTITY not set"
|
||||
return 2
|
||||
fi
|
||||
|
||||
jq -r '.payload' | base64 -d | salty -i "$SALTY_IDENTITY" -d
|
||||
}
|
||||
|
||||
lookup () {
|
||||
if [ $# -lt 1 ]; then
|
||||
printf "lookup takes 1 arugment %d given\n" "$#"
|
||||
return 1
|
||||
fi
|
||||
|
||||
user="$1"
|
||||
nick="$(echo "$user" | awk -F@ '{ print $1 }')"
|
||||
domain="$(echo "$user" | awk -F@ '{ print $2 }')"
|
||||
|
||||
curl -qsSL "https://$domain/.well-known/salty/${nick}.json"
|
||||
}
|
||||
|
||||
readmsgs () {
|
||||
topic="$1"
|
||||
|
||||
if [ -z "$topic" ]; then
|
||||
topic=$(get_user)
|
||||
fi
|
||||
|
||||
export SALTY_IDENTITY="$HOME/.config/salty/$topic.key"
|
||||
if [ ! -f "$SALTY_IDENTITY" ]; then
|
||||
echo "identity file missing for user $topic" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
msgbus sub "$topic" "$0"
|
||||
}
|
||||
|
||||
sendmsg () {
|
||||
if [ $# -lt 2 ]; then
|
||||
printf "sendmsg requires 2 arguments %d provided" "$#"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ -z "$SALTY_IDENTITY" ]; then
|
||||
echo "SALTY_IDENTITY not set"
|
||||
return 2
|
||||
fi
|
||||
|
||||
user="$1"
|
||||
message="$2"
|
||||
|
||||
salty_json="$(mktemp /tmp/salty.XXXXXX)"
|
||||
|
||||
lookup "$user" > "$salty_json"
|
||||
|
||||
endpoint="$(jq -r '.endpoint' < "$salty_json")"
|
||||
topic="$(jq -r '.topic' < "$salty_json")"
|
||||
key="$(jq -r '.key' < "$salty_json")"
|
||||
|
||||
rm "$salty_json"
|
||||
|
||||
message="[$(date +%FT%TZ)] <$(get_user)> $message"
|
||||
|
||||
echo "$message" \
|
||||
| salty -i "$SALTY_IDENTITY" -r "$key" \
|
||||
| msgbus -u "$endpoint" pub "$topic"
|
||||
}
|
||||
|
||||
make_user () {
|
||||
mkdir -p "$HOME/.config/salty"
|
||||
|
||||
if [ $# -lt 1 ]; then
|
||||
user=$USER
|
||||
else
|
||||
user=$1
|
||||
fi
|
||||
|
||||
identity_file="$HOME/.config/salty/$user.key"
|
||||
|
||||
if [ -f "$identity_file" ]; then
|
||||
printf "user key already exists!"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Check for msgbus env.. probably can make it fallback to looking for a config file?
|
||||
if [ -z "$MSGBUS_URI" ]; then
|
||||
printf "missing MSGBUS_URI in environment"
|
||||
return 1
|
||||
fi
|
||||
|
||||
salty-keygen -o "$identity_file"
|
||||
echo "# user: $user" >> "$identity_file"
|
||||
|
||||
pubkey=$(grep key: "$identity_file" | awk '{print $4}')
|
||||
|
||||
cat <<- EOF
|
||||
Create this file in your webserver well-known folder. https://hostname.tld/.well-known/salty/$user.json
|
||||
|
||||
{
|
||||
"endpoint": "$MSGBUS_URI",
|
||||
"topic": "$user",
|
||||
"key": "$pubkey"
|
||||
}
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
show_help() {
|
||||
printf "Usage: %s [options] <command> [arguments]\n" "$(basename "$0")"
|
||||
printf "\n"
|
||||
printf "Options:\n"
|
||||
printf " -h/--help Show this help"
|
||||
printf "\n"
|
||||
printf "\n"
|
||||
printf "Commands:\n"
|
||||
printf " lookup nick@domain -- Lookup a user by nick@domain\n"
|
||||
printf " read -- Reads your messages\n"
|
||||
printf " send nick@domain message -- Sends a message to nick@domain\n"
|
||||
}
|
||||
|
||||
# check if streaming
|
||||
if [ ! -t 1 ]; then
|
||||
stream
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Show Help
|
||||
if [ $# -lt 1 ]; then
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
CMD=$1
|
||||
shift
|
||||
|
||||
case $CMD in
|
||||
-h|--help)
|
||||
show_help
|
||||
;;
|
||||
send)
|
||||
sendmsg "$@"
|
||||
;;
|
||||
read)
|
||||
readmsgs "$@"
|
||||
;;
|
||||
lookup)
|
||||
lookup "$@"
|
||||
;;
|
||||
make-user)
|
||||
make_user "$@"
|
||||
;;
|
||||
esac
|
28
sendmsg.sh
28
sendmsg.sh
@ -1,28 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ $# -lt 2 ]; then
|
||||
printf "Usage: %s nick@domain.tld <message>\n" "$(basename "$0")"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ -z "$SALTY_IDENTITY" ]; then
|
||||
echo "SALTY_IDENTITY not set"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
user="$1"
|
||||
message="$2"
|
||||
|
||||
salty_json="$(mktemp /tmp/salty.XXXXXX)"
|
||||
|
||||
./lookup.sh "$user" > "$salty_json"
|
||||
|
||||
endpoint="$(jq -r '.endpoint' < "$salty_json")"
|
||||
topic="$(jq -r '.topic' < "$salty_json")"
|
||||
key="$(jq -r '.key' < "$salty_json")"
|
||||
|
||||
message="[$(date -Im)] <$USER> $message"
|
||||
|
||||
echo "$message" \
|
||||
| salty -i "$SALTY_IDENTITY" -r "$key" \
|
||||
| msgbus -u "$endpoint" pub "$topic"
|
Loading…
Reference in New Issue
Block a user