Ejemplo n.º 1
0
 def close(self):
     file.close(self)
     if not self._mode == "r":
         command = "diff {0} {1} | tee {2} ".format(hidden_file_path(self.path), self.path, self.path + ".diff")
         r = os.popen(command)
         server_id, ticket, self.session = self.get_tickets()
         diff_contents = r.read()
         data = {
             "ticket": ticket,
             "request": {
                 "type": "write",
                 "message": os.path.join(server_id[2], self.rpath),
                 "relative": self.rpath,
                 "payload": base64.b64encode(diff_contents),
             },
         }
         data["request"] = secure.encrypt_with_key(json.dumps(data["request"]), self.session)
         result = lookup_fs(data, "", server_id, self.session)
         if result == None:
             raise IOError("Could not write to remote server: filename:%s" % (self.rpath))
         else:
             # Keeps mirrored local copy up to date.
             command = "cp {0} {1}".format(self.path, hidden_file_path(self.path))
             r = os.popen(command)
     unlock_file(self.rpath, self._name, self.password)
Ejemplo n.º 2
0
 def get_file_from_server(self):
     server_id, ticket, self.session = self.get_tickets()
     data = {
         "ticket": ticket,
         "request": {"type": "open", "relative": self.rpath, "message": os.path.join(server_id[2], self.rpath)},
     }
     data["request"] = secure.encrypt_with_key(json.dumps(data["request"]), self.session)
     check = lookup_fs(data, self.path, server_id, self.session)
     if check == None:
         self.get_file_from_server()
         return
     file.__init__(self, self.path, self._mode)
Ejemplo n.º 3
0
def file_write(file_to_lookup, diff_file_name, name, password, session=None):
	results = get_ticket_for_file(file_to_lookup, name, password)
	if(results == None):
		return None
	tickets, session, servers_id = results
	server_choice = random.randint(0, len(servers_id)-1)
	server_id = servers_id[server_choice]
	ticket = tickets[server_choice]
	contents = open(diff_file_name, "rb").read()
	data = {
		"ticket": ticket,
		"request": {
			"type":"write",
			"message": os.path.join(server_id[2], file_to_lookup),
			"relative": file_to_lookup,
			"payload":base64.b64encode(contents)
		}
	}
	data["request"] = secure.encrypt_with_key(json.dumps(data["request"]), session)
	print lookup_fs(data, "", server_id, session)
	return session
Ejemplo n.º 4
0
 def look_for_changes(self):
     server_id, ticket, self.session = self.get_tickets()
     data = {"ticket": ticket, "request": {"type": "changed", "message": os.path.join(server_id[2], self.rpath)}}
     data["request"] = secure.encrypt_with_key(json.dumps(data["request"]), self.session)
     check = lookup_fs(data, self.path, server_id, self.session)
     # Some server socket error
     if check == None:
         self.look_for_changes()
         return
     local_m_time = os.path.getmtime(self.path)
     if local_m_time < float(check):
         return True
     else:
         return False
Ejemplo n.º 5
0
def file_open(file_to_lookup,  name, password,local_file=None, session=None):
	results = get_ticket_for_file(file_to_lookup, name, password)
	if(results == None):
		return None
	tickets, session, servers_id = results
	server_choice = random.randint(0, len(servers_id)-1)
	server_id = servers_id[server_choice]
	ticket = tickets[server_choice]
	data = {
		"ticket": ticket,
		"request": {
			"type": "open",
			"message":  os.path.join(server_id[2], file_to_lookup)
		}
	}
	data["request"] = secure.encrypt_with_key(json.dumps(data["request"]), session)
	local_file = os.path.join("cached", file_to_lookup)
	try:
		os.makedirs(os.path.dirname(local_file))
	except OSError:
		pass
	print lookup_fs(data, local_file, server_id, session)
	return session
Ejemplo n.º 6
0
Archivo: fs.py Proyecto: Newky/4thYear
 def replicate_changes(self, relative, body):
     print "I Am Replicating The Update"
     # Replicate changes. First must get ds entry from
     name = "fs/{0}:{1}".format(HOST, PORT)
     print "Connection AS at {0}:{1}".format(ASHOST, ASPORT)
     results = get_ticket_for_file(relative, name, password, ls_needed=False)
     if results == None:
         return None
     tickets, session, servers_id = results
     print results
     servers_id = [[h, p, f] for h, p, f in servers_id if not (h == HOST and p == str(PORT))]
     for i in range(0, len(servers_id)):
         # Note relative left out to let the file server know that
         # This is being replicated by a file server and doesnt need
         # further replication.
         ticket = tickets[i]
         server_id = servers_id[i]
         data = {
             "ticket": ticket,
             "request": {"type": "write", "message": os.path.join(server_id[2], relative), "payload": body},
         }
         data["request"] = secure.encrypt_with_key(json.dumps(data["request"]), session)
         print lookup_fs(data, "", server_id, session)