Esempio n. 1
0
def urlunquote_plus(quoted_url):
    """
    A wrapper for Python's ``urllib.unquote_plus()`` function that can operate
    on unicode strings.
    """
    if six.PY3:
        return unquote_plus(quoted_url)
    else:
        return latin_to_unicode(unquote_plus(force_bytes(quoted_url)))
Esempio n. 2
0
def _parse_param(raw_string):
    """ Parse one input or output item. """
    items = (item.partition('=') for item in raw_string.split("@"))
    attr = {}
    id_, dlm, data = next(items)
    id_ = unquote_plus(id_)
    data = unquote_plus(data) if dlm else None
    for key, dlm, value in items:
        attr[unquote_plus(key)] = unquote_plus(value) if dlm else None
    return id_, data, attr
Esempio n. 3
0
def parse_query_string(query_string):
    """ Parse URL query string preserving the URL-encoded
    DataInputs, ResponseDocument, and RawDataOutput WPS Execute parameters.
    Note that the standard parser URL-decodes the parameter values and, in cases
    when, e.g., a data input contains an percent-encoded separator
    ('%40' vs. '@') the encoded and non-encoded delimiters cannot
    be distinguished ('@' vs. '@') and the correct parsing cannot be guaranteed.
    """
    unescaped = set(('datainputs', 'responsedocument', 'rawdataoutput'))
    return dict(
        (key, value if key.lower() in unescaped else unquote_plus(value))
        for key, value in ((unquote_plus(key), value) for key, _, value in (
            item.partition('=') for item in query_string.split('&'))))
Esempio n. 4
0
    def config(default=None):
        """
        :return: dict
        """

        try:
            redis_connection_url = os.getenv('REDIS_SESSION_URL', default)
            match = re.match(
                r'redis://(:(?P<password>[^@]*)@)?(?P<host>[^:]+):(?P<port>\d+)(/(?P<index>\d+))?',
                redis_connection_url)
            if not match:
                raise Exception()

            if match.group('password') is None:
                password = None
            else:
                password = unquote_plus(match.group('password'))

            redis_connection_dict = {
                'host': match.group('host'),
                'port': match.group('port'),
                'db': match.group('index') or 0,
                'password': password,
                'prefix': os.getenv('REDIS_SESSION_PREFIX', 'session'),
                'socket_timeout': os.getenv('REDIS_SESSION_SOCKET_TIMEOUT', 1),
            }

            return redis_connection_dict
        except Exception as e:
            raise Exception(
                "Could not parse Redis session URL. Please verify 'REDIS_SESSION_URL' value"
            )
def get_wordpress_user(request):
    cookie_hash = hashlib.md5(force_bytes(get_site_url())).hexdigest()
    cookie = request.COOKIES.get('wordpress_logged_in_' + cookie_hash)

    if cookie:
        cookie = unquote_plus(cookie)
        return _validate_auth_cookie(cookie)
Esempio n. 6
0
def save_metadata(metadata_dict, document, create=False):
    """
    Take a dictionary of metadata type & value and associate it to a
    document
    """
    if create:
        # Use matched metadata now to create document metadata
        document_metadata, created = DocumentMetadata.objects.get_or_create(
            document=document,
            metadata_type=get_object_or_404(
                MetadataType,
                pk=metadata_dict['id'])
        )
    else:
        try:
            document_metadata = DocumentMetadata.objects.get(
                document=document,
                metadata_type=get_object_or_404(
                    MetadataType,
                    pk=metadata_dict['id']
                ),
            )
        except DocumentMetadata.DoesNotExist:
            # TODO: Maybe return warning to caller?
            document_metadata = None

    # Handle 'plus sign as space' in the url

    # unquote_plus handles utf-8?!?
    # http://stackoverflow.com/questions/4382875/handling-iri-in-django
    # .decode('utf-8')
    if document_metadata:
        document_metadata.value = unquote_plus(metadata_dict['value'])
        document_metadata.save()
Esempio n. 7
0
def save_metadata(metadata_dict, document, create=False):
    """
    Take a dictionary of metadata type & value and associate it to a
    document
    """
    if create:
        # Use matched metadata now to create document metadata
        document_metadata, created = DocumentMetadata.objects.get_or_create(
            document=document,
            metadata_type=get_object_or_404(MetadataType,
                                            pk=metadata_dict['id']))
    else:
        try:
            document_metadata = DocumentMetadata.objects.get(
                document=document,
                metadata_type=get_object_or_404(MetadataType,
                                                pk=metadata_dict['id']),
            )
        except DocumentMetadata.DoesNotExist:
            # TODO: Maybe return warning to caller?
            document_metadata = None

    # Handle 'plus sign as space' in the url

    # unquote_plus handles utf-8?!?
    # http://stackoverflow.com/questions/4382875/handling-iri-in-django
    # .decode('utf-8')
    if document_metadata:
        document_metadata.value = unquote_plus(metadata_dict['value'])
        document_metadata.save()
