yourcloud/config/kanidm/basic-setup.sh

91 lines
2.6 KiB
Bash
Raw 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" \
docker.io/kanidm/tools \
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 delete "$username" --name idm_admin
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
# TODO: this doesn't seem to work? can't seem to commit changes
(
sleep 0.1
echo "pass"
sleep 0.1
echo "$FAKE_PASSWORD"
sleep 0.1
echo "$FAKE_PASSWORD"
sleep 0.1
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
echo "commit"
sleep 0.1
echo "y"
sleep 0.1
echo "end"
) | krun kanidm person credential update "$username" --name idm_admin | tee /tmp/create-user-log.txt
}
# 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
krun kanidm system oauth2 update-scope-map "$app" "$adm_group" admin openid email read --name idm_admin
# TODO: expired/disabled users?
# for u in alice bob user1 user2 user3; do
# create_user "$u"
# done
for u in gilfoyle dinesh; do
create_user "$u"
done
# add users to groups
krun kanidm group add-members "$adm_group" gilfoyle --name idm_admin
krun kanidm group add-members "$adm_group" dinesh --name idm_admin