diff --git a/GLPIAPI.py b/GLPIAPI.py index 01320cf..b0baeeb 100644 --- a/GLPIAPI.py +++ b/GLPIAPI.py @@ -33,8 +33,26 @@ class GLPIAPI: "App-Token": self.AppToken } - def GetDevice(self, airwatchDevice=None, serialNumber=None, imei=None): - if(airwatchDevice != None): + def GetComputers(self, deviceName=None, serialNumber=None, user=None, imei=None, airwatchDevice=None): + ''' + Search for computer items in GLPI based on one of the possibles parameters : + - deviceName : name of the item + - serialNumber : serial number of the item + - 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 + + Return a tuple with item id, item data and item count. + ''' + 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}$' + 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}$' + 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) @@ -45,30 +63,43 @@ class GLPIAPI: 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}$' - else: - if(imei != None): + + 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}$'\ 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}$' - 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]=^{serialNumber}$' - - searchUri = f"{self.Server}/apirest.php/search/Computer?{search_parameter}" + + 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}$' + + 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" + else: + searchUri = f"{self.Server}/apirest.php/search/Computer?{search_parameter}" search = requests.get(searchUri, headers=self.Headers) if(search.status_code == 200): search = search.json() if(search["totalcount"] == 1): - deviceID = list(search["data"].keys())[0] - data = search["data"][deviceID] + itemID = list(search["data"].keys())[0] + data = search["data"][itemID] - return deviceID, data, search["totalcount"] + return itemID, data, search["totalcount"] elif(search["totalcount"] > 1): - deviceID = list(search["data"].keys()) - return deviceID, search["data"], search["totalcount"] + if(searchAll): + # requires id to be in the display preferences of the api user + itemID = [i["2"] for i in search["data"]] + else: + itemID = list(search["data"].keys()) + return itemID, search["data"], search["totalcount"] return None, None, 0