def get_wordpress_user(request):
    cookie_hash = hashlib.md5(force_bytes(get_site_url())).hexdigest()
    cookie = request.COOKIES.get("wordpress_logged_in_" + cookie_hash)

    if cookie:
        cookie = unquote_plus(cookie)
        return _validate_auth_cookie(cookie)
 def __init__(self, url):
     if isinstance(url, string_types):
         parsed = urlparse(url)
         self.parsed = parsed._replace(query=frozenset(
             parse_qsl(parsed.query)),
                                       path=unquote_plus(parsed.path))
     else:  # It's already a URL.
         self.parsed = url.parsed
Esempio n. 10
0
 def __init__(self, staging_folder, filename=None, encoded_filename=None):
     self.staging_folder = staging_folder
     if encoded_filename:
         self.encoded_filename = str(encoded_filename)
         self.filename = base64.urlsafe_b64decode(
             unquote_plus(self.encoded_filename)).decode('utf8')
     else:
         self.filename = filename
         self.encoded_filename = quote_plus(
             base64.urlsafe_b64encode(filename.encode('utf8')))
Esempio n. 11
0
def get_wordpress_user(request):
    if WORDPRESS_COOKIEHASH is None:
        cookie_hash = hashlib.md5(force_bytes(get_site_url())).hexdigest()
    else:
        cookie_hash = WORDPRESS_COOKIEHASH

    cookie = request.COOKIES.get('wordpress_logged_in_' + cookie_hash)

    if cookie:
        cookie = unquote_plus(cookie)
        return _validate_auth_cookie(cookie)
Esempio n. 12
0
 def __init__(self, staging_folder, filename=None, encoded_filename=None):
     self.staging_folder = staging_folder
     if encoded_filename:
         self.encoded_filename = str(encoded_filename)
         self.filename = base64.urlsafe_b64decode(
             unquote_plus(self.encoded_filename)
         ).decode('utf8')
     else:
         self.filename = filename
         self.encoded_filename = quote_plus(base64.urlsafe_b64encode(
             filename.encode('utf8')
         ))
Esempio n. 13
0
    def get(self, request, *args, **kwargs):
        def unwhitespace(val):
            return " ".join(val.split())

        if 'ps_q' in request.GET:
            # Keeping Unicode in URL, replacing space with '+'.
            query = uri_to_iri(urlquote_plus(unwhitespace(
                request.GET['ps_q'])))
            params = {'query': query} if query else None
            return HttpResponseRedirect(reverse_lazy('search', kwargs=params))
        query = kwargs['query'] or ''  # Avoiding query=None
        self.query = unwhitespace(unquote_plus(query))
        return super().get(request, *args, **kwargs)
Esempio n. 14
0
 def get(self, request, *args, **kwargs):
     def unwhitespace(val):
         return " ".join(val.split())
     if 'ps_q' in request.GET:
         # Keeping Unicode in URL, replacing space with '+'.
         query = uri_to_iri(urlquote_plus(unwhitespace(request.GET['ps_q'])))
         params = {'query': query} if query else None
         return HttpResponseRedirect(reverse_lazy('search', kwargs=params))
     query = kwargs['query'] or ''  # Avoiding query=None
     self.query = unwhitespace(unquote_plus(query))
     # Exclude places whose owner blocked unauthenticated viewing.
     if not request.user.is_authenticated:
         self.queryset = self.queryset.exclude(owner__pref__public_listing=False)
     return super().get(request, *args, **kwargs)
Esempio n. 15
0
 def get(self, request, *args, **kwargs):
     if 'ps_q' in request.GET:
         # Keeping Unicode in URL, replacing space with '+'
         query = uri_to_iri(urlquote_plus(request.GET['ps_q']))
         params = {'query': query} if query else None
         return HttpResponseRedirect(reverse_lazy('search', kwargs=params))
     query = kwargs['query'] or ''  # Avoiding query=None
     self.query = unquote_plus(query)
     if self.query:
         try:
             geocoder = geopy.geocoders.OpenCage(settings.OPENCAGE_KEY, timeout=5)
             self.locations = geocoder.geocode(self.query, language=lang, exactly_one=False)
         except (GeocoderTimedOut, GeocoderServiceError) as e:
             self.locations = []
     return super(SearchView, self).get(request, *args, **kwargs)
Esempio n. 16
0
 def get(self, request, *args, **kwargs):
     if 'ps_q' in request.GET:
         # Keeping Unicode in URL, replacing space with '+'
         query = uri_to_iri(urlquote_plus(request.GET['ps_q']))
         params = {'query': query} if query else None
         return HttpResponseRedirect(reverse_lazy('search', kwargs=params))
     query = kwargs['query'] or ''  # Avoiding query=None
     self.query = unquote_plus(query)
     if self.query:
         try:
             geocoder = geopy.geocoders.OpenCage(settings.OPENCAGE_KEY, timeout=5)
             self.locations = geocoder.geocode(self.query, language=lang, exactly_one=False)
         except (GeocoderTimedOut, GeocoderServiceError) as e:
             self.locations = []
     return super(SearchView, self).get(request, *args, **kwargs)
