Example #1
0
def devicegroup_api(request, data, group, ident):
    command = data['command']

    response = { }
    if command == 'get':
        try:
            pref = DeviceGroupManagedPreference.objects.get(group=group, identifier=ident)
            plist = pref.plist
        except:
            plist = '<plist><dict><key>Once</key><dict /><key>Often</key><dict /><key>Always</key><dict /></dict></plist>'

        response['status'] = 'OK'
        response['data'] = plist
    elif command == 'set':
        try:
            pref = DeviceGroupManagedPreference.objects.get(group=group, identifier=ident)
        except:
            pref = DeviceGroupManagedPreference(group=group, identifier=ident)

        pref.plist = data['plist']
        pref.save()

        for device in group.recursive_devices():
            mcx.build_system_configuration_profile(device, install=True)

        response['status'] = 'OK'
    else:
        response['status'] = 'ERROR'
        response['error'] = 'Unknown command'

    return HttpResponse(json.dumps(response))
Example #2
0
def install_profile(request, udid):
    device = None
    if udid:
        try:
            device = Device.objects.get(udid=udid)
        except Device.DoesNotExist:
            raise Http404
    else:
        raise Http404

    if device.os != Device.OSX:
        return HttpResponse('ERROR: Invalid Device Type')

    mcx.build_system_configuration_profile(device, install=True)

    return HttpResponse('OK')
Example #3
0
def install_profile(request, udid):
    device = None
    if udid:
        try:
            device = Device.objects.get(udid=udid)
        except Device.DoesNotExist:
            raise Http404
    else:
        raise Http404

    if device.os != Device.OSX:
        return HttpResponse('ERROR: Invalid Device Type')

    mcx.build_system_configuration_profile(device, install=True)

    return HttpResponse('OK')
Example #4
0
def detail(request, udid):
    device = None
    if udid:
        try:
            device = Device.objects.get(udid=udid)
        except Device.DoesNotExist:
            raise Http404
    else:
        raise Http404

    if request.method == 'GET':
        data = request.GET
    else:
        data = request.POST

    if 'command' in data:
        result = { }
        command = data['command']

        if command == 'addGroups':
            result['items'] = [ ]
            for id in data['id'].split(','):
                group = DeviceGroup.objects.get(uuid=id)
                if not device in group.devices.all():
                    group.devices.add(device)
                    group.save()
                    result['items'].append({ 'name': group.name, 'id': group.uuid })
            mcx.build_system_configuration_profile(device, install=True)
            result['status'] = 'OK'
        elif command == 'removeGroup':
            group = DeviceGroup.objects.get(uuid=data['id'])
            if device in group.devices.all():
                group.devices.remove(device)
                group.save()
                mcx.build_system_configuration_profile(device, install=True)
            result['status'] = 'OK'
        elif command == 'availableGroups':
            groups = DeviceGroup.objects.filter(name__startswith=data['query'])
            result['items'] = [ ]
            for g in groups:
                result['items'].append({ 'name': g.name, 'id': g.uuid })
            result['status'] = 'OK'
        elif command == 'ListPreferences':
            result['objects'] = [ ]
            prefs = DeviceManagedPreference.objects.filter(device=device).all()
            for pref in prefs:
                app = AppInventoryItem.objects.filter(identifier=pref.identifier).first()
                item = { 'id': pref.identifier }
                if app:
                    item['name'] = app.name
                else:   
                    item['name'] = pref.identifier
                result['objects'].append(item)
            result['status'] = 'OK'
        elif command == 'removePreference':
            pref = DeviceManagedPreference.objects.get(device=device, identifier=data['id'])
            pref.delete()
            result['status'] = 'OK'
        else:
            result['status'] = 'ERROR'
            result['error'] = 'Invalid request'

        return HttpResponse(json.dumps(result))

    apps_last_updated = None
    obj = DeviceCommand.objects.filter(device=device, type='com.github.managedmacadmin.InstalledApplicationList', status=DeviceCommand.SUCCESS).order_by('-date_completed').first()
    if obj:
        apps_last_updated = obj.date_completed

    profiles_last_updated = None
    obj = DeviceCommand.objects.filter(device=device, type='com.github.managedmacadmin.ProfileList', status=DeviceCommand.SUCCESS).order_by('-date_completed').first()
    if obj:
        profiles_last_updated = obj.date_completed

    context = {
        'device': device,
        'groups': device.devicegroup_set.order_by('-priority', 'name').all(),
        'apps': AppInventoryItem.objects.filter(device=device),
        'apps_last_updated': apps_last_updated,
        'profiles_last_updated': profiles_last_updated,
    }

    return render(request, 'mdm/detail.html', context)
