@fair Here's a script to create a user and invite them.
#!/bin/bash
set -eu
# fill these in
cloudron=my.domain.com
token=a803859d40c9ec4e111ccb111111111111111111111
# the user to add and invite
username=test
email=test@cloudron.io
displayName="Test User"
function urlencode() {
# https://unix.stackexchange.com/questions/159253/decoding-url-encoding-percent-encoding
python2.7 -c "import sys, urllib as ul; print(ul.quote_plus(sys.argv[1]))" $1
}
# add user
if ! out=$(curl -sS --fail -H 'Content-Type: application/json' -X POST -d "{ \"email\": \"${email}\", \"username\": \"${username}\", \"displayName\": \"${displayName}\" }" https://${cloudron}/api/v1/users?access_token=${token}); then
echo "Failed to add user"
exit 1
fi
userid=$(echo ${out} | jq -r .id)
echo "User added: ${userid}"
# create an invite. this does not send the email. if you like you can share the invite link using other channels
if ! out=$(curl -sS --fail -H 'Content-Type: application/json' -X POST https://${cloudron}/api/v1/users/${userid}/create_invite?access_token=${token}); then
echo "Failed to create invitation"
exit 1
fi
resetToken=$(echo ${out} | jq -r .resetToken)
encodedEmail=$(urlencode "${email}")
encodedDisplayName=$(urlencode "${displayName}")
echo "reset token: ${resetToken} . URL for user to sign up: https://${cloudron}/setupaccount.html?resetToken=${resetToken}&email=${encodedEmail}&displayName=${encodedDisplayName}&username=${username}&profileLocked=true"
# tell cloudron to send the invite by mail. invite links are only valid for a day from when they were created
if ! out=$(curl -sS --fail -H 'Content-Type: application/json' -X POST https://${cloudron}/api/v1/users/${userid}/send_invite?access_token=${token}); then
echo "Failed to send invitation"
exit 1
fi
echo "Invitation sent"