Separate user management scripts into Python libraries and wrapper scripts
This commit is contained in:
parent
b12dff61f2
commit
6e856e93cd
78
adduser
78
adduser
|
@ -1,80 +1,8 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
from sys import argv
|
||||
from os import rename, remove, chown
|
||||
from subprocess import run, call, check_output
|
||||
from crypt import crypt
|
||||
from adduser import adduser
|
||||
|
||||
|
||||
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 == 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 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'])
|
||||
|
||||
|
||||
# Running as script
|
||||
if __name__ == "__main__":
|
||||
username, firstname, lastname, email, password = [
|
||||
argv[i] for i in range(1, 6)]
|
||||
adduser(username, firstname, lastname, email, password)
|
||||
username, firstname, lastname, email, password = [argv[i] for i in range(1, 6)]
|
||||
adduser(username, firstname, lastname, email, password)
|
||||
|
|
76
adduser.py
Executable file
76
adduser.py
Executable file
|
@ -0,0 +1,76 @@
|
|||
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)
|
||||
|
16
deluser
Executable file → Normal file
16
deluser
Executable file → Normal file
|
@ -1,19 +1,7 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
from sys import argv
|
||||
from subprocess import run
|
||||
from deluser import deluser
|
||||
|
||||
|
||||
def deluser(username):
|
||||
"""Delete a user"""
|
||||
|
||||
# Delete from LDAP server
|
||||
run(['ldapdelete', '-W', '-D', 'cn=Manager,dc=exozy,dc=me', 'uid=' + username +
|
||||
',ou=People,dc=exozy,dc=me', 'cn=' + username + ',ou=Group,dc=exozy,dc=me'])
|
||||
# Cleanup
|
||||
run(['sudo', 'rm', '-rf', '/home/' + username])
|
||||
|
||||
|
||||
# Running as script
|
||||
if __name__ == "__main__":
|
||||
deluser(argv[1])
|
||||
deluser(argv[1])
|
||||
|
|
16
deluser.py
Executable file
16
deluser.py
Executable file
|
@ -0,0 +1,16 @@
|
|||
from subprocess import run
|
||||
|
||||
|
||||
def deluser(username, ldap_pass=None):
|
||||
"""Delete a user"""
|
||||
|
||||
# Delete from LDAP server
|
||||
if ldap_pass is None:
|
||||
run(['ldapdelete', '-W', '-D', 'cn=Manager,dc=exozy,dc=me', 'uid=' + username +
|
||||
',ou=People,dc=exozy,dc=me', 'cn=' + username + ',ou=Group,dc=exozy,dc=me'])
|
||||
else:
|
||||
run(['ldapdelete', '-w', ldap_pass, '-D', 'cn=Manager,dc=exozy,dc=me', 'uid=' + username +
|
||||
',ou=People,dc=exozy,dc=me', 'cn=' + username + ',ou=Group,dc=exozy,dc=me'])
|
||||
|
||||
# Cleanup
|
||||
run(['sudo', 'rm', '-rf', '/home/' + username])
|
18
moduser
18
moduser
|
@ -1,21 +1,7 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
from sys import argv
|
||||
from subprocess import run
|
||||
from moduser import moduser
|
||||
|
||||
|
||||
def moduser(username):
|
||||
"""Modify an existing user"""
|
||||
|
||||
if username == 'Manager':
|
||||
bind_user = 'cn=Manager,dc=exozy,dc=me'
|
||||
else:
|
||||
bind_user = 'uid=' + username + ',ou=People,dc=exozy,dc=me'
|
||||
|
||||
# Modify user with ldapvi
|
||||
run(['ldapvi', '--user', bind_user])
|
||||
|
||||
|
||||
# Running as script
|
||||
if __name__ == "__main__":
|
||||
moduser(argv[1])
|
||||
moduser(argv[1])
|
||||
|
|
16
moduser.py
Normal file
16
moduser.py
Normal file
|
@ -0,0 +1,16 @@
|
|||
from subprocess import run
|
||||
|
||||
|
||||
def moduser(username, ldap_pass=None):
|
||||
"""Modify an existing user"""
|
||||
|
||||
if username == 'Manager':
|
||||
bind_user = 'cn=Manager,dc=exozy,dc=me'
|
||||
else:
|
||||
bind_user = 'uid=' + username + ',ou=People,dc=exozy,dc=me'
|
||||
|
||||
# Modify user with ldapvi
|
||||
if ldap_pass is None:
|
||||
run(['ldapvi', '--user', bind_user])
|
||||
else:
|
||||
run(['ldapvi', '-w', ldap_pass, '--user', bind_user])
|
9
register
9
register
|
@ -1,16 +1,9 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
from sys import modules
|
||||
from subprocess import run, check_output
|
||||
from json import loads
|
||||
from http.server import BaseHTTPRequestHandler, HTTPServer
|
||||
from importlib.util import spec_from_loader, module_from_spec
|
||||
from importlib.machinery import SourceFileLoader
|
||||
|
||||
# Import adduser module
|
||||
spec = spec_from_loader('adduser', SourceFileLoader('adduser', 'adduser'))
|
||||
adduser = module_from_spec(spec)
|
||||
spec.loader.exec_module(adduser)
|
||||
from adduser import adduser
|
||||
|
||||
|
||||
class Server(BaseHTTPRequestHandler):
|
||||
|
|
Loading…
Reference in a new issue