Exemplo n.º 1
0
def episode(request, episode):

    site = RequestSite(request)
    podcast = episode.podcast

    if not check_publisher_permission(request.user, podcast):
        return HttpResponseForbidden()

    if request.method == 'POST':
        form = None  # EpisodeForm(request.POST, instance=e)
        # if form.is_valid():
        #    form.save()

    elif request.method == 'GET':
        form = None  # EpisodeForm(instance=e)

    timeline_data = list(episode_listener_data(episode))

    return render(
        request,
        'publisher/episode.html',
        {
            'is_secure': request.is_secure(),
            'domain': site.domain,
            'episode': episode,
            'podcast': podcast,
            'form': form,
            'timeline_data': timeline_data,
        },
    )
Exemplo n.º 2
0
def episode(request, episode):

    site = RequestSite(request)
    podcast = episode.podcast

    if not check_publisher_permission(request.user, podcast):
        return HttpResponseForbidden()

    if request.method == "POST":
        form = None  # EpisodeForm(request.POST, instance=e)
        # if form.is_valid():
        #    form.save()

    elif request.method == "GET":
        form = None  # EpisodeForm(instance=e)

    timeline_data = list(episode_listener_data(episode))

    return render(
        request,
        "publisher/episode.html",
        {
            "is_secure": request.is_secure(),
            "domain": site.domain,
            "episode": episode,
            "podcast": podcast,
            "form": form,
            "timeline_data": timeline_data,
        },
    )
Exemplo n.º 3
0
    def get_track_kwargs(self, request, response=None):
        """
        Get kwargs that can be passed to the TRACKING_FUNCTION (track_page_view by default).

        Return value must be JSON serializable if settings.PIWIK_USE_CELERY.
        """
        # copy the META members that might actually be HTTP headers
        headers = dict((
            k, v.decode('cp1250')
        )  # There have been some wacky bytes in headers. Make sure they can be JSON serialized
                       for k, v in request.META.items()
                       if isinstance(k, str) and isinstance(v, str))
        headers['HTTPS'] = request.is_secure()

        userid = request.user.username if hasattr(
            request, 'user') and request.user.is_authenticated else None

        kwargs = {
            'headers': headers,
            'title': None,
            'userid': userid,
            'reqtime': time.time(),
            #'session_key': request.COOKIES.get(SESSION_COOKIE_NAME, None),
            'status_code': response.status_code if response else None,
        }
        return kwargs
Exemplo n.º 4
0
def episode(request, episode):

    site = RequestSite(request)
    podcast = episode.podcast

    if not check_publisher_permission(request.user, podcast):
        return HttpResponseForbidden()

    if request.method == 'POST':
        form = None  # EpisodeForm(request.POST, instance=e)
        # if form.is_valid():
        #    form.save()

    elif request.method == 'GET':
        form = None  # EpisodeForm(instance=e)

    timeline_data = list(episode_listener_data(episode))

    return render(
        request,
        'publisher/episode.html',
        {
            'is_secure': request.is_secure(),
            'domain': site.domain,
            'episode': episode,
            'podcast': podcast,
            'form': form,
            'timeline_data': timeline_data,
        },
    )
Exemplo n.º 5
0
    def get_track_kwargs(self, request, response=None):
        """
        Get kwargs that can be passed to the TRACKING_FUNCTION (track_page_view by default).

        Return value must be JSON serializable if settings.PIWIK_USE_CELERY.
        """
        # copy the META members that might actually be HTTP headers
        headers = dict(
            (k, v.decode('cp1250')) # There have been some wacky bytes in headers. Make sure they can be JSON serialized
            for k,v in request.META.items()
            if isinstance(k, str) and isinstance(v, str)
        )
        headers['HTTPS'] = request.is_secure()

        userid = request.user.username if hasattr(request, 'user') and request.user.is_authenticated else None

        kwargs = {
            'headers': headers,
            'title': None,
            'userid': userid,
            'reqtime': time.time(),
            #'session_key': request.COOKIES.get(SESSION_COOKIE_NAME, None),
            'status_code': response.status_code if response else None,
        }
        return kwargs
