lmn-client/roles/lmn_printer/files/linuxmusterLinuxclient7/user.py
2023-08-16 12:17:17 +02:00

158 lines
No EOL
4.1 KiB
Python

import ldap, ldap.sasl, sys, getpass, subprocess, pwd, os, os.path
from pathlib import Path
from linuxmusterLinuxclient7 import logging, constants, config, user, ldapHelper, shares, fileHelper, computer, localUserHelper
def readAttributes():
"""
Reads all attributes of the current user from ldap
:return: Tuple (success, dict of user attributes)
:rtype: tuple
"""
if not user.isInAD():
return False, None
return ldapHelper.searchOne(f"(sAMAccountName={user.username()})")
def school():
"""
Gets the school of the current user from the AD
:return: The short name of the school
:rtype: str
"""
rc, userdata = readAttributes()
if not rc:
return False, None
return True, userdata["sophomorixSchoolname"]
def username():
"""
Returns the user of the current user
:return: The username of the current user
:rtype: str
"""
return getpass.getuser().lower()
def isUserInAD(user):
"""
Checks if a given user is an AD user.
:param user: The username of the user to check
:type user: str
:return: True if the user is in the AD, False if it is a local user
:rtype: bool
"""
if not computer.isInAD():
return False
rc, groups = localUserHelper.getGroupsOfLocalUser(user)
if not rc:
return False
return "domain users" in groups
def isInAD():
"""Checks if the current user is an AD user.
:return: True if the user is in the AD, False if it is a local user
:rtype: bool
"""
return isUserInAD(username())
def isRoot():
"""
Checks if the current user is root
:return: True if the current user is root, False otherwise
:rtype: bool
"""
return os.geteuid() == 0
def isInGroup(groupName):
"""
Checks if the current user is part of a given group
:param groupName: The name of the group
:type groupName: str
:return: True if the user is part of the group, False otherwise
:rtype: bool
"""
rc, groups = localUserHelper.getGroupsOfLocalUser(username())
if not rc:
return False
return groupName in groups
def cleanTemplateUserGtkBookmarks():
"""Remove gtk bookmarks of the template user from the current users `~/.config/gtk-3.0/bookmarks` file.
"""
logging.info("Cleaning {} gtk bookmarks".format(constants.templateUser))
gtkBookmarksFile = "/home/{0}/.config/gtk-3.0/bookmarks".format(user.username())
if not os.path.isfile(gtkBookmarksFile):
logging.warning("Gtk bookmarks file not found, skipping!")
return
fileHelper.removeLinesInFileContainingString(gtkBookmarksFile, constants.templateUser)
def getHomeShareMountpoint():
"""
Returns the mountpoint of the users serverhome.
:return: The monutpoint of the users serverhome
:rtype: str
"""
rc, homeShareName = _getHomeShareName()
if rc:
basePath = constants.shareMountBasepath.format(username())
return True, f"{basePath}/{homeShareName}"
return False, None
def mountHomeShare():
"""
Mounts the serverhome of the current user
:return: True on success, False otherwise
:rtype: bool
"""
rc1, userAttributes = readAttributes()
rc2, shareName = _getHomeShareName(userAttributes)
if rc1 and rc2:
try:
homeShareServerPath = userAttributes["homeDirectory"]
res = shares.mountShare(homeShareServerPath, shareName=shareName, hiddenShare=False, username=username())
return res
except Exception as e:
logging.error("Could not mount home dir of user")
logging.exception(e)
return False, None
# --------------------
# - Helper functions -
# --------------------
def _getHomeShareName(userAttributes=None):
if userAttributes is None:
rc, userAttributes = readAttributes()
else:
rc = True
if rc:
try:
usernameString = username()
shareName = f"{usernameString} ({userAttributes['homeDrive']})"
return True, shareName
except Exception as e:
logging.error("Could not mount home dir of user")
logging.exception(e)
return False, None