bbs-telnet/executor.sh

69 lines
1.9 KiB
Bash
Executable File

#!/bin/sh
. ./config
toot(){
curl -s -X POST -F in_reply_to_id=$reply -F status="$1" -F visibility='unlisted' -H "Authorization: Bearer $instance_token" https://$instance/api/v1/statuses
}
timeline_home(){
curl -s -H "Authorization: Bearer $instance_token" "https://$instance/api/v1/timelines/home?limit=40&max_id=$1" |
jq -r '.[] |
if .reblog then
(["bump", .reblog.id, .reblog.account.acct] | join(" ")), .reblog.pleroma.content."text/plain", (.reblog.media_attachments[] | "attach", .url, .description // empty)
else [.id, .account.acct], .pleroma.content."text/plain", (.media_attachments[] | "attach", .url, .description // empty)
end | @text'
}
remote_ip=$SOCAT_PEERADDR
die(){
rm access_granted/"$remote_ip"
echo 'bye'
pkill -P $PPID
}
mkdir -p -m 700 access_granted
generator_session=$(zcat -f $system_dict | shuf -n 2 | tr -d "\n'")
randpadding=$(head -c 8 /dev/urandom | base64)
printf "$randpadding\t$generator_session\n"
cat - |
while read -r cmd mesg; do
if [ "$cmd" = "reg" ]; then
key=$(echo "$mesg" | cut -d' ' -f 2)
session=$(echo "$mesg" | cut -d' ' -f 1)
if [ "$session" = "$generator_session" ] && [ "$key" = "$pass_for_bbs" ]; then
touch access_granted/"$remote_ip"
echo hi $remote_ip
else
die
break
fi
fi
if [ ! -f access_granted/"$remote_ip" ]; then # Drop unregistred handshake
die
break
fi
# ---
case $cmd in
"post") toot "$mesg" | jq '.id, .errors' ;;
"reply")
reply_id=$(echo "$mesg" | cut -d' ' -f 1)
status=$(echo "$mesg" | cut -d' ' -f 2-)
reply=$reply_id toot "$status" | jq '.id, .errors'
reply=''
;;
"home") timeline_home "$mesg" ;;
"reg") printf 'bbs > '; continue ;;
"x")
case $mesg in
"http"*) w3m -dump -T text/html -cols 34 -o 'display_link_number=1' "$mesg" ;;
*) echo 'only http(s)' ;;
esac
;;
*) die; break ;;
esac
printf 'bbs > '
done
rm access_granted/"$remote_ip"
echo 'session was close'