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.