2026-10-03 15:24:08 +02:00
# Akkoma 3.20.1: our own image (images/akkoma: the OTP release, pinned by checksum) on the shared Postgres. Its config
# is generated on first start; the scenario's user is made with pleroma_ctl and signs in with the password grant.
AKKOMA_IMAGE = ${ AKKOMA_IMAGE :- localhost /pasture-akkoma: 3 .20.1 }
. " $here /peers/shared.sh"
akkoma_up() {
shared_postgres_up
podman image exists " $AKKOMA_IMAGE " || podman build -q -t " $AKKOMA_IMAGE " " $here /images/akkoma" >/dev/null
podman exec pasture-postgres sh -c "psql -U pasture -tc \"select 1 from pg_database where datname='akkoma'\" | grep -q 1 || createdb -U pasture akkoma"
podman exec pasture-postgres psql -U pasture -d akkoma -qc 'create extension if not exists citext; create extension if not exists pg_trgm; create extension if not exists "uuid-ossp";' >/dev/null
mkdir -p " $here /.state/akkoma"
podman run -d --replace --name pasture-akkoma --network $net \
-v " $here /.state/akkoma:/etc/akkoma:z" -v " $ca :/pasture/ca:z,ro" " $AKKOMA_IMAGE " >/dev/null
for _ in $( seq 1 120) ; do
site akkoma.test -s -o /dev/null -w '%{http_code}' https://akkoma.test:6443/api/v1/instance 2>/dev/null | grep -q 200 && break
sleep 3
done
podman exec pasture-akkoma /opt/akkoma/bin/pleroma_ctl user new akuser akuser@akkoma.test --password Akkoma-Pasture-Pass-1 \
--name akuser --admin --assume-yes >/dev/null 2>& 1 || true
2026-10-06 12:07:49 +02:00
akkoma_token akuser > " $here /.state/akkoma.token" || true
echo "akkoma: https://akkoma.test:6443"
}
# akkoma_token <user>: an access token for one of the pasture's users (its password), through a new app and the password
# grant
akkoma_token() {
2026-10-03 15:24:08 +02:00
local app cid cs
app = $( site akkoma.test -s -X POST https://akkoma.test:6443/api/v1/apps -d 'client_name=pasture&redirect_uris=urn:ietf:wg:oauth:2.0:oob&scopes=read write follow push admin' )
cid = $( echo " $app " | python3 -c "import sys,json; print(json.load(sys.stdin)['client_id'])" 2>/dev/null)
cs = $( echo " $app " | python3 -c "import sys,json; print(json.load(sys.stdin)['client_secret'])" 2>/dev/null)
2026-10-06 12:07:49 +02:00
site akkoma.test -s -X POST https://akkoma.test:6443/oauth/token --data-urlencode grant_type = password --data-urlencode "username= $1 " \
2026-10-03 15:24:08 +02:00
--data-urlencode password = Akkoma-Pasture-Pass-1 --data-urlencode "client_id= $cid " --data-urlencode "client_secret= $cs " \
--data-urlencode 'scope=read write follow push admin' \
2026-10-06 12:07:49 +02:00
| python3 -c "import sys,json; print(json.load(sys.stdin)['access_token'])" 2>/dev/null
2026-10-03 15:24:08 +02:00
}