rcpd/swat-codegen/codegen.sh

113 lines
3.5 KiB
Bash
Executable File

#!/bin/bash
loc=$(dirname $(readlink -f "$0"))
account_server_root_url=https://swataftermath.com:8443
code_server_root_url=https://swataftermath.com:9443/account
# TOKEN MANAGEMENT
function migrate
{
curl "$account_server_root_url/account/$1/activate-migrated" --json '{"currentPassword":"'"$3"'","emailAddress":"'"$2"'","newPassword":"'"$3"'"}'
curl "$account_server_root_url/account/$1/verify-email" --json '{"verificationCode":"'"$(cat)"'"}'
login "$1" "$3"
}
function login
{
[ -n "$2" ] || { echo "Please provide a username and password, in that order, when calling this"; exit; }
curl $account_server_root_url/login --json '{"username":"'"$1"'","password":"'"$2"'"}' > ~/.config/rcpd.cfg
}
function get_token
{
cat ~/.config/rcpd.cfg 2>/dev/null || { echo "Please login first" >&2; exit; }
}
# CORE API CALLS
function get
{
TOKE=`get_token`
curl -H "Authorization:Bearer $TOKE" $code_server_root_url/$1
}
function post
{
TOKE=`get_token`
curl -$3H "Authorization:Bearer $TOKE" $code_server_root_url/$1 --json "$2"
}
function delete_code
{
TOKE=`get_token`
curl -H "Authorization:Bearer $TOKE" $code_server_root_url/rank-code/$1 -X DELETE
}
# UTILS
function lookup
{
w=
matches=`grep -ic "${*:2}" $loc/$1`
if [ "$matches" -ne 1 ]; then
echo "$1 '${*:2}' is ambiguous (got $matches matches), trying whole-word match" >&2
# Attempt whole-word match and see if we get exactly one result (and then remember it has happened!!!)
w=w
word_matches=`grep -ic$w "${*:2}" $loc/$1`
if [ "$word_matches" -ne 1 ]; then echo "still ambiguous (got $word_matches matches)" >&2; return 1; fi
fi
read $1 garbage <<< "`grep -i$w "${*:2}" $loc/$1`"
}
# USER-FACING COMMANDS
function builds
{
filter='.[] | .rankCode+" "+.buildName'
if [ -n "$1" ]; then filter='.[] | select(.buildName=="'"$*"'")'; fi
get saved-builds | jq "$filter"
}
function save
{
if [ -n "$2" ]; then name=',"buildName":"'"${*:2}"'"'; fi
res=`post rank-code '{"rankCode":"'$1'"'"$name"'}' i`
created=`head -n 1 <<< "$res" | cut -d' ' -f2`
res=`tr -d '\r' <<< "$res" | awk -F '\r\n' 'BEGIN { a=1 } a==0 { print } $0=="" { a=0 }'`
jq <<< "$res"
if [ $created = 201 -a -z "$2" ]; then delete_code $1; fi # Don't bother storing any build that doesn't have a name if it didn't already exist. Assume it's just logging the results of a game.
}
function generate
{
# mfw I actually have to do work
IFS=/ read -a hero <<< "$*"
length=${#hero[*]}
if [ $length -eq 6 ]; then IFS=/ read class gun armour trait spec talent <<< "$*"
elif [ $length -eq 5 ]; then IFS=/ read class armour trait spec talent <<< "$*"
elif [ $length -eq 4 ]; then IFS=/ read class trait spec talent <<< "$*"; fi # Probably a borg or a wm.
if [ -z "$gun" ]; then
if [ "${class%wm}" != "$class" ]; then gun=${class%wm}; class=wm
elif [ "${class%mav}" != "$class" ]; then gun=${class%mav}; class=mav; fi
fi
res=0
lookup class "$class"
res=$((res+$?))
if [ -z "$gun" ]; then gun=$class; fi # Do this after qualifying class so I don't have to nest the full class table in the gun table.
lookup gun "$gun"
res=$((res+$?))
if [ -z "$armour" ]; then armour=$class; fi
lookup armour "$armour"
res=$((res+$?))
lookup trait "$trait"
res=$((res+$?))
lookup spec "$spec"
res=$((res+$?))
lookup talent "$talent"
res=$((res+$?))
if [ $res -gt 0 ]; then echo "Please correct above errors and try again"; exit; fi
echo $class $gun $armour $trait $spec $talent
post generate '{"swatClass":"'$class'","gun":"'$gun'","armor":"'$armour'","trait":"'$trait'","specialization":"'$spec'","talent":"'$talent'"}' | jq '.rankCode//.'
}
# DO SHIT
"$@"