def handle(self, *args, **options): if len(args) != 1: raise CommandError('Argument must be a link to the binary plist file') plist = biplist.readPlist(args[0]) computers = plist['computers'] with transaction.atomic(): for computer in computers.values(): computerInfo = _parseComputerInfo(computer) if not computerInfo['serial']: continue if not (computerInfo['localUser'] or computerInfo['munkiMap']): continue computerObj = Computer() computerObj.serialNumber = computerInfo['serial'] computerObj.computerName = computerInfo['computerName'] if computerInfo['group'] in enrollmentSetMap: enrollmentSetName = enrollmentSetMap[computerInfo['group']] try: enrollmentSet = AutoEnroll.objects.get(pk=enrollmentSetName) except AutoEnroll.DoesNotExist: enrollmentSet = AutoEnroll() enrollmentSet.name = enrollmentSetName enrollmentSet.enrollmentAllowed = False enrollmentSet.setEnabled = False enrollmentSet.requireComputerName = False enrollmentSet.requireLanschool = False enrollmentSet.save() computerObj.enrollmentSet = enrollmentSet computerObj.save() if computerInfo['localUser']: localUser = AutoLocalUser() localUser.computer = computerObj localUser.fullName = computerInfo['localUser']['fullName'] localUser.userName = computerInfo['localUser']['userName'] localUser.admin = computerInfo['localUser']['admin'] localUser.save() for attr, (objClass, objNames) in computerInfo['munkiMap'].items(): objs = [objClass.objects.get(pk=name) for name in objNames] setattr(computerObj, attr, objs) computerObj.save()
def autoEnroll(request): if request.method != 'POST': return HttpResponseNotAllowed(['POST']) serialNumber = request.POST.get("serialNumber", None) enrollmentSetName = request.POST.get("enrollmentSet", None) description = request.POST.get("description", None) if not serialNumber: return HttpResponseBadRequest("Serial number is required") if not enrollmentSetName: return HttpResponseBadRequest("Enrollment set is required") try: enrollmentSet = AutoEnroll.objects.get(pk=enrollmentSetName) except AutoEnroll.DoesNotExist: return HttpResponseNotFound("Enrollment set not found") if not enrollmentSet.enrollmentAllowed: return HttpResponseBadRequest("Enrollment set is not accepting new enrollments") try: computer = Computer.objects.get(pk=serialNumber) except Computer.DoesNotExist: computer = None if computer: return HttpResponseForbidden("Serial number already exists in database") computer = Computer(pk=serialNumber) computer.enabled = enrollmentSet.setEnabled computer.enrollmentSet = enrollmentSet computer.description = description or "" computer.save() return HttpResponse("OK", content_type="text/plain")