Exemplo n.º 6
0
    def process_response(self, request, response):

        try:
            if response.status_code == 404:

                log('got 404')
                url = request.get_full_path()
                parts = urlsplit(url)

                if parts.scheme == '':
                    if request.is_secure():
                        scheme = 'https'
                    else:
                        scheme = 'http'
                else:
                    scheme = parts.scheme

                old_host = request.get_host()
                new_host = settings.PROXY_404_SERVER
                if new_host != old_host:

                    log(f'old host: {old_host}, new host: {new_host}') #DEBUG
                    new_url = urlunsplit([scheme, new_host,
                        parts.path, parts.query, parts.fragment])
                    log(f'url: {url}') #DEBUG
                    log('parts: %s' % repr(parts)) #DEBUG
                    log(f'new url: {new_url}') #DEBUG

                    try:
                        log(f'opening {new_url}') #DEBUG
                        stream = urllib.request.urlopen(new_url)
                        log(f'reading {new_url}') #DEBUG
                        try:
                            new_response = http.HttpResponse(stream.read())
                        finally:
                            stream.close()
                        if new_response.status_code == 404:
                            log('404 ' % new_url) #DEBUG
                        else:
                            log(f'got {new_url}') #DEBUG
                            response = new_response

                    except Exception:
                        # just log it and return the exsting 404
                        log(f'url: {url}')
                        log('parts: %s' % repr(parts))
                        log(f'new url: {new_url}')
                        log(traceback.format_exc())

        except Exception:
            log(traceback.format_exc())
            raise

        return response
Exemplo n.º 7
0
def get_base_url(request=None):
    proto = 'https' if request.is_secure() else 'http'
    addr = request.META.get("SERVER_ADDR")
    if not addr:
        addr = request.get_host()
    else:
        port = int(request.META.get("SERVER_PORT", 80))
        if ((proto == 'http' and port != 80)
                or (proto == 'https' and port != 443)):
            addr = "%s:%d" % (addr, port)

    try:
        IPv6Address(addr)
        addr = "[%s]" % addr
    except:
        pass

    return "%s://%s" % (proto, addr)
Exemplo n.º 8
0
def store_data(request):
    """Save user PII and budget info to database"""
    # Process form data if POST request
    if request.method == 'POST':
        form = SubmitBudgetForm(request.POST)

        if form.is_valid():
            email = form.cleaned_data['email']
            ward = form.cleaned_data['ward']
            budget = form.cleaned_data['json_data']

            # Generate a new uuid
            id = uuid.uuid4()

            # save to database
            new_budget = models.BudgetSubmission()
            new_budget.the_id = id
            new_budget.submitter_email = email
            new_budget.submitter_json = json.loads(budget)
            new_budget.submitter_ward = ward
            new_budget.save()

            # send email to user
            send_email(email, id)

            # Confirm submitted data in template
            return render(
                request, 'store-data.html', {
                    'email':
                    email,
                    'ward':
                    ward,
                    'id':
                    id,
                    'viewUrl':
                    ('https://' if request.is_secure() else 'http://') +
                    request.get_host() + '/' + str(id) + '/view/'
                })
        else:
            return render(request, 'submit-budget.html', {'form': form})

    else:
        return redirect("/change-the-budget")
Exemplo n.º 9
0
def get_base_url(request=None):
    proto = 'https' if request.is_secure() else 'http'
    addr = request.META.get("SERVER_ADDR")
    if not addr:
        addr = request.get_host()
    else:
        port = int(request.META.get("SERVER_PORT", 80))
        if (
            (proto == 'http' and port != 80) or
            (proto == 'https' and port != 443)
        ):
            addr = "%s:%d" % (addr, port)

    try:
        IPv6Address(addr)
        addr = "[%s]" % addr
    except:
        pass

    return "%s://%s" % (proto, addr)
Exemplo n.º 10
0
def transDownloadView(request, slug):
    import urllib.request
    try:
        query_data = Transmission.objects.filter(slug=slug)
        if not query_data:
            raise Http404
    except Transmission.DoesNotExist:
        raise Http404
    query_data2 = limit_transmission_history(request, query_data)
    if not query_data2:
        raise Http404  # Just raise 404 if its too old
    restricted, new_query = restrict_talkgroups(request, query_data)
    if not new_query:
        raise Http404
    trans = new_query[0]
    if trans.audio_file_type == 'm4a':
        audio_type = 'audio/m4a'
    else:
        audio_type = 'audio/mp3'
    response = HttpResponse(content_type=audio_type)
    start_time = timezone.localtime(
        trans.start_datetime).strftime('%Y%m%d_%H%M%S')
    filename = '{}_{}.{}'.format(start_time, trans.talkgroup_info.slug,
                                 trans.audio_file_type)
    response['Content-Disposition'] = 'attachment; filename="{}"'.format(
        filename)
    url = 'https:{}{}.{}'.format(trans.audio_url, trans.audio_file,
                                 trans.audio_file_type)
    if trans.audio_url[:2] != '//':
        url = 'http:'
        if request.is_secure():
            url = 'https:'
        url += '//{}/{}{}.{}'.format(request.get_host(), trans.audio_url,
                                     trans.audio_file, trans.audio_file_type)
    req = urllib.request.Request(url)
    with urllib.request.urlopen(req) as web_response:
        response.write(web_response.read())
    return response
Exemplo n.º 11
0
 def get_redirect_url(cls, request):
     protocol = "http" + ("s" if request.is_secure() else "") + "://"
     return protocol + request.get_host() + reverse(
         "utils:facebook_connect")
