Vielleicht hilft das kleine Beispiel jemand weiter. Hier habe ich die Userdaten zur besseren Darstellung schon als fixe List of Dicts (users), diese könnten natürlich aber auch aus einer CSV-Datei, TOML, XML, … kommen.
from ecmind_blue_client.const import ParamTypes
from ecmind_blue_client.job import Job
from ecmind_blue_client.param import Param
from ecmind_blue_client.tcp_client import TcpClient
from XmlElement import XmlElement
import random
import string
client:TcpClient = TcpClient('localhost', 4000, 'UserImport', 'root', 'optimal')
users = [ # beispielhafte Daten zum Import
{'username' : 'aapfel', 'lastname': 'Apfel', 'firstname': 'Anna', 'mail': 'anna.apfel@test.ch'},
{'username' : 'bbirne', 'lastname': 'Birne', 'firstname': 'Beat', 'mail': 'beat.birne@test.ch'},
]
for user in users:
password = ''.join((random.choice(string.ascii_letters) for x in range(24)))
username = user['username'].split('@')[0].lower()
user_info = {
'Users': {
'User': {
'@account_type': 0,
'@bemerkung': None,
'@benutzer': username,
'@flags': 1,
'@geaendert': 1,
'@langid': 0,
'@locked': 0,
'@logincount': 0,
'@loginstation': None,
'@logintime': 0,
'@name': f'{user["firstname"]} {user["lastname"]}',
'@osemail': user['mail'],
'@passwort': TcpClient.encrypt_password(password),
'@profil': '-1',
'@server_id': 3,
'@station': None,
'@supervisor': 0,
'@validfrom': None,
'@validto': None,
}
}
}
job = Job('mng.CreateUser', Flags=0)
user_info_xml = XmlElement.from_object('AdmInfo', user_info).to_string()
job.append(Param('UserInfo', ParamTypes.BASE64 , user_info_xml))
result = client.execute(job)
if result.return_code == 0:
print(username, password)
else:
print(user, result.error_message)
Achtung: Die Technik mittels ''.join((random.choice(string.ascii_letters) for x in range(24))) ein Kennwort zu würfeln ist aus kryptografischer Sicht sicherlich nicht state of the art.