def api(request, id):
    group = None
    try:
        group = DeviceGroup.objects.get(uuid=id)
    except DeviceGroup.DoesNotExist:
        raise Http404

    if request.method == 'GET':
        data = request.GET
    else:
        data = request.POST

    result = {}
    if 'command' not in data:
        result['status'] = 'ERROR'
        result['error'] = 'Invalid request'
    elif data['command'] == 'set':
        attribute = data['attribute']
        value = data['value']
        if attribute == 'name':
            group.name = value
            group.save()
            result['status'] = 'OK'
        elif attribute == 'description':
            group.description = value
            group.save()
            result['status'] = 'OK'
        elif attribute == 'priority':
            result['status'] = 'OK'
            try:
                group.priority = value
                group.save()
            except:
                result['status'] = 'ERROR'
                result['error'] = 'Could not parse value into integer.'
        else:
            result['status'] = 'ERROR'
            result['error'] = 'Unknown attribute'
    elif data['command'] == 'addDevices':
        result['items'] = []
        for id in data['id'].split(','):
            device = Device.objects.get(udid=id)
            if not device in group.devices.all():
                group.devices.add(device)
                mcx.build_system_configuration_profile(device, install=True)
                result['items'].append({
                    'name': device.name,
                    'id': device.udid
                })
        group.save()
        result['status'] = 'OK'
    elif data['command'] == 'addGroups':
        result['items'] = []
        for id in data['id'].split(','):
            g = DeviceGroup.objects.get(uuid=id)
            if not g in group.groups.all():
                group.groups.add(g)
                result['items'].append({'name': g.name, 'id': g.uuid})
        group.save()
        for device in group.devices.all():
            mcx.build_system_configuration_profile(device, install=True)
        result['status'] = 'OK'
    elif data['command'] == 'addPreference':
        if DeviceGroupManagedPreference.objects.filter(
                group=group, identifier=data['identifier']).count() > 0:
            result['status'] = 'ERROR'
            result['error'] = 'Identifier exists.'
            return HttpResponse(json.dumps(result))

        pref = DeviceGroupManagedPreference(group=group,
                                            identifier=data['identifier'])
        pref.plist = '<plist><dict><key>Once</key><dict /><key>Often</key><dict /><key>Always</key><dict /></dict></plist>'
        pref.save()

        result['status'] = 'OK'
        result['identifier'] = pref.identifier
        result['url'] = reverse('devicegroup_preference_edit',
                                args=(
                                    group.uuid,
                                    pref.identifier,
                                ))
    elif data['command'] == 'removeDevice':
        device = Device.objects.get(udid=data['id'])
        if device in group.devices.all():
            group.devices.remove(device)
            group.save()
            mcx.build_system_configuration_profile(device, install=True)
        result['status'] = 'OK'
    elif data['command'] == 'removeGroup':
        g = DeviceGroup.objects.get(uuid=data['id'])
        if g in group.groups.all():
            group.groups.remove(g)
            group.save()
        for device in group.devices.all():
            mcx.build_system_configuration_profile(device, install=True)
        result['status'] = 'OK'
    elif data['command'] == 'removePreference':
        if DeviceGroupManagedPreference.objects.filter(
                group=group, identifier=data['identifier']).count() == 0:
            result['status'] = 'ERROR'
            result['error'] = 'Identifier not found.'
            return HttpResponse(json.dumps(result))

        pref = DeviceGroupManagedPreference.objects.get(
            group=group, identifier=data['identifier'])
        pref.delete()

        result['status'] = 'OK'
        result['identifier'] = data['identifier']
    elif data['command'] == 'availableDevices':
        devices = Device.objects.filter(name__startswith=data['query'])
        result['items'] = []
        for device in devices:
            result['items'].append({'name': device.name, 'id': device.udid})
        result['status'] = 'OK'
    elif data['command'] == 'availableGroups':
        groups = DeviceGroup.objects.filter(name__startswith=data['query'])
        result['items'] = []
        for g in groups:
            result['items'].append({'name': g.name, 'id': g.uuid})
        result['status'] = 'OK'
    else:
        result['status'] = 'ERROR'
        result['error'] = 'Unknown command'

    return HttpResponse(json.dumps(result))
