diff --git a/GLPIAPI.py b/GLPIAPI.py index 28f3bf8..02fa6bf 100644 --- a/GLPIAPI.py +++ b/GLPIAPI.py @@ -42,7 +42,7 @@ class GLPIAPI: self.InitConnection() return - def GetComputers(self, deviceName=None, serialNumber=None, user=None, imei=None, airwatchDevice=None): + def GetComputers(self, deviceName=None, serialNumber=None, user=None, imei=None, airwatchDevice=None, fieldsToDisplay=[], trashbin=0): ''' Search for computer items in GLPI based on one of the possibles parameters : - deviceName : name of the item @@ -50,7 +50,10 @@ class GLPIAPI: - user : user of the item - imei : custom field using field plugin (only for internal use) - airwatchDevice : an airwatchDevice object from airwatchAPI module - If no parameters are set, it will search for all items + If no parameters are set, it will search for all items. + + fieldsToDisplay: set fields to forcefully add to the results of the search (must be a list []) + trashbin: set if the search is in the trashbin or not (0 not in the trash or 1 in the trash) Return a tuple with item id, item data and item count. ''' @@ -58,43 +61,47 @@ class GLPIAPI: searchAll = False if(deviceName != None): # Recherche en fonction du nom de l'appareil - search_parameter = f'is_deleted=0&criteria[0][field]=1&withindexes=true&criteria[0][searchtype]=contains&criteria[0][value]=^{deviceName}$' + search_parameter = f'is_deleted={trashbin}&criteria[0][field]=1&withindexes=true&criteria[0][searchtype]=contains&criteria[0][value]=^{deviceName}$' elif(user != None): # Recherche en fonction de l'utilisateur de l'appareil - search_parameter = f'is_deleted=0&criteria[0][field]=70&withindexes=true&criteria[0][searchtype]=contains&criteria[0][value]=^{user}$' + search_parameter = f'is_deleted={trashbin}&criteria[0][field]=70&withindexes=true&criteria[0][searchtype]=contains&criteria[0][value]=^{user}$' elif(airwatchDevice != None): if(airwatchDevice.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 (plugin field) - search_parameter = f'is_deleted=0&criteria[0][field]=5&withindexes=true&criteria[0][searchtype]=contains&criteria[0][value]=^{airwatchDevice.SerialNumber}$'\ + search_parameter = f'is_deleted={trashbin}&criteria[0][field]=5&withindexes=true&criteria[0][searchtype]=contains&criteria[0][value]=^{airwatchDevice.SerialNumber}$'\ f'&criteria[1][link]=OR&criteria[1][field]=5&criteria[1][searchtype]=contains&criteria[1][value]=^{airwatchDevice.Imei}$'\ f'&criteria[2][link]=OR&criteria[2][field]=76667&criteria[2][searchtype]=contains&criteria[2][value]=^{airwatchDevice.Imei}$'\ f'&criteria[3][link]=OR&criteria[3][field]=76670&criteria[3][searchtype]=contains&criteria[3][value]=^{airwatchDevice.Imei}$' else: # Recherche des appareils en fonction du numéro de série seulement - search_parameter = f'is_deleted=0&criteria[0][field]=5&withindexes=true&criteria[0][searchtype]=contains&criteria[0][value]=^{airwatchDevice.SerialNumber}$' + search_parameter = f'is_deleted={trashbin}&criteria[0][field]=5&withindexes=true&criteria[0][searchtype]=contains&criteria[0][value]=^{airwatchDevice.SerialNumber}$' elif(imei != None): # 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 (plugin field) - search_parameter = f'is_deleted=0&criteria[0][field]=5&withindexes=true&criteria[0][searchtype]=contains&criteria[0][value]=^{serialNumber}$'\ + search_parameter = f'is_deleted={trashbin}&criteria[0][field]=5&withindexes=true&criteria[0][searchtype]=contains&criteria[0][value]=^{serialNumber}$'\ f'&criteria[1][link]=OR&criteria[1][field]=5&criteria[1][searchtype]=contains&criteria[1][value]=^{imei}$'\ f'&criteria[2][link]=OR&criteria[2][field]=76667&criteria[2][searchtype]=contains&criteria[2][value]=^{imei}$'\ f'&criteria[3][link]=OR&criteria[3][field]=76670&criteria[3][searchtype]=contains&criteria[3][value]=^{imei}$' elif(serialNumber != None): # Recherche des appareils en fonction du numéro de série seulement - search_parameter = f'is_deleted=0&criteria[0][field]=5&withindexes=true&criteria[0][searchtype]=contains&criteria[0][value]=^{serialNumber}$' + search_parameter = f'is_deleted={trashbin}&criteria[0][field]=5&withindexes=true&criteria[0][searchtype]=contains&criteria[0][value]=^{serialNumber}$' else: # Recherche de l'ensemble des appareils si rien n'est renseigné searchAll = True - search_parameter = f'is_deleted=0&criteria[0][link]=AND&criteria[0][field]=view&criteria[0][searchtype]=contains&criteria[0][value]=' if(searchAll): - searchUri = f"{self.Server}/apirest.php/search/Computer/?range=0-9999999&is_deleted=0" + searchUri = f"{self.Server}/apirest.php/search/Computer/?range=0-9999999&is_deleted={trashbin}" else: searchUri = f"{self.Server}/apirest.php/search/Computer?{search_parameter}" + + if(fieldsToDisplay != []): + for i in range(len(fieldsToDisplay)): + searchUri += f"&forcedisplay[{i}]={fieldsToDisplay[i]}" + search = requests.get(searchUri, headers=self.Headers) if(search.status_code == 200): search = search.json() @@ -115,7 +122,7 @@ class GLPIAPI: return None, search, 0 - def GetItems(self, itemType, fieldName=None, fieldValue=None): + def GetItems(self, itemType, fieldName=None, fieldValue=None, fieldsToDisplay=[], trashbin=0): ''' Search for items of a specific item type in GLPI. A filter can be set using fieldName and fieldValue : fieldName: must be the name of the field as visible in GLPI @@ -130,15 +137,19 @@ class GLPIAPI: if(fieldName != None and fieldValue != None): fieldId = list(self.GetSearchOptions(itemType, fieldName))[0] # Recherche en fonction de l'utilisateur de l'appareil - search_parameter = f'is_deleted=0&criteria[0][field]={fieldId}&withindexes=true&criteria[0][searchtype]=contains&criteria[0][value]=^{fieldValue}$' + search_parameter = f'is_deleted={trashbin}&criteria[0][field]={fieldId}&withindexes=true&criteria[0][searchtype]=contains&criteria[0][value]=^{fieldValue}$' else: searchAll = True if(searchAll): - searchUri = f"{self.Server}/apirest.php/search/{itemType}/?range=0-9999999&is_deleted=0" + searchUri = f"{self.Server}/apirest.php/search/{itemType}/?range=0-9999999&is_deleted={trashbin}" else: searchUri = f"{self.Server}/apirest.php/search/{itemType}?{search_parameter}" - + + if(fieldsToDisplay != []): + for i in range(len(fieldsToDisplay)): + searchUri += f"&forcedisplay[{i}]={fieldsToDisplay[i]}" + search = requests.get(searchUri, headers=self.Headers) if(search.status_code == 200): @@ -150,7 +161,7 @@ class GLPIAPI: return itemID, data, search["totalcount"] elif(search["totalcount"] > 1): if(searchAll): - idFieldNumber = list(self.GetSearchOptions(itemType, 'id'))[0] + idFieldNumber = list(self.GetSearchOptions(itemType, f'{itemType}.id'))[0] itemID = [i[idFieldNumber] for i in search["data"]] else: itemID = list(search["data"].keys()) @@ -160,7 +171,7 @@ class GLPIAPI: return None, search, 0 - def GetUsers(self, username=None, email=None): + def GetUsers(self, username=None, email=None, fieldsToDisplay=[], trashbin=0): ''' Search for users in GLPI based on one of the possibles parameters : - username : username of the glpi user @@ -172,13 +183,12 @@ class GLPIAPI: fieldName = None fieldValue = None if(username != None): - fieldName = 'login' + fieldName = 'User.name' fieldValue = username elif(email != None): - fieldName = 'Emails' + fieldName = 'User.UserEmail.email' fieldValue = email - - return self.GetItems("User", fieldName, fieldValue) + return self.GetItems("User", fieldName, fieldValue, fieldsToDisplay, trashbin) def GetSearchOptions(self, itemType, fieldName=None): self.CheckConnection()