def submit(request): if request.method != 'POST': raise Http404 # list of bundleids to ignore bundleid_ignorelist = [ 'com.apple.print.PrinterProxy' ] submission = request.POST mac = submission.get('mac') machine = None if mac: try: machine = Machine.objects.get(mac=mac) except Machine.DoesNotExist: machine = Machine(mac=mac) if machine: if 'hostname' in submission: machine.hostname = submission.get('hostname') if 'username' in submission: machine.username = submission.get('username') if 'location' in submission: machine.location = submission.get('location') machine.remote_ip = request.META['REMOTE_ADDR'] compressed_inventory = submission.get('base64bz2inventory') if compressed_inventory: compressed_inventory = compressed_inventory.replace(" ", "+") inventory_str = decode_to_string(compressed_inventory) try: inventory_list = plistlib.readPlistFromString(inventory_str) except Exception: inventory_list = None if inventory_list: try: inventory_meta = Inventory.objects.get(machine=machine) except Inventory.DoesNotExist: inventory_meta = Inventory(machine=machine) inventory_meta.sha256hash = \ hashlib.sha256(inventory_str).hexdigest() # clear existing inventoryitems machine.inventoryitem_set.all().delete() # insert current inventory items for item in inventory_list: # skip items in bundleid_ignorelist. if not item.get('bundleid') in bundleid_ignorelist: i_item = machine.inventoryitem_set.create( name=item.get('name', ''), version=item.get('version', ''), bundleid=item.get('bundleid', ''), bundlename=item.get('CFBundleName', ''), path=item.get('path', '') ) machine.last_inventory_update = datetime.now() inventory_meta.save() machine.save() return HttpResponse( "Inventory submmitted for %s.\n" % submission.get('hostname')) return HttpResponse("No inventory submitted.\n")
def inventory_submit(request): if request.method != 'POST': return HttpResponseNotFound('No POST data sent') # list of bundleids to ignore bundleid_ignorelist = ['com.apple.print.PrinterProxy'] submission = request.POST serial = submission.get('serial') machine = None if serial: try: machine = Machine.objects.get(serial=serial) except Machine.DoesNotExist: return HttpResponseNotFound('Serial Number not found') compressed_inventory = submission.get('base64bz2inventory') if compressed_inventory: compressed_inventory = compressed_inventory.replace(" ", "+") inventory_str = utils.decode_to_string(compressed_inventory) try: inventory_list = plistlib.readPlistFromString(inventory_str) except Exception: inventory_list = None if inventory_list: try: inventory_meta = Inventory.objects.get(machine=machine) except Inventory.DoesNotExist: inventory_meta = Inventory(machine=machine) inventory_meta.sha256hash = \ hashlib.sha256(inventory_str).hexdigest() # clear existing inventoryitems machine.inventoryitem_set.all().delete() # insert current inventory items inventory_items_to_be_created = [] for item in inventory_list: app, _ = Application.objects.get_or_create( bundleid=item.get("bundleid", ""), name=item.get("name", ""), bundlename=item.get("CFBundleName", "")) # skip items in bundleid_ignorelist. if not item.get('bundleid') in bundleid_ignorelist: i_item = InventoryItem(application=app, version=item.get("version", ""), path=item.get('path', ''), machine=machine) if is_postgres(): inventory_items_to_be_created.append(i_item) else: i_item.save() machine.last_inventory_update = timezone.now() inventory_meta.save() if is_postgres(): InventoryItem.objects.bulk_create( inventory_items_to_be_created) machine.save() return HttpResponse("Inventory submmitted for %s.\n" % submission.get('serial')) return HttpResponse("No inventory submitted.\n")