Esempio n. 17
0
 def __init__(self, url):
     if isinstance(url, string_types):
         parsed = urlparse(url)
         self.parsed = parsed._replace(query=frozenset(parse_qsl(parsed.query)), path=unquote_plus(parsed.path))
     else:  # It's already a URL.
         self.parsed = url.parsed
Esempio n. 18
0
def urlunquote_plus(quoted_url):
    """
    A wrapper for Python's urllib.unquote_plus() function that can operate on
    the result of django.utils.http.urlquote_plus().
    """
    return force_text(unquote_plus(force_str(quoted_url)))
Esempio n. 19
0
def urlunquote_plus(quoted_url):
    """
    A wrapper for Python's urllib.unquote_plus() function that can operate on
    the result of django.utils.http.urlquote_plus().
    """
    return force_text(unquote_plus(force_str(quoted_url)))
Esempio n. 20
0
from __future__ import unicode_literals
Esempio n. 21
0
    def parse_query(self, query):
        """Parses the arguments of the uri, and modifies the
        ReportConfig-object configuration.

        :param query: a dict representing the argument-part of the uri

        """

        ## config is the configuration obtained from the configuration file
        config = self.configuration
        fields = {}
        nott = {}
        operator = {}
        safere = re.compile("(select|drop|update|delete).*(from|where)", re.I)

        for key, value in query.items():

            if key == "sql" or key == "query":
                #error("Access to make SQL-querys permitted")
                pass
            elif key == "title":
                config.title = value
            elif key == "order_by" or key == "sort":
                config.order_by = value.split(",") + config.order_by
            elif key == "skjul" or key == "hidden" or key == "hide":
                config.hidden.extend(value.split(","))
            elif key == "ekstra" or key == "extra":
                config.extra.extend(value.split(","))
            elif key == "sum" or key == "total":
                config.sum.extend(value.split(","))
            elif key == "offset":
                config.offset = value
            elif key == "limit":
                config.limit = value
            else:
                pattern = re.compile(r"^(?P<group>\S+?)_(?P<groupkey>\S+?)$")
                match = pattern.search(key)

                if match:
                    group = unquote_plus(match.group('group'))
                    group_key = unquote_plus(match.group('groupkey'))
                    if group in ("navn", "name"):
                        config.name[group_key] = value
                    elif group in ("url", "uri"):
                        config.uri[group_key] = value
                    elif group in ("forklar", "explain", "description"):
                        config.explain[group_key] = value
                    elif group == "not":
                        nott[group_key] = value
                    elif group == "op":
                        operator[group_key] = value
                    else:
                        match = None

                if not match:
                    if value:
                        fields[unquote_plus(key)] = unquote_plus(value)

        for key, value in fields.items():

            if not key in operator:
                operator[key] = "eq"
            # Set a default operator
            operat = "="

            if key in nott:
                neg = "not "
            else:
                neg = ""

            if value == "null":
                if neg:
                    operat = "is not"
                    neg = ""
                else:
                    operat = "is"
            else:
                if safere.search(value):
                    config.error = ("You are not allowed to make advanced sql"
                                    " terms")
                else:
                    if operator[key] == "eq":
                        if neg:
                            operat = "<>"
                            neg = ""
                        else:
                            operat = "="
                        value = intstr(value)
                    elif operator[key] == "like":
                        operat = "ilike"
                        value = intstr(value.replace("*", "%"))
                    elif operator[key] == "gt":
                        if neg:
                            operat = "<="
                            neg = ""
                        else:
                            operat = ">"
                        value = intstr(value)

                    elif operator[key] == "geq":
                        if neg:
                            operat = "<"
                            neg = ""
                        else:
                            operat = ">="
                        value = intstr(value)
                    elif operator[key] == "lt":
                        if neg:
                            operat = ">="
                            neg = ""
                        else:
                            operat = "<"
                        value = intstr(value)
                    elif operator[key] == "leq":
                        if neg:
                            operat = ">"
                            neg = ""
                        else:
                            operat = "<="
                        value = intstr(value)
                    elif operator[key] == "in":
                        operat = "in"
                        inlist = value.split(",")
                        if inlist:
                            value = "(%s)" % ",".join(intstr(a.strip())
                                                      for a in inlist)
                        else:
                            config.error = ("The arguments to 'in' must be "
                                            "comma separated")

                    elif operator[key] == "between":
                        operat = "between"
                        between = value.split(",")
                        if not len(between) == 2:
                            between = value.split(":")
                        if len(between) == 2:
                            value = "%s and %s" % (intstr(between[0]),
                                                   intstr(between[1]))
                        else:
                            config.error = ("The arguments to 'between' must "
                                            "be comma separated")

            # query is now a unicode QueryDict to dict()...
            # here be DRAGONS, cute shoulder dragons!
            key = key.encode('UTF8')
            config.where.append(key + " " + neg + operat + " " + value)
        return fields, nott, operator