Exemplo n.º 12
0
def plugin_fcgi_client(request, name, oid, path):
    """
    This is a view that works as a FCGI client
    It is used for development server (no nginx) for easier development
    """
    jc = JailsConfiguration.objects.all()
    if not jc.exists():
        raise Http404

    jc = jc[0]

    qs = models.Plugins.objects.filter(id=oid, plugin_name=name)
    if not qs.exists():
        raise Http404

    plugin = qs[0]
    try:
        jail = Jails.objects.filter(jail_host=plugin.plugin_jail)[0]
    except IndexError:
        raise Http404
    jail_ip = jail.jail_ipv4_addr

    fastcgi_env_path = "%s/%s/%s/fastcgi_env" % (jc.jc_path, jail.jail_host,
                                                 plugin.plugin_path)

    app = FCGIApp(host=str(jail_ip), port=plugin.plugin_port)
    env = request.META.copy()

    try:
        if os.path.exists(fastcgi_env_path):
            plugin_fascgi_env = {}
            exec(
                compile(
                    open(fastcgi_env_path).read(), fastcgi_env_path, 'exec'),
                {}, plugin_fascgi_env)
            env.update(plugin_fascgi_env)

    except Exception as e:
        log.debug("Failed to update CGI headers: %s", e)

    env.pop('wsgi.file_wrapper', None)
    env.pop('wsgi.version', None)
    env.pop('wsgi.input', None)
    env.pop('wsgi.errors', None)
    env.pop('wsgi.multiprocess', None)
    env.pop('wsgi.run_once', None)
    env['SCRIPT_NAME'] = env['PATH_INFO']
    if request.is_secure():
        env['HTTPS'] = 'on'

    # Always use Ipv4 to talk to plugins
    try:
        host_ip = get_ipv4_addr()
        if host_ip:
            env['SERVER_ADDR'] = host_ip
            env['HTTP_HOST'] = host_ip
    except:
        log.debug('Failed to get default ipv4 for plugin comm', exc_info=True)

    args = request.POST if request.method == "POST" else request.GET
    try:
        status, headers, body, err = app(env, args=args)
    except socket.error as e:
        resp = HttpResponse(str(e))
        resp.status_code = 503
        return resp

    if err:
        log.debug('Error in FastCGI proxy call %r', err)

    resp = HttpResponse(body)
    for header, value in headers:
        resp[header] = value
    return resp
Exemplo n.º 13
0
def plugin_fcgi_client(request, name, oid, path):
    """
    This is a view that works as a FCGI client
    It is used for development server (no nginx) for easier development
    """
    jc = JailsConfiguration.objects.all()
    if not jc.exists():
        raise Http404

    jc = jc[0]

    qs = models.Plugins.objects.filter(id=oid, plugin_name=name)
    if not qs.exists():
        raise Http404

    plugin = qs[0]
    try:
        jail = Jails.objects.filter(jail_host=plugin.plugin_jail)[0]
    except IndexError:
        raise Http404
    jail_ip = jail.jail_ipv4_addr

    fastcgi_env_path = "%s/%s/%s/fastcgi_env" % (
        jc.jc_path, jail.jail_host, plugin.plugin_path
    )

    app = FCGIApp(host=str(jail_ip), port=plugin.plugin_port)
    env = request.META.copy()

    try:
        if os.path.exists(fastcgi_env_path):
            plugin_fascgi_env = { }
            exec(compile(open(fastcgi_env_path).read(), fastcgi_env_path, 'exec'), {}, plugin_fascgi_env)
            env.update(plugin_fascgi_env)

    except Exception as e:
        log.debug("Failed to update CGI headers: %s", e)

    env.pop('wsgi.file_wrapper', None)
    env.pop('wsgi.version', None)
    env.pop('wsgi.input', None)
    env.pop('wsgi.errors', None)
    env.pop('wsgi.multiprocess', None)
    env.pop('wsgi.run_once', None)
    env['SCRIPT_NAME'] = env['PATH_INFO']
    if request.is_secure():
        env['HTTPS'] = 'on'

    # Always use Ipv4 to talk to plugins
    try:
        host_ip = get_ipv4_addr()
        if host_ip:
            env['SERVER_ADDR'] = host_ip
            env['HTTP_HOST'] = host_ip
    except:
        log.debug('Failed to get default ipv4 for plugin comm', exc_info=True)

    args = request.POST if request.method == "POST" else request.GET
    try:
        status, headers, body, err = app(env, args=args)
    except socket.error as e:
        resp = HttpResponse(str(e))
        resp.status_code = 503
        return resp

    if err:
        log.debug('Error in FastCGI proxy call %r', err)

    resp = HttpResponse(body)
    for header, value in headers:
        resp[header] = value
    return resp