def get_license_api(request, path): path = iri_to_uri(path) result = test_path(path, request) if not result: raise Http404 target_type = result[0] path = result[1] if target_type == "dir": data = json.dumps( {"licenses": ["ERROR: License only shown for a single file."]}) else: license_digest_list = is_protected(path) license_list = License.objects.all_with_hashes(license_digest_list) if len(license_list) == 0: license_list = ["Open"] else: license_list = [{ "text": l.text, "digest": l.digest } for l in license_list] data = json.dumps({"licenses": license_list}) return HttpResponse(data, mimetype='application/json')
def get_textile_files(request): result = test_path(request.GET.get("path"), request) if not result: raise Http404 path = result[1] rendered_files = RenderTextFiles.find_and_render(path) if os.path.exists(os.path.join(path, settings.ANNOTATED_XML)): if rendered_files == None: rendered_files = {} rendered_files["Git Descriptions"] = render_descriptions(path) return HttpResponse(json.dumps(rendered_files))
def list_files_api(request, path): path = iri_to_uri(path) url = path result = test_path(path, request) if not result: raise Http404 target_type = result[0] path = result[1] if target_type: if target_type == "file": file_url = url if file_url[0] != "/": file_url = "/" + file_url path = os.path.dirname(path) url = os.path.dirname(url) listing = dir_list(url, path, human_readable=False) clean_listing = [] for entry in listing: if target_type == "file" and file_url != entry["url"]: # If we are getting a listing for a single file, skip the rest continue if len(entry["license_list"]) == 0: entry["license_list"] = ["Open"] clean_listing.append({ "name": entry["name"], "size": entry["size"], "type": entry["type"], "mtime": entry["mtime"], "url": entry["url"], }) data = json.dumps({"files": clean_listing}) else: data = json.dumps({"files": ["File not found."]}) return HttpResponse(data, mimetype='application/json')
def file_server_get(request, path): url = path result = test_path(path, request) internal = get_client_ip(request) in config.INTERNAL_HOSTS if not result: raise Http404 target_type = result[0] path = result[1] if not internal and BuildInfo.build_info_exists(path): try: build_info = BuildInfo(path) except IncorrectDataFormatException: # If we can't parse the BuildInfo. Return a HttpResponseForbidden. return HttpResponseForbidden( "Error parsing BUILD-INFO.txt") auth_groups = build_info.get("auth-groups") if auth_groups: auth_groups = auth_groups.split(",") auth_groups = [g.strip() for g in auth_groups] log.info("Checking membership in auth groups: %s", auth_groups) response = False try: for m in group_auth_modules: response = m.process_group_auth(request, auth_groups) if response: break except GroupAuthError: log.exception("GroupAuthError") response = render_to_response('group_auth_failure.html') response.status_code = 500 return response if response == False: return group_auth_failed_response(request, auth_groups) elif response == True: pass else: return response if target_type == "dir": # Generate a link to the parent directory (if one exists) if url != '/' and url != '': up_dir = "/" + os.path.split(url)[0] else: up_dir = None old_cwd = os.getcwd() os.chdir(path) header_content = _get_header_html_content(path) os.chdir(old_cwd) download = None if 'dl' in request.GET: download = request.GET['dl'] rendered_files = RenderTextFiles.find_and_render(path) if os.path.exists(os.path.join(path, settings.ANNOTATED_XML)): if rendered_files == None: rendered_files = {} rendered_files["Git Descriptions"] = render_descriptions(path) return render_to_response('dir_template.html', {'dirlist': dir_list(url, path), 'up_dir': up_dir, 'dl': download, 'revno': settings.VERSION, 'header_content': header_content, 'request': request, 'rendered_files': rendered_files }) # If the file listing doesn't contain the file requested for download, # return a 404. This prevents the download of BUILD-INFO.txt and other # hidden files. if not file_listed(path, url): raise Http404 if (internal or is_whitelisted(os.path.join('/', url)) or "key" in request.GET): # If user has a key, default to open digests = 'OPEN' else: digests = is_protected(path) response = None if not digests: # File has no license text but is protected response = HttpResponseForbidden( "You do not have permission to access this file.") elif digests == "OPEN": response = None else: for digest in digests: if not license_accepted(request, digest): # Make sure that user accepted each license one by one response = redirect( '/license?lic=' + digest + "&url=" + url) break # If we didn't have any other response, it's ok to send file now if not response: # psw0523 fix #response = send_file(path) response = send_my_file(path) return response