From f004382573736f51f11534fed564e7f99b555089 Mon Sep 17 00:00:00 2001 From: Jason SECULA Date: Fri, 12 Sep 2025 12:40:01 +0200 Subject: [PATCH] =?UTF-8?q?Modification=20de=20la=20r=C3=A9cup=C3=A9ration?= =?UTF-8?q?=20d'un=20utilisateur=20GLPI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/includes/GLPIAPI.py | 31 ++++++++++++++++++++++++------- scripts/syncGLPI.py | 10 ++++++---- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/scripts/includes/GLPIAPI.py b/scripts/includes/GLPIAPI.py index c811c33..6919d02 100644 --- a/scripts/includes/GLPIAPI.py +++ b/scripts/includes/GLPIAPI.py @@ -33,21 +33,17 @@ class GLPIAPI: "App-Token": self.AppToken } - def GetDevice(self, device, trashbin=False): - if(trashbin): - checkDeleted = 1 - else: - checkDeleted = 0 + def GetDevice(self, device): if(device.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 - 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[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}$' else: # 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}" search = requests.get(searchUri, headers=self.Headers) @@ -65,6 +61,27 @@ class GLPIAPI: return None, None, 0 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): headers = { "Content-Type":"Application/x-compress", diff --git a/scripts/syncGLPI.py b/scripts/syncGLPI.py index f54e821..4f823a2 100644 --- a/scripts/syncGLPI.py +++ b/scripts/syncGLPI.py @@ -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...") continue if(count == 0): - deviceIDTrash, dataTrash, countTrash = glpiapi.GetDevice(device, trashbin=True) + deviceIDTrash, dataTrash, countTrash = glpiapi.GetDevice(device) 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...") elif(countTrash == 1): @@ -230,9 +230,11 @@ for device in devices: logger.info(f"Updating {deviceID} on GLPI") glpiapi.UpdateInventory(inventory.Json()) - #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})") - #glpiapi.UpdateUser(deviceID, device.User) + if(data['70'] == None and device.User != settings["AIRWATCH"]["StagingUser"]): + userID, userData, userCount = glpiapi.GetUser(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): logger.info(f"Updating serial number from {data['5']} to {device.SerialNumber} in GLPI (id={deviceID})")