예제 #1
0
  def get(self, path):
    """ get method """

    logging.debug("request to download: %s", path)
    # If the file is large, we want to abandon downloading
    # if user cancels the requests.
    # pylint: disable=attribute-defined-outside-init
    self.connection_closed = False

    self.set_header("Content-Disposition", "attachment")
    if not utils.check_path(path):
      self.write("Only relative paths are allowed")
      self.set_status(403)
      self.finish()
      return

    if path is None or not os.path.isfile(path):
      self.write("File %s  not found" % path)
      self.set_status(404)
      self.finish()
      return

    length = int(4 * 1024 * 1024)
    offset = int(0)
    while True:
      data = utils.read_chunk(path, offset=offset, length=length, escape_data=False)
      if self.connection_closed or 'data' not in data or len(data['data']) < length:
        break
      offset += length
      self.write(data['data'])
      self.flush()

    if 'data' in data:
      self.write(data['data'])
    self.finish()
예제 #2
0
  def get(self, path):
    """ get method """

    logging.debug("request to download: %s", path)
    # If the file is large, we want to abandon downloading
    # if user cancels the requests.
    # pylint: disable=attribute-defined-outside-init
    self.connection_closed = False

    self.set_header("Content-Disposition", "attachment")
    if not utils.check_path(path):
      self.write("Only relative paths are allowed")
      self.set_status(403)
      self.finish()
      return

    if path is None or not os.path.isfile(path):
      self.write("File %s  not found" % path)
      self.set_status(404)
      self.finish()
      return

    length = int(4 * 1024 * 1024)
    offset = int(0)
    while True:
      data = utils.read_chunk(path, offset=offset, length=length, escape_data=False)
      if self.connection_closed or 'data' not in data or len(data['data']) < length:
        break
      offset += length
      self.write(data['data'])
      self.flush()

    if 'data' in data:
      self.write(data['data'])
    self.finish()
예제 #3
0
    async def get(self, path):
        """ get method """

        handler = logging.StreamHandler()
        handler.setFormatter(
            anticrlf.LogFormatter('%(levelname)s:%(name)s:%(message)s'))
        logger = logging.getLogger(__name__)
        logger.addHandler(handler)
        logger.setLevel(logging.DEBUG)

        logger.debug("request to download: %s", path)

        # If the file is large, we want to abandon downloading
        # if user cancels the requests.
        # pylint: disable=attribute-defined-outside-init
        self.connection_closed = False

        self.set_header("Content-Disposition", "attachment")
        if not utils.check_path(path):
            self.write("Only relative paths are allowed")
            self.set_status(403)
            self.finish()
            return

        if path is None or not os.path.isfile(path):
            self.write(f"File {path} not found")
            self.set_status(404)
            self.finish()
            return

        length = int(4 * 1024 * 1024)
        offset = int(0)
        while True:
            data = await utils.read_chunk(path,
                                          offset=offset,
                                          length=length,
                                          escape_data=False)
            if self.connection_closed or 'data' not in data or len(
                    data['data']) < length:
                break
            offset += length
            self.write(data['data'])
            self.flush()

        if 'data' in data:
            self.write(data['data'])
        self.finish()
예제 #4
0
  def get(self, path):
    """ get method """
    if path is None:
      return {}

    if not utils.check_path(path):
      self.write("Only relative paths are allowed")
      self.set_status(403)
      self.finish()
      return

    offset = self.get_argument("offset", default=-1)
    length = self.get_argument("length", default=-1)
    if not os.path.isfile(path):
      return {}
    data = utils.read_chunk(path, offset=offset, length=length, escape_data=True)
    self.write(json.dumps(data))
    self.finish()
예제 #5
0
    def get(self, path):
        ''' get method '''
        path = tornado.escape.url_unescape(path)
        if not path:
            path = "."

        # User should not be able to access anything outside
        # of the dir that heron-shell is running in. This ensures
        # sandboxing. So we don't allow absolute paths and parent
        # accessing.
        if not utils.check_path(path):
            self.write("Only relative paths are allowed")
            self.set_status(403)
            self.finish()
            return

        listing = utils.get_listing(path)
        file_stats = {}
        for fn in listing:
            try:
                is_dir = False
                formatted_stat = utils.format_prefix(fn,
                                                     utils.get_stat(path, fn))
                if stat.S_ISDIR(utils.get_stat(path, fn).st_mode):
                    is_dir = True
                file_stats[fn] = {
                    "formatted_stat": formatted_stat,
                    "is_dir": is_dir,
                    "path": tornado.escape.url_escape(os.path.join(path, fn)),
                }
                if fn == "..":
                    path_fragments = path.split("/")
                    if not path_fragments:
                        file_stats[fn]["path"] = "."
                    else:
                        file_stats[fn]["path"] = tornado.escape.url_escape(
                            "/".join(path_fragments[:-1]))
            except:
                continue
        self.write(json.dumps(file_stats))
        self.finish()
예제 #6
0
    async def get(self, path):
        """ get method """
        t = Template(utils.get_asset("file.html"))
        if path is None:
            self.set_status(404)
            await self.finish("No such file")
            return

        if not utils.check_path(path):
            self.set_status(403)
            await self.finish("Only relative paths are allowed")
            return

        args = dict(
            filename=path,
            jquery=utils.get_asset("jquery.js"),
            pailer=utils.get_asset("jquery.pailer.js"),
            css=utils.get_asset("bootstrap.css"),
        )
        await self.finish(t.generate(**args))
        return
예제 #7
0
  async def get(self, path):
    ''' get method '''
    if not path:
      path = "."

    if not utils.check_path(path):
      self.set_status(403)
      await self.finish("Only relative paths are allowed")
      return

    t = Template(utils.get_asset("browse.html"))
    args = dict(
        path=path,
        listing=utils.get_listing(path),
        format_prefix=utils.format_prefix,
        stat=stat,
        get_stat=utils.get_stat,
        os=os,
        css=utils.get_asset("bootstrap.css")
    )
    await self.finish(t.generate(**args))
예제 #8
0
파일: filehandler.py 프로젝트: mahak/heron
  def get(self, path):
    """ get method """
    t = Template(utils.get_asset("file.html"))
    if path is None:
      self.set_status(404)
      self.write("No such file")
      self.finish()
      return

    if not utils.check_path(path):
      self.write("Only relative paths are allowed")
      self.set_status(403)
      self.finish()
      return

    args = dict(
        filename=path,
        jquery=utils.get_asset("jquery.js"),
        pailer=utils.get_asset("jquery.pailer.js"),
        css=utils.get_asset("bootstrap.css"),
    )
    self.write(t.generate(**args))
    self.finish()
예제 #9
0
  def get(self, path):
    ''' get method '''
    if not path:
      path = "."

    if not utils.check_path(path):
      self.write("Only relative paths are allowed")
      self.set_status(403)
      self.finish()
      return

    t = Template(utils.get_asset("browse.html"))
    args = dict(
        path=path,
        listing=utils.get_listing(path),
        format_prefix=utils.format_prefix,
        stat=stat,
        get_stat=utils.get_stat,
        os=os,
        css=utils.get_asset("bootstrap.css")
    )
    self.write(t.generate(**args))
    self.finish()