def create_user(name, login, email, birthdate, groups, processor, address, passwd_hash=None, send_confirm_mail: bool = False): """Create a new member Create a new user with a generated password, finance- and unix account, and make him member of the `config.member_group` and `config.network_access_group`. :param str name: The full name of the user (e.g. Max Mustermann) :param str login: The unix login for the user :param str email: E-Mail address of the user :param Date birthdate: Date of birth :param PropertyGroup groups: The initial groups of the new user :param Optional[User] processor: The processor :param Address address: Where the user lives. May or may not come from a room. :param passwd_hash: Use password hash instead of generating a new password :param send_confirm_mail: If a confirmation mail should be send to the user :return: """ now = session.utcnow() plain_password = user_helper.generate_password(12) # create a new user new_user = User(login=login, name=name, email=email, registered_at=now, account=Account(name="", type="USER_ASSET"), password=plain_password, wifi_password=generate_wifi_password(), birthdate=birthdate, address=address) processor = processor if processor is not None else new_user if passwd_hash: new_user.passwd_hash = passwd_hash plain_password = None account = UnixAccount(home_directory="/home/{}".format(login)) new_user.unix_account = account with session.session.begin(subtransactions=True): session.session.add(new_user) session.session.add(account) new_user.account.name = deferred_gettext(u"User {id}").format( id=new_user.id).to_json() for group in groups: make_member_of(new_user, group, processor, closed(now, None)) log_user_event(author=processor, message=deferred_gettext(u"User created.").to_json(), user=new_user) user_send_mail(new_user, UserCreatedTemplate(), True) if email is not None and send_confirm_mail: send_confirmation_email(new_user) return new_user, plain_password
def merge_member_request(user: User, prm: PreMember, merge_name: bool, merge_email: bool, merge_person_id: bool, merge_room: bool, merge_password: bool, merge_birthdate: bool, processor: User): if prm.move_in_date is not None and prm.move_in_date < session.utcnow( ).date(): prm.move_in_date = session.utcnow().date() if merge_name: user = edit_name(user, prm.name, processor) if merge_email: user = edit_email(user, prm.email, user.email_forwarded, processor, is_confirmed=prm.email_confirmed) if merge_person_id: user = edit_person_id(user, prm.swdd_person_id, processor) move_in_datetime = datetime.combine(prm.move_in_date, utc.time_min()) if merge_room: if prm.room: if user.room: move(user, prm.room.building_id, prm.room.level, prm.room.number, processor=processor, when=move_in_datetime) else: move_in(user, prm.room.building_id, prm.room.level, prm.room.number, mac=None, processor=processor, when=move_in_datetime) if not user.member_of(config.member_group): make_member_of(user, config.member_group, processor, closed(move_in_datetime, None)) if merge_birthdate: user = edit_birthdate(user, prm.birthdate, processor) log_msg = "Merged information from registration {}." if merge_password: user.passwd_hash = prm.passwd_hash log_msg += " Password overridden." else: log_msg += " Kept old password." log_user_event( deferred_gettext(log_msg).format(encode_type2_user_id( prm.id)).to_json(), processor, user) session.session.delete(prm)