Esempio n. 1
0
    def dispatch(self, request, path, *args, **kwargs):
        """
        Basic dispatch handler for all requests coming to the
        :param request:
        :param path:
        :param args:
        :param kwargs:
        :return:
        """
        if path:
            self.path = path
            self.base_url = request.META['PATH_INFO'][:-len(self.path)]
        else:
            self.path = '/'
            self.base_url = request.META['PATH_INFO']

        self.user = request.user

        meta = request.META.get
        self.xbody = kwargs['xbody'] = None
        if (request.method.lower() != 'put'
                and "/xml" in meta('CONTENT_TYPE', '')
                and meta('CONTENT_LENGTH', 0) != ''
                and int(meta('CONTENT_LENGTH', 0)) > 0):

            # parse XML using defusedxmls parse function
            self.xbody = kwargs['xbody'] = etree.XPathDocumentEvaluator(
                parse(request,
                      etree.XMLParser(ns_clean=True, resolve_entities=True)),
                namespaces=WEBDAV_NSMAP)

        if request.method.upper() in self._allowed_methods():
            handler = getattr(self, request.method.lower(),
                              self.http_method_not_allowed)
        else:
            handler = self.http_method_not_allowed
        try:
            resp = handler(request, self.path, *args, **kwargs)
        except ResponseException as e:
            print(e)
            resp = e.response
        except PermissionDenied as pe:
            print(pe)
            resp = HttpResponseForbidden()
        except ValidationError as ve:
            print(ve)
            resp = HttpResponseBadRequest()

        if not 'Allow' in resp:
            methods = self._allowed_methods()
            if methods:
                resp['Allow'] = ", ".join(methods)
        if not 'Date' in resp:
            resp['Date'] = rfc1123_date(now())
        if self.server_header:
            resp['Server'] = self.server_header
        return resp
Esempio n. 2
0
    def dispatch(self, request, path, *args, **kwargs):
        if path:
            self.path = path
            self.base_url = request.META['PATH_INFO'][:-len(self.path)]
        else:
            self.path = '/'
            self.base_url = request.META['PATH_INFO']

        meta = request.META.get
        self.xbody = kwargs['xbody'] = None
        if (request.method.lower() != 'put'
                and "/xml" in meta('CONTENT_TYPE', '')
                and meta('CONTENT_LENGTH', 0) != ''
                and int(meta('CONTENT_LENGTH', 0)) > 0):
            self.xbody = kwargs['xbody'] = etree.XPathDocumentEvaluator(
                etree.parse(request, etree.XMLParser(ns_clean=True)),
                namespaces=WEBDAV_NSMAP)

        if request.method.upper() in self._allowed_methods():
            handler = getattr(self, request.method.lower(),
                              self.http_method_not_allowed)
        else:
            handler = self.http_method_not_allowed
        try:
            resp = handler(request, self.path, *args, **kwargs)
        except ResponseException as e:
            resp = e.response
        if not 'Allow' in resp:
            methods = self._allowed_methods()
            if methods:
                resp['Allow'] = ", ".join(methods)
        if not 'Date' in resp:
            resp['Date'] = rfc1123_date(now())
        if self.server_header:
            resp['Server'] = self.server_header
        return resp
Esempio n. 3
0
    def dispatch(self, request, path, *args, **kwargs):
        if path:
            self.path = path
            self.base_url = request.META['PATH_INFO'][:-len(self.path)]
        else:
            self.path = '/'
            self.base_url = request.META['PATH_INFO']

        meta = request.META.get
        self.xbody = kwargs['xbody'] = None
        if (request.method.lower() != 'put'
            and "/xml" in meta('CONTENT_TYPE', '')
            and meta('CONTENT_LENGTH', 0) != ''
            and int(meta('CONTENT_LENGTH', 0)) > 0):
            self.xbody = kwargs['xbody'] = etree.XPathDocumentEvaluator(
                etree.parse(request, etree.XMLParser(ns_clean=True)),
                namespaces=WEBDAV_NSMAP
            )

        if request.method.upper() in self._allowed_methods():
            handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
        else:
            handler = self.http_method_not_allowed
        try:
            resp = handler(request, self.path, *args, **kwargs)
        except ResponseException as e:
            resp = e.response
        if not 'Allow' in resp:
            methods = self._allowed_methods()
            if methods:
                resp['Allow'] = ", ".join(methods)
        if not 'Date' in resp:
            resp['Date'] = rfc1123_date(now())
        if self.server_header:
            resp['Server'] = self.server_header
        return resp
Esempio n. 4
0
 def getlastmodified(self):
     """Return the modified time as http_date."""
     return rfc1123_date(self.get_modified())
Esempio n. 5
0
 def getlastmodified(self):
     """Return the modified time as http_date."""
     return rfc1123_date(self.get_modified())
Esempio n. 6
0
 def getlastmodified(self):
     # ToDo: This is a property... it should not have a "get" in the name -> rename it
     """Return the modified time as http_date."""
     return rfc1123_date(self.get_modified())