Example #6
0
def api(request, id):
    group = None
    try:
        group = DeviceGroup.objects.get(uuid=id)
    except DeviceGroup.DoesNotExist:
        raise Http404

    if request.method == 'GET':
        data = request.GET
    else:
        data = request.POST

    result = { }
    if 'command' not in data:
        result['status'] = 'ERROR'
        result['error'] = 'Invalid request';
    elif data['command'] == 'set':
        attribute = data['attribute']
        value = data['value']
        if attribute == 'name':
            group.name = value
            group.save()
            result['status'] = 'OK'
        elif attribute == 'description':
            group.description = value
            group.save()
            result['status'] = 'OK'
        elif attribute == 'priority':
            result['status'] = 'OK'
            try:
                group.priority = value
                group.save()
            except:
                result['status'] = 'ERROR';
                result['error'] = 'Could not parse value into integer.'
        else:
            result['status'] = 'ERROR'
            result['error'] = 'Unknown attribute'
    elif data['command'] == 'addDevices':
        result['items'] = [ ]
        for id in data['id'].split(','):
            device = Device.objects.get(udid=id)
            if not device in group.devices.all():
                group.devices.add(device)
                mcx.build_system_configuration_profile(device, install=True)
                result['items'].append({ 'name': device.name, 'id': device.udid })
        group.save()
        result['status'] = 'OK'
    elif data['command'] == 'addGroups':
        result['items'] = [ ]
        for id in data['id'].split(','):
            g = DeviceGroup.objects.get(uuid=id)
            if not g in group.groups.all():
                group.groups.add(g)
                result['items'].append({ 'name': g.name, 'id': g.uuid })
        group.save()
        for device in group.devices.all():
            mcx.build_system_configuration_profile(device, install=True)
        result['status'] = 'OK'
    elif data['command'] == 'addPreference':
        if DeviceGroupManagedPreference.objects.filter(group=group, identifier=data['identifier']).count() > 0:
            result['status'] = 'ERROR'
            result['error'] = 'Identifier exists.'
            return HttpResponse(json.dumps(result))

        pref = DeviceGroupManagedPreference(group=group, identifier=data['identifier'])
        pref.plist = '<plist><dict><key>Once</key><dict /><key>Often</key><dict /><key>Always</key><dict /></dict></plist>'
        pref.save()

        result['status'] = 'OK'
        result['identifier'] = pref.identifier
        result['url'] = reverse('devicegroup_preference_edit', args=(group.uuid, pref.identifier,))
    elif data['command'] == 'removeDevice':
        device = Device.objects.get(udid=data['id'])
        if device in group.devices.all():
            group.devices.remove(device)
            group.save()
            mcx.build_system_configuration_profile(device, install=True)
        result['status'] = 'OK'
    elif data['command'] == 'removeGroup':
        g = DeviceGroup.objects.get(uuid=data['id'])
        if g in group.groups.all():
            group.groups.remove(g)
            group.save()
        for device in group.devices.all():
            mcx.build_system_configuration_profile(device, install=True)
        result['status'] = 'OK'
    elif data['command'] == 'removePreference':
        if DeviceGroupManagedPreference.objects.filter(group=group, identifier=data['identifier']).count() == 0:
            result['status'] = 'ERROR'
            result['error'] = 'Identifier not found.'
            return HttpResponse(json.dumps(result))

        pref = DeviceGroupManagedPreference.objects.get(group=group, identifier=data['identifier'])
        pref.delete()

        result['status'] = 'OK'
        result['identifier'] = data['identifier']
    elif data['command'] == 'availableDevices':
        devices = Device.objects.filter(name__startswith=data['query'])
        result['items'] = [ ]
        for device in devices:
            result['items'].append({ 'name': device.name, 'id': device.udid })
        result['status'] = 'OK'
    elif data['command'] == 'availableGroups':
        groups = DeviceGroup.objects.filter(name__startswith=data['query'])
        result['items'] = [ ]
        for g in groups:
            result['items'].append({ 'name': g.name, 'id': g.uuid })
        result['status'] = 'OK'
    else:
        result['status'] = 'ERROR'
        result['error'] = 'Unknown command'

    return HttpResponse(json.dumps(result))
