#!/usr/bin/python # A wrapper script over ldapadd from crypt import crypt from os import remove from secrets import token_urlsafe from subprocess import run, call, check_output from sys import argv 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, 'sh', '-c', 'flatpak remote-add 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 = f'''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}}{crypt(password)} 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}''' # 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', open('/etc/ldappass', 'r').read(), '-f', filename]) remove(filename) if ret != 0: return # Configure and set up user configure(username) # Generate temporary password password = token_urlsafe(6) print('Temporary password:', password) adduser(*[argv[i] for i in range(1, 5)], password)