from os import rename, remove, chown from subprocess import run, call, check_output from crypt import crypt from ldappass import ldappass def configure(username): """Configure user""" run(['sudo', 'mkhomedir_helper', username, '077']) run(['sudo', '-u', username, 'mkdir', '/home/' + username + '/.config']) # Set up Flatpak run(['sudo', '-u', username, 'flatpak', 'remote-add', '--if-not-exists', 'flathub', 'https://dl.flathub.org/repo/flathub.flatpakrepo', '--user']) # Set default browser run(['sudo', '-u', username, 'xdg-settings', 'set', 'default-web-browser', 'firefox.desktop']) def adduser(username, firstname, lastname, email, password): """Add a new user""" # Get UID output = str(check_output(['getent', 'passwd'])) uid = [u for u in range(1000, 10000) if str(u) not in output][0] # Construct LDIF ldif = '''dn: uid={username},ou=People,dc=exozy,dc=me objectClass: top objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: {username} cn: {firstname} {lastname} sn: {lastname} givenName: {firstname} userPassword: {{CRYPT}}{hashedpassword} mail: {email} loginShell: /bin/fish uidNumber: {uid} gidNumber: {uid} homeDirectory: /home/{username} dn: cn={username},ou=Group,dc=exozy,dc=me objectClass: top objectClass: posixGroup cn: {username} gidNumber: {uid}'''.format(username=username, firstname=firstname, lastname=lastname, email=email, uid=uid, hashedpassword=crypt(password)) # Write to file filename = username + '.ldif' with open(filename, 'w') as f: f.write(ldif) # Add user ret = call(['ldapadd', '-D', 'cn=Manager,dc=exozy,dc=me', '-w', ldappass(), '-f', filename]) remove(filename) if ret != 0: return configure(username)