from django.http import HttpResponsePermanentRedirect
from django.template import Library
from django.template.base import Node
import django.templatetags.future
from django.core import urlresolvers

class HttpsUrls(object):
    def process_view(self, request, view_func, view_args, view_kwargs):
        https_wanted = view_kwargs.pop("https", False)
        if request.method == "GET" \
        and https_wanted \
        and not request.is_secure():
            return HttpResponsePermanentRedirect \
                ("https://%s%s" % (request.get_host(), request.get_full_path()))

class HttpsUrlNode(Node):
    def __init__(self, url_node):
        self.url_node = url_node

    def render(self, context):
        url_string = self.url_node.render(context)
        match = urlresolvers.resolve(url_string)
        if match.kwargs.get("https", False):
            url_string = "https://%s%s" % (context["request"].get_host(), url_string)
        return url_string

def url(parser, token):
    return HttpsUrlNode(django.templatetags.future.url(parser, token))
django.templatetags.future.register.tag(url)