clone

a personal forge on plain git: static pages, stacked-diff reviews, signed local ci, repo sites and releases

main
forge / test / scenarios / identity-commands.sh
identity-commands.sh 2.1K
1# The ssh commands for web sign-in: passkey prints a fresh one-time link2# each time, under FORGE_BASE_URL, whose code identity.db keeps only as a3# hash; passkeys and sessions list what there is, and say so when nothing4# matches what you asked to remove. help lists them all.5. "$(dirname "$0")/../lib.sh"6user dami7export FORGE_BASE_URL=https://forge.test8db=$FORGE_ROOT/.forge/identity.db9exists "$db"1011ok ssh_as dami passkey work laptop12has "$T_LOG" '^ https://forge\.test/login/#enroll=[A-Za-z0-9_-]{24}$'13has "$T_LOG" 'within 10 minutes'14has "$T_LOG" 'it works once'15one=$(sed -n 's/^ .*#enroll=//p' "$T_LOG")16ok ssh_as dami passkey17two=$(sed -n 's/^ .*#enroll=//p' "$T_LOG")18[ "$one" != "$two" ] || fail "two links with the same code"19for c in "$one" "$two"; do20 if grep -aqF "$c" "$db" "$db-wal" 2>/dev/null; then fail "an enrollment code is in identity.db as it is"; fi21done22# The name given goes with the link.23eq "$(node -e '24const { DatabaseSync } = require("node:sqlite");25console.log(new DatabaseSync(process.argv[1]).prepare("SELECT name FROM enrollments ORDER BY created, name DESC").all().map((r) => r.name).join(","))' "$db" 2>/dev/null)" "work laptop,"2627ok ssh_as dami passkeys28has "$T_LOG" '^no passkeys; ssh git@forge.test passkey adds one$'29fails_with 'no passkey 1234abcd' ssh_as dami passkeys rm 1234abcd30fails_with 'usage: passkeys' ssh_as dami passkeys rm31ok ssh_as dami sessions32eq "$(output)" "no sessions"33fails_with 'no session 1234abcd' ssh_as dami sessions rm 1234abcd34ok ssh_as dami sessions --all35eq "$(output)" "signed out 0 sessions"36ok ssh_as dami sessions rm --all37fails_with 'usage: sessions' ssh_as dami sessions --all now38fails_with 'usage: sessions' ssh_as dami sessions rm39fails_with 'one line of at most 64' ssh_as dami passkey "$(printf '%070d' 0)"4041ok ssh_as dami help42for c in 'passkey \[name\]' 'passkeys \[rm <id>\]' 'sessions \[rm <id>\|--all\]' 'token \[--repo <owner>/<repo>\] \[--ttl 30d\] \[name\]' 'tokens \[rm <id>\]'; do43 has "$T_LOG" "^ $c "44done45for c in passkey passkeys sessions token tokens; do exists "$FORGE_ROOT/git-shell-commands/$c"; done