def detail(request, pkginfo_path): '''Return detail for a specific pkginfo''' if request.method == 'GET': LOGGER.debug("Got read request for %s", pkginfo_path) try: plist = Plist.read('pkgsinfo', pkginfo_path) except FileDoesNotExistError: raise Http404("%s does not exist" % pkginfo_path) default_items = { 'display_name': '', 'description': '', 'category': '', 'developer': '', 'unattended_install': False, 'unattended_uninstall': False } for item in default_items: if not item in plist: plist[item] = default_items[item] pkginfo_text = plistlib.writePlistToString(plist) installer_item_path = plist.get('installer_item_location', '') icon_url = get_icon_url(plist) context = {'plist_text': pkginfo_text, 'pathname': pkginfo_path, 'installer_item_path': installer_item_path, 'icon_url': icon_url} return render(request, 'pkgsinfo/detail.html', context=context) if request.method == 'POST': return HttpResponse( json.dumps({'result': 'failed', 'exception_type': 'MethodNotSupported', 'detail': 'POST/PUT/DELETE should use the API'}), content_type='application/json', status=404)
def plist_api(request, kind, filepath=None): """Basic API calls for working with Munki plist files""" if kind not in ["manifests", "pkgsinfo"]: return HttpResponse(status=404) response_type = "json" if request.META.get("HTTP_ACCEPT") == "application/xml": response_type = "xml_plist" request_type = "json" if request.META.get("CONTENT_TYPE") == "application/xml": request_type = "xml_plist" if request.method == "GET": LOGGER.debug("Got API GET request for %s", kind) if filepath: try: response = Plist.read(kind, filepath) except FileDoesNotExistError, err: return HttpResponse( json.dumps({"result": "failed", "exception_type": str(type(err)), "detail": str(err)}), content_type="application/json", status=404, ) except FileReadError, err: return HttpResponse( json.dumps({"result": "failed", "exception_type": str(type(err)), "detail": str(err)}), content_type="application/json", status=403, ) if response_type == "json": response = convert_dates_to_strings(response)
def index(request, manifest_path=None): '''Returns manifest list or detail''' if manifest_path and request.is_ajax(): # return manifest detail if request.method == 'GET': LOGGER.debug("Got read request for %s", manifest_path) try: plist = Plist.read('manifests', manifest_path) except (FileDoesNotExistError, FileReadError), err: return HttpResponse(json.dumps({ 'result': 'failed', 'exception_type': str(type(err)), 'detail': str(err) }), content_type='application/json', status=404) manifest_text = plistlib.writePlistToString(plist) context = {'plist_text': manifest_text, 'pathname': manifest_path} return render(request, 'manifests/detail.html', context=context) if request.method == 'POST': return HttpResponse(json.dumps({ 'result': 'failed', 'exception_type': 'MethodNotSupported', 'detail': 'POST/PUT/DELETE should use the API' }), content_type='application/json', status=404)
def plist_api(request, kind, filepath=None): '''Basic API calls for working with Munki plist files''' if kind not in ['manifests', 'pkgsinfo', 'catalogs']: return HttpResponse(status=404) response_type = 'json' if request.META.get('HTTP_ACCEPT') == 'application/xml': response_type = 'xml_plist' request_type = 'json' if request.META.get('CONTENT_TYPE') == 'application/xml': request_type = 'xml_plist' if request.method == 'GET': LOGGER.debug("Got API GET request for %s", kind) if filepath: try: response = Plist.read(kind, filepath) except FileDoesNotExistError, err: return HttpResponse( json.dumps({'result': 'failed', 'exception_type': str(type(err)), 'detail': str(err)}), content_type='application/json', status=404) except FileReadError, err: return HttpResponse( json.dumps({'result': 'failed', 'exception_type': str(type(err)), 'detail': str(err)}), content_type='application/json', status=403) if response_type == 'json': response = convert_dates_to_strings(response)
def detail(request, pkginfo_path): '''Return detail for a specific pkginfo''' if request.method == 'GET': LOGGER.debug("Got read request for %s", pkginfo_path) try: plist = Plist.read('pkgsinfo', pkginfo_path) except FileDoesNotExistError: raise Http404("%s does not exist" % pkginfo_path) default_items = { 'display_name': '', 'description': '', 'category': '', 'developer': '', 'unattended_install': False, 'unattended_uninstall': False } for item in default_items: if not item in plist: plist[item] = default_items[item] pkginfo_text = plistlib.writePlistToString(plist) installer_item_path = plist.get('installer_item_location', '') icon_url = get_icon_url(plist) context = { 'plist_text': pkginfo_text, 'pathname': pkginfo_path, 'installer_item_path': installer_item_path, 'icon_url': icon_url } return render(request, 'pkgsinfo/detail.html', context=context) if request.method == 'POST': return HttpResponse(json.dumps({ 'result': 'failed', 'exception_type': 'MethodNotSupported', 'detail': 'POST/PUT/DELETE should use the API' }), content_type='application/json', status=404)
def index(request, manifest_path=None): '''Returns manifest list or detail''' if manifest_path and request.is_ajax(): # return manifest detail if request.method == 'GET': LOGGER.debug("Got read request for %s", manifest_path) try: plist = Plist.read('manifests', manifest_path) except (FileDoesNotExistError, FileReadError), err: return HttpResponse( json.dumps({'result': 'failed', 'exception_type': str(type(err)), 'detail': str(err)}), content_type='application/json', status=404) manifest_text = plistlib.writePlistToString(plist) context = {'plist_text': manifest_text, 'pathname': manifest_path} return render(request, 'manifests/detail.html', context=context) if request.method == 'POST': return HttpResponse( json.dumps({'result': 'failed', 'exception_type': 'MethodNotSupported', 'detail': 'POST/PUT/DELETE should use the API'}), content_type='application/json', status=404)
json.dumps({"result": "failed", "exception_type": str(type(err)), "detail": str(err)}), content_type="application/json", status=403, ) if response_type == "json": response = convert_dates_to_strings(response) else: filter_terms = request.GET.copy() if "_" in filter_terms.keys(): del filter_terms["_"] if "api_fields" in filter_terms.keys(): api_fields = filter_terms["api_fields"].split(",") del filter_terms["api_fields"] else: api_fields = None item_list = Plist.list(kind) response = [] for item_name in item_list: if api_fields == ["filename"] and filter_terms.keys() in ([], ["filename"]): # don't read each manifest if all we want is filenames plist = {"filename": item_name} if "filename" in filter_terms.keys(): if filter_terms["filename"].lower() not in item_name: continue response.append(plist) else: plist = Plist.read(kind, item_name) plist = convert_dates_to_strings(plist) plist["filename"] = item_name matches_filters = True for key, value in filter_terms.items():
json.dumps({'result': 'failed', 'exception_type': str(type(err)), 'detail': str(err)}), content_type='application/json', status=403) if response_type == 'json': response = convert_dates_to_strings(response) else: filter_terms = request.GET.copy() if '_' in filter_terms.keys(): del filter_terms['_'] if 'api_fields' in filter_terms.keys(): api_fields = filter_terms['api_fields'].split(',') del filter_terms['api_fields'] else: api_fields = None item_list = Plist.list(kind) response = [] for item_name in item_list: if (api_fields == ['filename'] and filter_terms.keys() in ([], ['filename'])): # don't read each manifest if all we want is filenames plist = {'filename': item_name} if 'filename' in filter_terms.keys(): if filter_terms['filename'].lower() not in item_name: continue response.append(plist) else: plist = Plist.read(kind, item_name) if response_type == 'json': plist = convert_dates_to_strings(plist) if kind == 'catalogs':