Esempio n. 1
0
def safe_join(base, *paths):
    """
    A version of django.utils._os.safe_join for S3 paths.

    Joins one or more path components to the base path component
    intelligently. Returns a normalized version of the final path.

    The final path must be located inside of the base path component
    (otherwise a ValueError is raised).

    Paths outside the base path indicate a possible security
    sensitive operation.
    """
    base_path = force_text(base)
    base_path = base_path.rstrip('/')
    paths = [force_text(p) for p in paths]

    final_path = base_path
    for path in paths:
        final_path = urlparse.urljoin(final_path.rstrip('/') + "/", path)

    # Ensure final_path starts with base_path and that the next character after
    # the final path is '/' (or nothing, in which case final_path must be
    # equal to base_path).
    base_path_len = len(base_path)
    if (not final_path.startswith(base_path) or
            final_path[base_path_len:base_path_len + 1] not in ('', '/')):
        raise ValueError('the joined path is located outside of the base path'
                         ' component')

    return final_path.lstrip('/')
Esempio n. 2
0
def safe_join(base, *paths):
    """
    A version of django.utils._os.safe_join for S3 paths.

    Joins one or more path components to the base path component
    intelligently. Returns a normalized version of the final path.

    The final path must be located inside of the base path component
    (otherwise a ValueError is raised).

    Paths outside the base path indicate a possible security
    sensitive operation.
    """
    base_path = force_text(base)
    base_path = base_path.rstrip("/")
    paths = [force_text(p) for p in paths]

    final_path = base_path
    for path in paths:
        final_path = urlparse.urljoin(final_path.rstrip("/") + "/", path)

    # Ensure final_path starts with base_path and that the next character after
    # the final path is '/' (or nothing, in which case final_path must be
    # equal to base_path).
    base_path_len = len(base_path)
    if not final_path.startswith(base_path) or final_path[base_path_len : base_path_len + 1] not in ("", "/"):
        raise ValueError("the joined path is located outside of the base path" " component")

    return final_path.lstrip("/")
Esempio n. 3
0
 def url(self, name):
     return urlparse.urljoin(self.base_url,
                             os.path.join(urlparse.quote_plus(self.db.name),
                             urlparse.quote_plus(name),
                             'content'))
Esempio n. 4
0
 def url(self, name):
     if self._base_url is None:
         raise ValueError("This file is not accessible via a URL.")
     return urlparse.urljoin(self._base_url, name).replace('\\', '/')
Esempio n. 5
0
 def url(self, filename):
     return urlparse.urljoin(self.base_url, filename).replace('\\', '/')
Esempio n. 6
0
 def url(self, name):
     return urlparse.urljoin(
         self.base_url,
         os.path.join(urlparse.quote_plus(self.db.name),
                      urlparse.quote_plus(name), 'content'))
Esempio n. 7
0
 def url(self, name):
     if self.base_url is None:
         raise ValueError("This file is not accessible via a URL.")
     return urlparse.urljoin(self.base_url, name).replace("\\", "/")
Esempio n. 8
0
 def url(self, filename):
     return urlparse.urljoin(self.base_url, filename).replace('\\', '/')