Esempio n. 1
0
	def __init__(self, server, path, fh):
		try:
			if not "detail" in fh:
				fh = server.getFileDetails(fh)
				debug.debug("NetStorageStat: getFileDetails returned:\n%s"%fh)
			self.fh = fh
			
			if fh["folder"]:
				self.st_mode = stat.S_IFDIR | 0755
				self.st_nlink = 2
				self.st_size = 4096
			else:
				self.st_mode = stat.S_IFREG | 0666
				self.st_nlink = 1
				if "size" in fh:
					self.st_size = fh["size"]
				else:
					self.st_size = 0;
			
			self.st_ino = 0
			self.st_dev = 0
			self.st_uid = 0
			self.st_gid = 0
			self.st_rdev = 0
			self.st_blksize = 0
			self.st_blocks = 24
			self.st_atime = time.time()
			self.st_mtime = self._get_time("mtime")
			self.st_ctime = self._get_time("ctime")
		except:
			debug.debug_exception()
			raise
Esempio n. 2
0
	def __init__(self, server, root, username, password):
		self.server = server
		self.root = root
		self.username = username
		self.password = password
		self.authentication = "Basic %s" % base64.encodestring('%s:%s' % (self.username, self.password))[:-1]
		
		try:
			response = urltools.Request(self.root, base=self.server, expect=urltools.HTML)
		except urllib2.HTTPError, e:
			if hasattr(e, "code") and e.code == 401:
				base64string = base64.encodestring('%s:%s' % (self.username, self.password))[:-1]
				try:
					response = urltools.Request(
						self.root,
						base=self.server,
						expect=urltools.HTML,
						headers={"Authorization": "Basic %s" % base64string}
					)
				except:
					debug.debug_exception()
					raise
			else:
				debug.debug_exception()
				raise
Esempio n. 3
0
def main():
	server = NetStorageFS(config.servername, config.root, config.username, config.password)
	#version="%prog " + fuse.__version__,
	#				usage=usage, dash_s_do='setsingle')
	try:
		server.parse(errex=1)
		server.main()
	except:
		debug.debug_exception()
		raise
Esempio n. 4
0
	def getFolderIndex(self, path):
		try:
			response = urltools.Request(
				os.path.join(self.root, path),
				base=self.server,
				headers={"Authorization": self.authentication},
				expect=urltools.HTML
			)
		except:
			debug.debug_exception()
			raise
		
		dom = response.get_dom()
		
		script = dom.getElementsByTagName("body")[0].firstElementChild.childNodes[1].nodeValue
		string = script.split("devicePath=",1)[1].split("\n",1)[0].strip()
		deviceFolder = urllib.unquote(json.loads(string))
		
		table = xpath.find('//div[@id="fileArea"]/table[@class="FilesTable"]', dom)[0]
		
		files = []
		
		for row in table.childNodes:
			if row.nodeType != 1 or row.nodeName.lower() != "tr":
				continue
			
			c = row.children
			script = c[1].lastElementChild.childNodes[1].nodeValue
			
			filename = c[1].firstElementChild["title"]
			timestring = c[3].firstElementChild.childNodes[1].nodeValue.split('"')[1]
			mtime = time.strptime(timestring, "%b %d %Y %H:%M %Z")
			folder = "el.isFolder = true" in script
			string = script.split("el.fileURL=",1)[1].split(";",1)[0]
			uri = urllib.unquote(json.loads(string))
			files.append(\
			{
				"filename":filename,
				"mtime":mtime,
				"folder":folder,
				"uri": uri,
				"devicePath": os.path.join(deviceFolder, filename)
			})
		
		return files
Esempio n. 5
0
	def readdir(self, path, offset):
		try:
			if path[0] == "/":
				path = path[1:]
			
			dirents = \
			[
				".",
				".."
			]
			
			dirents.extend([i["filename"] for i in self.server.getFolderIndex(path)])
			
			for r in dirents:
				yield fuse.Direntry(str(r))
		except:
			debug.debug_exception()
			raise
Esempio n. 6
0
	def getattr(self, path):
		debug.debug("getattr(",path,")")
		try:
			if path == "/":
				fh = \
				{
					"detail": True,
					"folder": True
				}
			else:
				parent, name = path.rsplit("/", 1)
				if parent.startswith("/"):
					parent = parent[1:]
				
				contents = self.server.getFolderIndex(parent)
				fh = [f for f in contents if f["filename"] == name]
				
				if not len(fh):
					debug.debug("No such file or directory")
					return -errno.ENOENT
				
				fh = fh[0]
			
			abspath = os.path.join(self.tmp_dir, path[1:])
			debug.debug([self.tmp_dir, path, abspath])
			
			if not os.path.exists(abspath):
				if fh["folder"]:
					os.mkdir(abspath)
				else:
					os.utime(abspath, None)
			
			st = NetStorageStat(self.server, path, fh)
			
			return st
		except:
			debug.debug_exception()
			raise
Esempio n. 7
0
	def getFileDetails(self, data):
		post = \
		{
			"method": "props",
			"file": data["uri"],
			"session": self.getSession()
		}
		
		try:
			response = urltools.Request(
				"/NetStorage/servlet/FileProps",
				base=self.server,
				data=post,
				headers={"Authorization": self.authentication}
			)
		except:
			debug.debug_exception()
			raise
		
		dom = response.get_dom()
		try:
			table = xpath.find('//div[@id="NFSRights"]/table', dom)[0]
		except IndexError:
			return data
		
		c = table.children
		data["size"] = int(c[1].children[1].firstChild.nodeValue.strip())
		
		try:
			script = c[2].children[1].firstElementChild.childNodes[1].nodeValue
			string = script.split("str=",1)[1].split("\n",1)[0].strip()
			timestring = urllib.unquote(json.loads(string))
			data["ctime"] = time.strptime(timestring, "%Y-%m-%dT%H:%M:%SZ")
		except:
			debug.debug_exception()
		
		try:
			script = c[3].children[1].firstElementChild.childNodes[1].nodeValue
			string = script.split("new Date(",1)[1].split(")\n",1)[0].strip()
			timestring = urllib.unquote(json.loads(string))
			data["mtime"] = time.strptime(timestring, "%a, %d %b %Y %H:%M:%S %Z")
		except:
			debug.debug_exception()
		
		data["detail"] = True
		
		return data
Esempio n. 8
0
				base64string = base64.encodestring('%s:%s' % (self.username, self.password))[:-1]
				try:
					response = urltools.Request(
						self.root,
						base=self.server,
						expect=urltools.HTML,
						headers={"Authorization": "Basic %s" % base64string}
					)
				except:
					debug.debug_exception()
					raise
			else:
				debug.debug_exception()
				raise
		except:
			debug.debug_exception()
			raise
		
	
	def getSession(self):
		for cookie in urltools.cj:
			if cookie.name.lower() == "novellsession1":
				return cookie.value
		return None
	
	def getFolderIndex(self, path):
		try:
			response = urltools.Request(
				os.path.join(self.root, path),
				base=self.server,
				headers={"Authorization": self.authentication},