yourcloud/config/kanidm/basic-setup.sh

92 lines
2.6 KiB
Bash
Raw Permalink Normal View History

2024-08-07 16:21:51 -05:00
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p ripgrep oath-toolkit
set -euo pipefail
2024-08-07 16:21:51 -05:00
FAKE_PASSWORD="f0rTkN0x1s_cool"
function kdrun {
podman exec -it kanidm "$@"
}
echo "Resetting kanidm admin credentials"
admin_password="$(kdrun kanidmd recover-account admin | rg '.*new_password: "([^"]+)"' -r '$1')"
idm_password="$(kdrun kanidmd recover-account idm_admin | rg '.*new_password: "([^"]+)"' -r '$1')"
echo "admin password: $admin_password"
echo "idm_admin password: $idm_password"
# start a kanidm client in the background for an hour
podman kill kanidm-client &>/dev/null || true
2024-08-07 16:21:51 -05:00
sleep 0.2
podman run -itd --rm \
--network host \
--name kanidm-client \
-v "$PWD/client.toml:/root/.config/kanidm:ro" \
2024-08-08 16:19:39 -05:00
docker.io/kanidm/tools:1.3.1 \
2024-08-07 16:21:51 -05:00
bash -c 'sleep 3600' \
>/dev/null 2>&1
sleep 0.2
function krun {
podman exec -it kanidm-client "$@"
}
# setup sessions for both admin accounts
echo "$admin_password" | krun kanidm login -D admin
echo "$idm_password" | krun kanidm login -D idm_admin
function create_user {
username="$1"; shift
echo "Creating person (user) '${username}'..."
krun kanidm person create "$username" "$username user" --name idm_admin
krun kanidm person update "$username" --legalname "$username Lastname" --mail "${username}@example.com" --name idm_admin
2024-08-08 16:21:46 -05:00
(
sleep 0.1
echo "pass"
2024-08-08 16:25:24 -05:00
sleep 0.2
2024-08-08 16:21:46 -05:00
echo "$FAKE_PASSWORD"
2024-08-08 16:25:24 -05:00
sleep 0.2
2024-08-08 16:21:46 -05:00
echo "$FAKE_PASSWORD"
2024-08-08 16:25:24 -05:00
sleep 0.2
# echo "totp"
# sleep 0.1
# echo "totpname"
# sleep 0.25
# totp_uri="$(rg 'TOTP URI: (.+)' /tmp/create-user-log.txt -r '$1')"
# totp_secret="$(echo "$totp_uri" | rg '.*?secret=([^&]+).*' -r '$1')"
# totp_code="$(oathtool --totp=SHA256 -b "$totp_secret")"
# echo "$totp_code"
# sleep 0.1
2024-08-08 16:21:46 -05:00
echo "commit"
sleep 0.1
echo "y"
2024-08-08 16:25:24 -05:00
# sleep 0.1
# echo "end"
) | krun kanidm person credential update "$username" --name idm_admin
2024-08-07 16:21:51 -05:00
}
# setup loose policies for testing
krun kanidm group account-policy credential-type-minimum idm_all_persons any --name idm_admin
2024-08-07 16:21:51 -05:00
# some groups
app="yourcloud"
adm_group="${app}--admins"
krun kanidm group create "$adm_group" --name idm_admin
# create our OAuth 2 application
krun kanidm system oauth2 create "$app" "Yourcloud" "http://localhost:3000" --name idm_admin
2024-08-08 16:25:24 -05:00
krun kanidm system oauth2 update-scope-map "$app" "$adm_group" admin openid email read write --name idm_admin
2024-08-07 16:21:51 -05:00
# TODO: expired/disabled users?
2024-08-08 16:25:24 -05:00
for u in alice bob user1 user2 user3; do
create_user "$u"
done
2024-08-07 16:21:51 -05:00
for u in gilfoyle dinesh; do
create_user "$u"
done
# add users to groups
2024-08-08 16:25:24 -05:00
krun kanidm group add-members "$adm_group" gilfoyle --name idm_admin
krun kanidm group add-members "$adm_group" dinesh --name idm_admin