Modification de la récupération d'un utilisateur GLPI

This commit is contained in:
Jason SECULA
2025-09-12 12:40:01 +02:00
parent d52e0b7a2a
commit f004382573
2 changed files with 30 additions and 11 deletions

View File

@ -33,21 +33,17 @@ class GLPIAPI:
"App-Token": self.AppToken "App-Token": self.AppToken
} }
def GetDevice(self, device, trashbin=False): def GetDevice(self, device):
if(trashbin):
checkDeleted = 1
else:
checkDeleted = 0
if(device.Imei != ''): if(device.Imei != ''):
# Recherche des appareils en fonction du numéro de série ou de l'imei # Recherche des appareils en fonction du numéro de série ou de l'imei
# l'imei pouvant être dans le champ numéro de série ou les champs imei custom # l'imei pouvant être dans le champ numéro de série ou les champs imei custom
search_parameter = f'is_deleted={checkDeleted}&criteria[0][field]=5&withindexes=true&criteria[0][searchtype]=contains&criteria[0][value]=^{device.SerialNumber}$'\ search_parameter = f'is_deleted=0&criteria[0][field]=5&withindexes=true&criteria[0][searchtype]=contains&criteria[0][value]=^{device.SerialNumber}$'\
f'&criteria[1][link]=OR&criteria[1][field]=5&criteria[1][searchtype]=contains&criteria[1][value]=^{device.Imei}$'\ f'&criteria[1][link]=OR&criteria[1][field]=5&criteria[1][searchtype]=contains&criteria[1][value]=^{device.Imei}$'\
f'&criteria[2][link]=OR&criteria[2][field]=76667&criteria[2][searchtype]=contains&criteria[2][value]=^{device.Imei}$'\ f'&criteria[2][link]=OR&criteria[2][field]=76667&criteria[2][searchtype]=contains&criteria[2][value]=^{device.Imei}$'\
f'&criteria[3][link]=OR&criteria[3][field]=76670&criteria[3][searchtype]=contains&criteria[3][value]=^{device.Imei}$' f'&criteria[3][link]=OR&criteria[3][field]=76670&criteria[3][searchtype]=contains&criteria[3][value]=^{device.Imei}$'
else: else:
# Recherche des appareils en fonction du numéro de série seulement # Recherche des appareils en fonction du numéro de série seulement
search_parameter = f'is_deleted={checkDeleted}&criteria[0][field]=5&withindexes=true&criteria[0][searchtype]=contains&criteria[0][value]=^{device.SerialNumber}$' search_parameter = f'is_deleted=0&criteria[0][field]=5&withindexes=true&criteria[0][searchtype]=contains&criteria[0][value]=^{device.SerialNumber}$'
searchUri = f"{self.Server}/apirest.php/search/computer?{search_parameter}" searchUri = f"{self.Server}/apirest.php/search/computer?{search_parameter}"
search = requests.get(searchUri, headers=self.Headers) search = requests.get(searchUri, headers=self.Headers)
@ -65,6 +61,27 @@ class GLPIAPI:
return None, None, 0 return None, None, 0
return None, None, None return None, None, None
def GetUser(self, username=None, email=None):
if(username != None):
search_parameter = f'is_deleted=0&criteria[0][field]=1&withindexes=true&criteria[0][searchtype]=contains&criteria[0][value]=^{username}$'
elif(email != None):
search_parameter = f'is_deleted=0&criteria[0][field]=5&withindexes=true&criteria[0][searchtype]=contains&criteria[0][value]=^{email}$'
searchUri = f"{self.Server}/apirest.php/search/user?{search_parameter}"
search = requests.get(searchUri, headers=self.Headers)
if(search.status_code == 200):
search = search.json()
if(search["totalcount"] == 1):
userID = list(search["data"].keys())[0]
data = search["data"][userID]
return userID, data, search["totalcount"]
elif(search["totalcount"] > 1):
userID = list(search["data"].keys())
return userID, search["data"], search["totalcount"]
else:
return None, None, 0
def UpdateInventory(self, inventory): def UpdateInventory(self, inventory):
headers = { headers = {
"Content-Type":"Application/x-compress", "Content-Type":"Application/x-compress",

View File

@ -204,7 +204,7 @@ for device in devices:
loggerDouble.error(f"{count} devices matching airwatch device {device.FriendlyName} (Airwatch id={device.Id}) in GLPI (GLPI ids = {', '.join(deviceID)}), skipping this device...") loggerDouble.error(f"{count} devices matching airwatch device {device.FriendlyName} (Airwatch id={device.Id}) in GLPI (GLPI ids = {', '.join(deviceID)}), skipping this device...")
continue continue
if(count == 0): if(count == 0):
deviceIDTrash, dataTrash, countTrash = glpiapi.GetDevice(device, trashbin=True) deviceIDTrash, dataTrash, countTrash = glpiapi.GetDevice(device)
if(countTrash > 1): if(countTrash > 1):
loggerDouble.error(f"{countTrash} devices matching airwatch device {device.FriendlyName} (Airwatch id={device.Id}) in GLPI trashbin (GLPI ids = {', '.join(deviceIDTrash)}), skipping this device...") loggerDouble.error(f"{countTrash} devices matching airwatch device {device.FriendlyName} (Airwatch id={device.Id}) in GLPI trashbin (GLPI ids = {', '.join(deviceIDTrash)}), skipping this device...")
elif(countTrash == 1): elif(countTrash == 1):
@ -230,9 +230,11 @@ for device in devices:
logger.info(f"Updating {deviceID} on GLPI") logger.info(f"Updating {deviceID} on GLPI")
glpiapi.UpdateInventory(inventory.Json()) glpiapi.UpdateInventory(inventory.Json())
#if(data['70'] == None and device.User != settings["AIRWATCH"]["StagingUser"]): if(data['70'] == None and device.User != settings["AIRWATCH"]["StagingUser"]):
#logger.info(f"Updating user from {data['70']} to {device.User} in GLPI (id={deviceID})") userID, userData, userCount = glpiapi.GetUser(device.User)
#glpiapi.UpdateUser(deviceID, device.User) if(userCount == 1):
logger.info(f"Updating user from {data['70']} to {device.User} in GLPI (id={deviceID})")
glpiapi.UpdateUser(deviceID, userID)
if(data['5'] != device.SerialNumber): if(data['5'] != device.SerialNumber):
logger.info(f"Updating serial number from {data['5']} to {device.SerialNumber} in GLPI (id={deviceID})") logger.info(f"Updating serial number from {data['5']} to {device.SerialNumber} in GLPI (id={deviceID})")