Example #7
0
def detail(request, udid):
    device = None
    if udid:
        try:
            device = Device.objects.get(udid=udid)
        except Device.DoesNotExist:
            raise Http404
    else:
        raise Http404

    if request.method == 'GET':
        data = request.GET
    else:
        data = request.POST

    if 'command' in data:
        result = {}
        command = data['command']

        if command == 'addGroups':
            result['items'] = []
            for id in data['id'].split(','):
                group = DeviceGroup.objects.get(uuid=id)
                if not device in group.devices.all():
                    group.devices.add(device)
                    group.save()
                    result['items'].append({
                        'name': group.name,
                        'id': group.uuid
                    })
            mcx.build_system_configuration_profile(device, install=True)
            result['status'] = 'OK'
        elif command == 'removeGroup':
            group = DeviceGroup.objects.get(uuid=data['id'])
            if device in group.devices.all():
                group.devices.remove(device)
                group.save()
                mcx.build_system_configuration_profile(device, install=True)
            result['status'] = 'OK'
        elif command == 'availableGroups':
            groups = DeviceGroup.objects.filter(name__startswith=data['query'])
            result['items'] = []
            for g in groups:
                result['items'].append({'name': g.name, 'id': g.uuid})
            result['status'] = 'OK'
        elif command == 'ListPreferences':
            result['objects'] = []
            prefs = DeviceManagedPreference.objects.filter(device=device).all()
            for pref in prefs:
                app = AppInventoryItem.objects.filter(
                    identifier=pref.identifier).first()
                item = {'id': pref.identifier}
                if app:
                    item['name'] = app.name
                else:
                    item['name'] = pref.identifier
                result['objects'].append(item)
            result['status'] = 'OK'
        elif command == 'removePreference':
            pref = DeviceManagedPreference.objects.get(device=device,
                                                       identifier=data['id'])
            pref.delete()
            result['status'] = 'OK'
        else:
            result['status'] = 'ERROR'
            result['error'] = 'Invalid request'

        return HttpResponse(json.dumps(result))

    apps_last_updated = None
    obj = DeviceCommand.objects.filter(
        device=device,
        type='com.github.managedmacadmin.InstalledApplicationList',
        status=DeviceCommand.SUCCESS).order_by('-date_completed').first()
    if obj:
        apps_last_updated = obj.date_completed

    profiles_last_updated = None
    obj = DeviceCommand.objects.filter(
        device=device,
        type='com.github.managedmacadmin.ProfileList',
        status=DeviceCommand.SUCCESS).order_by('-date_completed').first()
    if obj:
        profiles_last_updated = obj.date_completed

    context = {
        'device': device,
        'groups': device.devicegroup_set.order_by('-priority', 'name').all(),
        'apps': AppInventoryItem.objects.filter(device=device),
        'apps_last_updated': apps_last_updated,
        'profiles_last_updated': profiles_last_updated,
    }

    return render(request, 'mdm/detail.html', context)