예제 #1
0
    async def do_put(self, request: DAVRequest) -> DAVResponse:
        if not request.lock_token_is_parsed_success:
            return DAVResponse(412)

        # check etag
        if request.lock_token_etag:
            etag = await self._do_get_etag(request)
            if etag != request.lock_token_etag:
                return DAVResponse(412)

        if request.lock_token_path is None:
            locked_path = request.src_path
        else:
            locked_path = request.lock_token_path

        if await self.dav_lock.is_locking(locked_path, request.lock_token):
            return DAVResponse(423)

        http_status = await self._do_put(request)
        return DAVResponse(http_status)
예제 #2
0
    async def do_lock(self, request: DAVRequest) -> DAVResponse:
        # TODO
        if (not request.body_is_parsed_success
                or not request.lock_token_is_parsed_success):
            return DAVResponse(400)
        elif request.lock_token:
            # refresh
            lock_info = await self.dav_lock.refresh(request.lock_token)
        else:
            # new
            lock_info = await self.dav_lock.new(request)
            if lock_info is None:
                return DAVResponse(423)

        message = self._create_lock_response(lock_info)
        headers = {
            b"Lock-Token":
            "opaquelocktoken:{}".format(lock_info.token).encode("utf-8"),
        }
        response = DAVResponse(status=200, headers=headers, message=message)
        return response
예제 #3
0
 async def get_options(self, request: DAVRequest) -> DAVResponse:  # TODO
     headers = {
         b"Allow": ",".join(DAV_METHODS).encode("utf-8"),
         b"DAV": b"1, 2",
     }
     return DAVResponse(status=200, headers=headers)