def distro_serve(request, path, document_root=None, show_indexes=False): filename = os.path.basename(path) distro = Distribution.objects.get(content=path) if not request.user.is_authenticated(): user = login_basic_auth(request) if user: login(request, user) logger.debug( "User `{0.user}` dowdloads distro `{1}` of package {2}".format(request, filename, distro.release.package)) if user_can_download(request, distro): logger.debug("User `{0.user}` download distro `{1}` of package {2}".format(request, filename, distro.release.package)) return static.serve(request, path, document_root) logger.error("User `{0.user}` cannot access to distro `{1}` of package {2}".format(request, filename, distro.release.package)) return HttpResponseForbidden()
def get(self, request, *args, **kwargs): path = self.kwargs['path'] filename = os.path.basename(path) # filename = re.sub("(\.zip|\.tar\.gz|\.tar)$", "", filename) # parts = pkg_resources.parse_version(filename) distro = models.Distribution.objects.get(content=path) logger.debug( "User `{0.user}` dowdloads distro `{1}` of package {2}".format(request, filename, distro.release.package)) if user_can_download(request.user, distro): logger.debug("User `{0.user}` download distro `{1}` of package {2}".format(request, filename, distro.release.package)) response = HttpResponse() response['X-Accel-Redirect'] = "/".join((self.redirect_to, path)) response['Content-Type'] = '' return response else: logger.error("User `{0.user}` cannot access to distro `{1}` of package {2}".format(request, filename, distro.release.package)) return HttpResponseForbidden()
def can_download(context, distro): request = context['request'] has_perm = user_can_download(request, distro) logger.debug('Check if {request.user} can download {distro.release.package}: {has_perm}'.format(**locals())) return has_perm