def is_content_available(self, icnname: Name) -> bool: if not icnname.components_to_string().startswith(self._prefix.value.components_to_string()): return False filename = icnname.string_components[-1] filename_abs = self._foldername + "/" + filename filepath = os.path.abspath(filename_abs) if os.path.commonprefix([filepath, self._safepath]) != self._safepath: # prevent directory traversal return False if os.path.isfile(filename_abs): return True return False
def get_content(self, icnname: Name) -> Content: if not icnname.components_to_string().startswith(self._prefix.value.components_to_string()): return None try: filename = icnname.string_components[-1] filename_abs = self._foldername + "/" + filename filepath = os.path.abspath(filename_abs) if os.path.commonprefix([filepath, self._safepath]) != self._safepath: #prevent directory traversal return None with open(filename_abs, 'r') as content_file: content = content_file.read() return Content(icnname, content) except: return None
def test_add_inplace(self): n = Name('/test') n += 'data' self.assertEqual([b'test', b'data'], n._components) self.assertEqual('/test/data', n.components_to_string())
def test_constructor_byteslist(self): n = Name([b'test', b'data']) self.assertEqual([b'test', b'data'], n._components) self.assertEqual('/test/data', n.components_to_string())