User import / Batch user creation
-
Hi,
Apologies in advance if I missed something here:
Up to not so long ago there was a possibility to import users in Cloudron (7.1 release notes make mention of it - There are also traces of it here and there in the forum. See here for example).
(User export seems to be missing too).
For the life of me, I cannot find this anywhere anymore. Thus I suspect it has been removed/disabled.
Is there any particular reasons for this?As an alternative, is there a known way to batch create users and generate invitation on the fly?
Many thanks,
-
I also posted my script somewhere
let me dig it up -
I also posted my script somewhere
let me dig it up@BrutalBirdie Oh that would be nice - thanks for this.
Thanks also @girish - This works for me also.
Just in passing:
- I initially had the same powershell annoyance as @prusaman here: https://forum.cloudron.io/post/62509 - Not sure what this is all about, but linux's just fine.
- the curl sample is missing an end quote here: https://docs.cloudron.io/api.html#tag/Users/operation/addUser
curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $CLOUDRON_TOKEN" "https://$CLOUDRON_DOMAIN/api/v1/users" --data '{"username":"Example","email":"example@example.com","password":"insertYourPassword","displayName":"Example", "role":"user","fallbackEmail":"fallback@test.com"}Thanks again
-
Found it

Here is the python3 code:import json from pprint import pprint import requests # Each user to programmatically create must be in this JSON format data = [ { "Surname": "Lastname", "Name": "Firstname", "Login": "MyAwesomeLoginName", "Mail": "missing@null.none", "Password": "HahaClearTextPasswordGoBrrrrrr" } ] # Replace `DOMAIN.TLD` with your Domain url="https://my.DOMAIN.TLD/api/v1" # Replace `<PLACEHOLDER-TOKEN>` with your Cloudron Token headers = { "Content-Type": "application/json", "Authorization": "Bearer <PLACEHOLDER-TOKEN>" } for value in data: values= { "email": value["Mail"], "username": value["Login"], "password": value["Password"], "displayName": f'{value["Name"]} {value["Surname"]}', "role": "user", "fallbackEmail": value["Mail"], } data = json.dumps(values) try: pprint(data) createUser = requests.post(f'{url}/users', data=data, headers=headers) userId = createUser.json()["id"] pprint(userId) inviteUser = requests.post(f'{url}/users/{userId}/send_invite_email', data=json.dumps({"email": value["Mail"]}), headers=headers) if createUser.status_code != 201 or inviteUser.status_code != 202: print(f"Error creating user or inviting user") print(f"Create user status code: {createUser.status_code}") print(f"InviteUser user status code: {inviteUser.status_code}") exit() except Exception as e: pprint(e)
hope this helps.
ps: I added the invite user email to the program for you since I did not have it in there. -
Found it

Here is the python3 code:import json from pprint import pprint import requests # Each user to programmatically create must be in this JSON format data = [ { "Surname": "Lastname", "Name": "Firstname", "Login": "MyAwesomeLoginName", "Mail": "missing@null.none", "Password": "HahaClearTextPasswordGoBrrrrrr" } ] # Replace `DOMAIN.TLD` with your Domain url="https://my.DOMAIN.TLD/api/v1" # Replace `<PLACEHOLDER-TOKEN>` with your Cloudron Token headers = { "Content-Type": "application/json", "Authorization": "Bearer <PLACEHOLDER-TOKEN>" } for value in data: values= { "email": value["Mail"], "username": value["Login"], "password": value["Password"], "displayName": f'{value["Name"]} {value["Surname"]}', "role": "user", "fallbackEmail": value["Mail"], } data = json.dumps(values) try: pprint(data) createUser = requests.post(f'{url}/users', data=data, headers=headers) userId = createUser.json()["id"] pprint(userId) inviteUser = requests.post(f'{url}/users/{userId}/send_invite_email', data=json.dumps({"email": value["Mail"]}), headers=headers) if createUser.status_code != 201 or inviteUser.status_code != 202: print(f"Error creating user or inviting user") print(f"Create user status code: {createUser.status_code}") print(f"InviteUser user status code: {inviteUser.status_code}") exit() except Exception as e: pprint(e)
hope this helps.
ps: I added the invite user email to the program for you since I did not have it in there.@BrutalBirdie Thanks a lot!
-
Found it

Here is the python3 code:import json from pprint import pprint import requests # Each user to programmatically create must be in this JSON format data = [ { "Surname": "Lastname", "Name": "Firstname", "Login": "MyAwesomeLoginName", "Mail": "missing@null.none", "Password": "HahaClearTextPasswordGoBrrrrrr" } ] # Replace `DOMAIN.TLD` with your Domain url="https://my.DOMAIN.TLD/api/v1" # Replace `<PLACEHOLDER-TOKEN>` with your Cloudron Token headers = { "Content-Type": "application/json", "Authorization": "Bearer <PLACEHOLDER-TOKEN>" } for value in data: values= { "email": value["Mail"], "username": value["Login"], "password": value["Password"], "displayName": f'{value["Name"]} {value["Surname"]}', "role": "user", "fallbackEmail": value["Mail"], } data = json.dumps(values) try: pprint(data) createUser = requests.post(f'{url}/users', data=data, headers=headers) userId = createUser.json()["id"] pprint(userId) inviteUser = requests.post(f'{url}/users/{userId}/send_invite_email', data=json.dumps({"email": value["Mail"]}), headers=headers) if createUser.status_code != 201 or inviteUser.status_code != 202: print(f"Error creating user or inviting user") print(f"Create user status code: {createUser.status_code}") print(f"InviteUser user status code: {inviteUser.status_code}") exit() except Exception as e: pprint(e)
hope this helps.
ps: I added the invite user email to the program for you since I did not have it in there.@BrutalBirdie That should be part of the docs!
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login