76 lines
2.2 KiB
Python
Executable file
76 lines
2.2 KiB
Python
Executable file
from os import rename, remove, chown
|
|
from subprocess import run, call, check_output
|
|
from crypt import crypt
|
|
|
|
|
|
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, ldap_pass=None):
|
|
"""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
|
|
if ldap_pass is None:
|
|
run(['vim', filename])
|
|
ret = call(['ldapadd', '-D', 'cn=Manager,dc=exozy,dc=me',
|
|
'-W', '-f', filename])
|
|
else:
|
|
ret = call(['ldapadd', '-D', 'cn=Manager,dc=exozy,dc=me',
|
|
'-w', ldap_pass, '-f', filename])
|
|
if ret != 0:
|
|
remove(filename)
|
|
return
|
|
chown(filename, 1000, 1000)
|
|
rename(filename, '/home/ta180m/git/LDAP/users/' + filename)
|
|
|
|
configure(username)
|
|
|